[
  {
    "path": ".gitmodules",
    "content": "[submodule \"thirdparty/DeepLSD\"]\n\tpath = thirdparty/DeepLSD\n\turl = https://github.com/cvg/DeepLSD.git\n[submodule \"thirdparty/MLSD\"]\n\tpath = thirdparty/MLSD\n\turl = https://github.com/navervision/mlsd.git\n[submodule \"thirdparty/F-Clip\"]\n\tpath = thirdparty/F-Clip\n\turl = https://github.com/Delay-Xili/F-Clip.git\n[submodule \"thirdparty/SOLD2\"]\n\tpath = thirdparty/SOLD2\n\turl = https://github.com/cvg/SOLD2.git\n[submodule \"thirdparty/LETR\"]\n\tpath = thirdparty/LETR\n\turl = https://github.com/mlpc-ucsd/LETR.git\n[submodule \"thirdparty/HAWP\"]\n\tpath = thirdparty/HAWP\n\turl = https://github.com/cherubicXN/hawp.git\n[submodule \"thirdparty/TP-LSD\"]\n\tpath = thirdparty/TP-LSD\n\turl = https://github.com/Siyuada7/TP-LSD.git\n[submodule \"thirdparty/ULSD\"]\n\tpath = thirdparty/ULSD\n\turl = https://github.com/lh9171338/Unified-Line-Segment-Detection.git\n[submodule \"thirdparty/DHTLP\"]\n\tpath = thirdparty/DHTLP\n\turl = https://github.com/yanconglin/Deep-Hough-Transform-Line-Priors.git\n[submodule \"thirdparty/AFM-LSD\"]\n\tpath = thirdparty/AFM-LSD\n\turl = https://github.com/cherubicXN/afm_cvpr2019.git\n[submodule \"thirdparty/LCNN\"]\n\tpath = thirdparty/LCNN\n\turl = https://github.com/zhou13/lcnn.git\n[submodule \"thirdparty/LBD\"]\n\tpath = thirdparty/LBD\n\turl = https://github.com/mtamburrano/LBD_Descriptor.git\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\"><br><ins>Line Segment Detection</ins><br>A collection of line segment detection algorithms</h1>\n \n</p>\n\n## \n\nThis repository hosts the papers with code for line segment detection, enjoy yourself. \n\n<!-- ![](assets/images/line-segment-detection.jpg) -->\n\n![SOLD2](assets/images/demo_moving_camera.gif)\n\n<!-- ![demo_deeplsd](assets/images/demo_deeplsd.gif) -->\n\n## Usage\n\n``` bash\ngit clone --recurse-submodules https://github.com/Vincentqyw/LineSegmentsDetection.git\n```\n\n## DeepLSD\n\n- Title: \"DeepLSD: Line Segment Detection and Refinement with Deep Image Gradients\", Arxiv 2022.\n- Paper: https://arxiv.org/abs/2212.07766\n- Code: https://github.com/cvg/DeepLSD\n\n## M-LSD\n\n- Title: \"M-LSD: Towards Light-weight and Real-time Line Segment Detection\", AAAI 2022.\n- Paper: [https://arxiv.org/abs/2106.00186](https://arxiv.org/abs/2106.00186)\n- Code: https://github.com/navervision/mlsd\n\n## F-Clip\n\n- Title: \"Fully Convolutional Line Parsing\", Neurocomputing 2022.\n- Paper: [https://arxiv.org/abs/2104.11207](https://arxiv.org/abs/2104.11207)\n- Code: https://github.com/Delay-Xili/F-Clip\n\n## SOLD2\n\n- Title: \"SOLD2: Self-supervised Occlusion-aware Line Description and Detection\", CVPR 2021.\n- Paper: https://arxiv.org/abs/2104.03362\n- Code: https://github.com/cvg/SOLD2, [[Kornia Tutorial]](https://kornia-tutorials.readthedocs.io/en/latest/line_detection_and_matching_sold2.html)\n\n## LETR\n\n- Title: \"Line Segment Detection Using Transformers without Edges\", CVPR 2021.\n- Paper: [https://arxiv.org/abs/2101.01909](https://arxiv.org/abs/2101.01909)\n- Code: https://github.com/mlpc-ucsd/LETR\n\n## HAWP\n\n- Title: \"Holistically-Attracted Wireframe Parsing: From Supervised Learning to Self-Supervised Learning\", CVPR 2020.\n- Paper: https://arxiv.org/abs/2210.12971\n- Code: https://github.com/cherubicXN/hawp\n\n## TP-LSD\n\n- Title: \"TP-LSD: Tri-Points Based Line Segment Detector\", ECCV 2020.\n- Paper: https://arxiv.org/abs/2009.05505\n- Code: https://github.com/Siyuada7/TP-LSD\n\n## ULSD\n\n- Title: \"ULSD: Unified Line Segment Detection across Pinhole, Fisheye, and Spherical Cameras\", ISPRS 2020.\n- Paper: https://arxiv.org/abs/2011.03174\n- Code: https://github.com/lh9171338/Unified-Line-Segment-Detection\n\n## Deep-Hough-Transform-Line-Priors\n\n- Title: \"Deep Hough-Transform Line Priors\", ECCV 2020.\n- Paper: [https://arxiv.org/abs/2007.09493](https://arxiv.org/abs/2007.09493)\n- Code: https://github.com/yanconglin/Deep-Hough-Transform-Line-Priors\n\n## AFM-LSD\n\n- Title: \"Learning Attraction Field Representation for Robust Line Segment Detection\", CVPR 2019.\n- Paper: [https://arxiv.org/abs/1812.02122](https://arxiv.org/abs/1812.02122)\n- Code: https://github.com/cherubicXN/afm_cvpr2019\n\n## L-CNN\n\n- Title: \"End-to-End Wireframe Parsing\", ICCV 2019.\n- Paper: [https://arxiv.org/abs/1905.03246](https://arxiv.org/abs/1905.03246)\n- Code: https://github.com/zhou13/lcnn\n\n## MCMLSD\n\n- Title: \"MCMLSD: A Dynamic Programming Approach to Line Segment Detection\", CVPR 2017.\n- Paper: http://openaccess.thecvf.com/content_cvpr_2017/papers/Almazan_MCMLSD_A_Dynamic_CVPR_2017_paper.pdf\n- Code: http://www.elderlab.yorku.ca/?smd_process_download=1&download_id=8423\n\n## CannyLines\n\n- Title: \"CannyLines: A Parameter-Free Line Segment Detector\", ICIP 2015.\n- Project Page: https://cvrs.whu.edu.cn/cannylines\n- Paper: http://cvrs.whu.edu.cn/projects/cannyLines/papers/CannyLines-ICIP2015.pdf\n- Code: http://cvrs.whu.edu.cn/projects/cannyLines/codes/CannyLines-v3.rar\n\n## EDline\n\n- Title: \"Edge Drawing: A Combined Real-Time Edge and Segment Detector\", JVCIR 2012.\n- Paper: https://www.sciencedirect.com/science/article/abs/pii/S1047320312000831\n- Code: https://github.com/mtamburrano/LBD_Descriptor\n\n## LSD\n\n- Title: \"LSD: a Line Segment Detector\", Image Processing On Line 2012.\n- Project Page: http://www.ipol.im/pub/art/2012/gjmr-lsd/\n- Paper: http://www.ipol.im/pub/art/2012/gjmr-lsd/article.pdf\n- Code: http://www.ipol.im/pub/art/2012/gjmr-lsd/lsd_1.5.zip\n\n## LSWMS\n\n- Title: \"Line segment detection using weighted mean shift procedures on a 2D slice sampling strategy\", Pattern Analysis and Applications 2011.\n- Paper: [https://www.researchgate.net/LSWMS.pdf](https://www.researchgate.net/profile/Marcos_Nieto3/publication/220654859_Line_segment_detection_using_weighted_mean_shift_procedures_on_a_2D_slice_sampling_strategy/links/56a5d56a08aef91c8c16b1ac.pdf?inViewer=0&origin=publication_detail&pdfJsDownload=0)\n- Code: https://sourceforge.net/projects/lswms/\n"
  },
  {
    "path": "assets/run.sh",
    "content": "## [DELETE SUBMODULES]\n# git rm --cached SOLD2\n# git rm --cached DeepLSD\n# git rm --cached TP-LSD\n# git rm --cached Unified-Line-Segment-Detection\n# git rm --cached LETR\n# git rm --cached Deep-Hough-Transform-Line-Priors\n# git rm --cached F-Clip\n# git rm --cached mlsd\n# git rm --cached afm_cvpr2019\n# git rm --cached lcnn\n# git rm --cached hawp\n\n# rm -rf SOLD2\n# rm -rf DeepLSD\n# rm -rf TP-LSD\n# rm -rf Unified-Line-Segment-Detection\n# rm -rf LETR\n# rm -rf Deep-Hough-Transform-Line-Priors\n# rm -rf F-Clip\n# rm -rf mlsd\n# rm -rf afm_cvpr2019\n# rm -rf lcnn\n# rm -rf hawp\n\n# rm .gitmodules\n\n## [ADD SUBMODULES]\n# mkdir thirdparty\n# git submodule add https://github.com/cvg/DeepLSD.git thirdparty/DeepLSD\n# git submodule add https://github.com/navervision/mlsd.git thirdparty/MLSD\n# git submodule add https://github.com/Delay-Xili/F-Clip.git thirdparty/F-Clip\n# git submodule add https://github.com/cvg/SOLD2.git thirdparty/SOLD2\n# git submodule add https://github.com/mlpc-ucsd/LETR.git thirdparty/LETR\n# git submodule add https://github.com/cherubicXN/hawp.git thirdparty/HAWP\n# git submodule add https://github.com/Siyuada7/TP-LSD.git thirdparty/TP-LSD\n# git submodule add https://github.com/lh9171338/Unified-Line-Segment-Detection.git thirdparty/ULSD\n# git submodule add https://github.com/yanconglin/Deep-Hough-Transform-Line-Priors.git thirdparty/DHTLP\n# git submodule add https://github.com/cherubicXN/afm_cvpr2019.git thirdparty/AFM-LSD\n# git submodule add https://github.com/zhou13/lcnn.git thirdparty/LCNN\n# git submodule add https://github.com/mtamburrano/LBD_Descriptor.git thirdparty/LBD"
  },
  {
    "path": "thirdparty/CannyLines/CMakeLists.txt",
    "content": "# set project's name\nPROJECT( CannyLine )\n\n###############################################################################\n# CMake settings\nCMAKE_MINIMUM_REQUIRED(VERSION 2.8.3)\n\n# this command finds OpenCV libraries and sets all required variables\nFIND_PACKAGE(OpenCV REQUIRED)\n\nFILE(GLOB_RECURSE HDRS_FILES *.h *.hpp)\nFILE(GLOB_RECURSE SRCS_FILES *.c *.cpp)\n\n#ADD_LIBRARY(${PROJECT_NAME}  ${HDRS_FILES} ${SRCS_FILES})\n#TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${OpenCV_LIBS})\n\nADD_EXECUTABLE(${PROJECT_NAME} ${SRCS_FILES} ${HDRS_FILES})\nTARGET_LINK_LIBRARIES(${PROJECT_NAME} ${OpenCV_LIBS})\n"
  },
  {
    "path": "thirdparty/CannyLines/src/CannyLine.cpp",
    "content": "#include \"CannyLine.h\"\n#include \"MetaLine.h\"\n\nCannyLine::CannyLine(void)\n{\n}\n\nCannyLine::~CannyLine(void)\n{\n}\n\nvoid CannyLine::cannyLine(cv::Mat &image,std::vector<std::vector<float> > &lines)\n{\n\tMetaLine deterctor;\n\tfloat gausSigma=1.0;\n\tint gausHalfSize=1;\n\tdeterctor.MetaLineDetection(image,gausSigma,gausHalfSize,lines);\n}"
  },
  {
    "path": "thirdparty/CannyLines/src/CannyLine.h",
    "content": "#ifndef _CANNY_LINE_H_\n#define _CANNY_LINE_H_\n#pragma once\n\n#include \"cv.h\"\n#include \"highgui.h\"\n#include \"cxcore.h\"\n\nclass CannyLine\n{\npublic:\n\tCannyLine(void);\n\t~CannyLine(void);\n\n\tstatic void cannyLine(cv::Mat &image,std::vector<std::vector<float> > &lines);\n};\n\n#endif // _CANNY_LINE_H_\n\n"
  },
  {
    "path": "thirdparty/CannyLines/src/MetaLine.cpp",
    "content": "#include \"MetaLine.h\"\n#include \"QuickSort.h\"\n\n#define INF 10000000000\n\nMetaLine::MetaLine(void)\n{\n\tvisualMeaningfulGradient=70;\n\tp=0.125;\n\tsigma=1.0;\n\tthAngle=0.0;\n}\n\n\nMetaLine::~MetaLine(void)\n{\n}\n\nbool MetaLine::gradientWeightedLeastSquareFitting(string_t &string,float *parameters,float sigma)\n{\n\tint i,j;\n\tint N=string.size();\n\n\tfloat kCoarse=0.0;\n\tif (string[0].x==string[string.size()-1].x)\n\t\tkCoarse=INF;\n\telse\n\t\tkCoarse=float(string[0].y-string[string.size()-1].y)/(string[0].x-string[string.size()-1].x);\n\n\tfloat k=0.0,b=0.0,dev=0.0,temp=0.0;\n\tfloat totalGradient=0;\n\tstd::vector<float> weight(N,0);\n\tfloat *ptr=(float*) gradientMap.data;\t\n\tfor (i=0;i<N;++i)\n\t{\n\t\tweight[i]=*(ptr+int(string[i].y)*cols+int(string[i].x));\n\t\ttotalGradient+=weight[i];\n\t}\n\tfor (i=0;i<N;++i)\n\t\tweight[i]/=totalGradient;\n\t\n\tif (abs(kCoarse)<1)\n\t{\n\t\tfloat sumX=0.0;\n\t\tfloat sumY=0.0;\n\t\tfloat sumX2=0.0;\n\t\tfloat sumXY=0.0;\n\n\t\tfor (i=0;i<N;++i)\n\t\t{\n\t\t\tsumX+=weight[i]*string[i].x;\n\t\t\tsumY+=weight[i]*string[i].y;\n\t\t\tsumX2+=weight[i]*string[i].x*string[i].x;\n\t\t\tsumXY+=weight[i]*string[i].x*string[i].y;\n\t\t}\n\n\t\tb=(sumX2*sumY-sumX*sumXY)/(sumX2-sumX*sumX);\n\t\tk=(sumXY-sumX*sumY)/(sumX2-sumX*sumX);\n\n\t\tfor (i=0;i<N;++i)\n\t\t{\n\t\t\ttemp=string[i].y-k*string[i].x-b;\n\t\t\tdev+=temp*temp;\n\t\t}\n\t\tdev=sqrt(dev/float(N-2));\n\n\t\tparameters[0]=0; //label\n\t}\n\telse\n\t{\n\t\tfloat sumX=0.0;\n\t\tfloat sumY=0.0;\n\t\tfloat sumY2=0.0;\n\t\tfloat sumXY=0.0;\n\n\t\tfor (i=0;i<N;++i)\n\t\t{\n\t\t\tsumX+=weight[i]*string[i].x;\n\t\t\tsumY+=weight[i]*string[i].y;\n\t\t\tsumY2+=weight[i]*string[i].y*string[i].y;\n\t\t\tsumXY+=weight[i]*string[i].x*string[i].y;\n\t\t}\n\n\t\tb=(sumY2*sumX-sumY*sumXY)/(sumY2-sumY*sumY);\n\t\tk=(sumXY-sumX*sumY)/(sumY2-sumY*sumY);\n\n\t\tfor (i=0;i<N;++i)\n\t\t{\n\t\t\ttemp=string[i].x-k*string[i].y-b;\n\t\t\tdev+=temp*temp;\n\t\t}\n\t\tdev=sqrt(dev/float(N-2));\n\n\t\tparameters[0]=1; //label\n\t}\n\tparameters[1]=k;\n\tparameters[2]=b;\n\tparameters[3]=dev;\n\n\tif (dev<sigma)\n\t\treturn true;\n\telse\n\t\treturn false;\n}\n\nbool MetaLine::leastSquareFitting(string_t &string, float *parameters,float sigma)\n{\n\tint i,j;\n\tint N=string.size();\n\n\tfloat kCoarse=0.0;\n\tif (string[0].x==string[N-1].x)\n\t\tkCoarse=INF;\n\telse\n\t\tkCoarse=float(string[0].y-string[N-1].y)/(string[0].x-string[N-1].x);\n\n\tfloat k=0.0,b=0.0,dev=0.0,temp=0.0,devMax=0.0;\n\tif (abs(kCoarse)<1)\n\t{\n\t\tfloat sumX=0.0;\n\t\tfloat sumY=0.0;\n\t\tfloat sumX2=0.0;\n\t\tfloat sumXY=0.0;\n\n\t\tfor (i=0;i<N;++i)\n\t\t{\n\t\t\tsumX+=string[i].x;\n\t\t\tsumY+=string[i].y;\n\t\t\tsumX2+=string[i].x*string[i].x;\n\t\t\tsumXY+=string[i].x*string[i].y;\n\t\t}\n\n\t\tb=(sumX2*sumY-sumX*sumXY)/(N*sumX2-sumX*sumX);\n\t\tk=(N*sumXY-sumX*sumY)/(N*sumX2-sumX*sumX);\n\n\t\tfor (i=0;i<N;++i)\n\t\t{\n\t\t\ttemp=abs(string[i].y-k*string[i].x-b);\n\t\t\tif (temp>devMax) devMax=temp;\n\t\t\tdev+=temp*temp;\n\t\t}\n\t\tdev=sqrt(dev/float(N-2));\n\t\tparameters[0]=0; //label\n\t}\n\telse\n\t{\n\t\tfloat sumX=0.0;\n\t\tfloat sumY=0.0;\n\t\tfloat sumY2=0.0;\n\t\tfloat sumXY=0.0;\n\n\t\tfor (i=0;i<N;++i)\n\t\t{\n\t\t\tsumX+=string[i].x;\n\t\t\tsumY+=string[i].y;\n\t\t\tsumY2+=string[i].y*string[i].y;\n\t\t\tsumXY+=string[i].x*string[i].y;\n\t\t}\n\n\t\tb=(sumY2*sumX-sumY*sumXY)/(N*sumY2-sumY*sumY);\n\t\tk=(N*sumXY-sumX*sumY)/(N*sumY2-sumY*sumY);\n\n\t\tfor (i=0;i<N;++i)\n\t\t{\n\t\t\ttemp=abs(string[i].x-k*string[i].y-b);\n\t\t\tif (temp>devMax) devMax=temp;\n\t\t\tdev+=temp*temp;\n\t\t}\n\t\tdev=sqrt(dev/float(N-2));\n\t\tparameters[0]=1; //label\n\t}\n\tparameters[1]=k;\n\tparameters[2]=b;\n\tparameters[3]=dev;\n\n\tif (dev<sigma&&devMax<3*sigma)\n\t\treturn true;\n\telse\n\t\treturn false;\n}\n\nbool MetaLine::leastSquareFitting(cluster_t &cluster, float *parameters,float sigma)\n{\n\tint i,j;\n\tint N=cluster.size;\n\n\tfloat kCoarse=0.0;\n\tif (cluster.pixels[0].x==cluster.pixels[N-1].x)\n\t\tkCoarse=INF;\n\telse\n\t\tkCoarse=float(cluster.pixels[0].y-cluster.pixels[N-1].y)/(cluster.pixels[0].x-cluster.pixels[N-1].x);\n\n\tfloat k=0.0,b=0.0,dev=0.0,temp=0.0;\n\tif (abs(kCoarse)<1)\n\t{\n\t\tfloat sumX=0.0;\n\t\tfloat sumY=0.0;\n\t\tfloat sumX2=0.0;\n\t\tfloat sumXY=0.0;\n\n\t\tfor (i=0;i<N;++i)\n\t\t{\n\t\t\tsumX+=cluster.pixels[i].x;\n\t\t\tsumY+=cluster.pixels[i].y;\n\t\t\tsumX2+=cluster.pixels[i].x*cluster.pixels[i].x;\n\t\t\tsumXY+=cluster.pixels[i].x*cluster.pixels[i].y;\n\t\t}\n\n\t\tb=(sumX2*sumY-sumX*sumXY)/(N*sumX2-sumX*sumX);\n\t\tk=(N*sumXY-sumX*sumY)/(N*sumX2-sumX*sumX);\n\n\t\tstd::vector<float> offsets(N,0);\n\t\tfor (i=0;i<N;++i)\n\t\t{\n\t\t\ttemp=cluster.pixels[i].y-k*cluster.pixels[i].x-b;\n\t\t\toffsets[i]=temp;\n\t\t\tdev+=temp*temp;\n\t\t}\n\t\tfloat thegma=sqrt(dev/float(N-2));\n\n\t\tint start=0,end=N-1;\n\t\tint index=0;\n\t\tfloat devOutliers=0.0;\n\t\tfor (i=0;i<N;++i)\n\t\t{\n\t\t\tif (offsets[i]<1.0)\n\t\t\t\tindex++;\n\t\t\tif (index==2)\n\t\t\t{\n\t\t\t\tstart=i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse\n\t\t\t\tdevOutliers+=offsets[i]*offsets[i];\n\t\t}\n\n\t\tindex=0;\n\t\tfor (i=N-1;i>=0;--i)\n\t\t{\n\t\t\tif (offsets[i]<1.0)\n\t\t\t\tindex++;\n\t\t\tif (index==2)\n\t\t\t{\n\t\t\t\tend=i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse\n\t\t\t\tdevOutliers+=offsets[i]*offsets[i];\n\t\t}\n\t\tif (end<=start) return false;\n\n\t\tdev=sqrt((dev-devOutliers)/float(N-2));\n\t\tcluster.pixels=&(cluster.pixels[start]);\n\t\tcluster.size=end-start+1;\n\t\tparameters[0]=0; //label\n\n\t}\n\telse\n\t{\n\t\tfloat sumX=0.0;\n\t\tfloat sumY=0.0;\n\t\tfloat sumY2=0.0;\n\t\tfloat sumXY=0.0;\n\n\t\tfor (i=0;i<N;++i)\n\t\t{\n\t\t\tsumX+=cluster.pixels[i].x;\n\t\t\tsumY+=cluster.pixels[i].y;\n\t\t\tsumY2+=cluster.pixels[i].y*cluster.pixels[i].y;\n\t\t\tsumXY+=cluster.pixels[i].x*cluster.pixels[i].y;\n\t\t}\n\n\t\tb=(sumY2*sumX-sumY*sumXY)/(N*sumY2-sumY*sumY);\n\t\tk=(N*sumXY-sumX*sumY)/(N*sumY2-sumY*sumY);\n\n\t\tstd::vector<float> offsets(N,0);\n\t\tfor (i=0;i<N;++i)\n\t\t{\n\t\t\ttemp=cluster.pixels[i].x-k*cluster.pixels[i].y-b;\n\t\t\toffsets[i]=temp;\n\t\t\tdev+=temp*temp;\n\t\t}\n\t\tfloat thegma=sqrt(dev/float(N-2));\n\n\t\tint start=0,end=N-1;\n\t\tint index=0;\n\t\tfloat devOutliers=0.0;\n\t\tfor (i=0;i<N;++i)\n\t\t{\n\t\t\tif (offsets[i]<1.0)\n\t\t\t\tindex++;\n\t\t\tif (index==2)\n\t\t\t{\n\t\t\t\tstart=i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse\n\t\t\t\tdevOutliers+=offsets[i]*offsets[i];\n\t\t}\n\n\t\tindex=0;\n\t\tfor (i=N-1;i>=0;--i)\n\t\t{\n\t\t\tif (offsets[i]<1.0)\n\t\t\t\tindex++;\n\t\t\tif (index==2)\n\t\t\t{\n\t\t\t\tend=i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse\n\t\t\t\tdevOutliers+=offsets[i]*offsets[i];\n\t\t}\n\t\tif (end<=start) return false;\n\n\t\tdev=sqrt((dev-devOutliers)/float(N-2));\n\n\t\tcluster.pixels=&(cluster.pixels[start]);\n\t\tcluster.size=end-start+1;\n\t\tparameters[0]=1; //label\n\t}\n\tparameters[1]=k;\n\tparameters[2]=b;\n\tparameters[3]=dev;\n\n\treturn true;\n}\n\n\nbool MetaLine::leastSquareFitting(std::vector<Point2f> &points, float *parameters,float sigma)\n{\n\tint i,j;\n\tint N=points.size();\n\n\tfloat kCoarse=0.0;\n\tif (points[0].x==points[N-1].x)\n\t\tkCoarse=INF;\n\telse\n\t\tkCoarse=float(points[0].y-points[N-1].y)/(points[0].x-points[N-1].x);\n\n\tfloat k=0.0,b=0.0,dev=0.0,temp=0.0,devMax=0.0;\n\tif (abs(kCoarse)<1)\n\t{\n\t\tfloat sumX=0.0;\n\t\tfloat sumY=0.0;\n\t\tfloat sumX2=0.0;\n\t\tfloat sumXY=0.0;\n\n\t\tfor (i=0;i<N;++i)\n\t\t{\n\t\t\tsumX+=points[i].x;\n\t\t\tsumY+=points[i].y;\n\t\t\tsumX2+=points[i].x*points[i].x;\n\t\t\tsumXY+=points[i].x*points[i].y;\n\t\t}\n\n\t\tb=(sumX2*sumY-sumX*sumXY)/(N*sumX2-sumX*sumX);\n\t\tk=(N*sumXY-sumX*sumY)/(N*sumX2-sumX*sumX);\n\n\t\tfor (i=0;i<N;++i)\n\t\t{\n\t\t\ttemp=abs(points[i].y-k*points[i].x-b);\n\t\t\tif (temp>devMax) devMax=temp;\n\t\t\tdev+=temp*temp;\n\t\t}\n\t\tdev=sqrt(dev/float(N-2));\n\t\tparameters[0]=0; //label\n\t}\n\telse\n\t{\n\t\tfloat sumX=0.0;\n\t\tfloat sumY=0.0;\n\t\tfloat sumY2=0.0;\n\t\tfloat sumXY=0.0;\n\n\t\tfor (i=0;i<N;++i)\n\t\t{\n\t\t\tsumX+=points[i].x;\n\t\t\tsumY+=points[i].y;\n\t\t\tsumY2+=points[i].y*points[i].y;\n\t\t\tsumXY+=points[i].x*points[i].y;\n\t\t}\n\n\t\tb=(sumY2*sumX-sumY*sumXY)/(N*sumY2-sumY*sumY);\n\t\tk=(N*sumXY-sumX*sumY)/(N*sumY2-sumY*sumY);\n\n\t\tfor (i=0;i<N;++i)\n\t\t{\n\t\t\ttemp=abs(points[i].x-k*points[i].y-b);\n\t\t\tif (temp>devMax) devMax=temp;\n\t\t\tdev+=temp*temp;\n\t\t}\n\t\tdev=sqrt(dev/float(N-2));\n\t\tparameters[0]=1; //label\n\t}\n\tparameters[1]=k;\n\tparameters[2]=b;\n\tparameters[3]=dev;\n\n\tif (dev<sigma&&devMax<3*sigma)\n\t\treturn true;\n\telse\n\t\treturn false;\n}\n\nint MetaLine::crossSearch(Point2i pts,float &angle,int ID)\n{\n\tint i,j;\n\n\tfloat *ptrMI=(float*) maskImage.data;\n\n\t//search along edges\n\tstatic const int X_OFFSET[8] = {  0,  1,  0, -1,  1, -1, -1,  1 };\n\tstatic const int Y_OFFSET[8] = {  1,  0, -1,  0,  1,  1, -1, -1 };\n\n\tstd::vector<Point2i> edgeChain;\n\tint xSeed=pts.x;\n\tint ySeed=pts.y;\n\tint x,y;\n\t\n\tint count=0;\n\tbool isEnd=false;\n\twhile(count!=10&&!isEnd)\n\t{\n\t\tfor (size_t i=0; i!=8; ++i)\n\t\t{\n\t\t\tx = xSeed + X_OFFSET[i];\n\t\t\tif ((0 <= x) && (x < cols))\n\t\t\t{\n\t\t\t\ty = ySeed + Y_OFFSET[i];\n\t\t\t\tif ((0 <= y) && (y < rows))\n\t\t\t\t{\n\t\t\t\t\tcout<<ptrMI[y*cols+x]<<endl;\n\t\t\t\t\tif (ptrMI[y*cols+x]<0&&ptrMI[y*cols+x]!=ID) return -1; //-1 for stop merging\n\n\t\t\t\t\tif (ptrMI[y*cols+x]==1)\n\t\t\t\t\t{\n\t\t\t\t\t\txSeed = x;\n\t\t\t\t\t\tySeed = y;\n\t\t\t\t\t\tedgeChain.push_back(Point2i(xSeed,ySeed));\n\t\t\t\t\t\tptrMI[y*cols+x]=0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tisEnd=true;\n\t\t\t}\n\t\t\telse\n\t\t\t\tisEnd=true;\n\t\t}\n\t\tcount++;\n\t}\n\n\tif (edgeChain.size()>=3)\n\t{\n\t\tfloat deltaX=edgeChain[0].x-edgeChain[edgeChain.size()-1].x;\n\t\tfloat deltaY=edgeChain[0].y-edgeChain[edgeChain.size()-1].y;\n\t\tangle=atan(deltaY/deltaX+0.00000101);\n\n\t\treturn 1;  //1 for finding a edge chain\n\t}\n\telse\n\t\treturn 0;  //0 for no edge chain\n\t\n}\n\nbool MetaLine::crossingCheck(Point2f pts,Point2f pte,int ID)\n{\n\tint i,j;\n\n\tfloat *ptrMI=(float*) maskImage.data;\n\n\tfloat deltaX=pts.x-pte.x;\n\tfloat deltaY=pts.y-pte.y;\n\tif (abs(deltaX)>abs(deltaY))\n\t{\n\t\tfloat k=deltaY/deltaX;\n\t\tfloat b=pts.y-k*pts.x;\n\t\tfloat angle=atan(k);\n\n\t\tint xMin=int(min(pts.x,pte.x)+0.5);\n\t\tint xMax=int(max(pts.x,pte.x)+0.5);\n\t\tif (xMin<0) xMin=0;\n\t\tif (xMin>=cols) xMin=cols-2;\n\t\tif (xMax<0) xMax=0;\n\t\tif (xMax>=cols) xMax=cols-1;\n\n\t\tfloat y=k*xMin+b;\n\t\tfor (i=xMin+1;i<xMax;++i)\n\t\t{\n\t\t\tint xInt=i;\n\t\t\ty+=k;\n\t\t\tint yInt=int(y+0.5);\n\t\t\tif (0<yInt&&yInt<rows_1)\n\t\t\t{\n\t\t\t\tint loc=yInt*cols+xInt;\n\t\t\t\tint e0=(int)ptrMI[loc-cols];\n\t\t\t\tint e1=(int)ptrMI[loc];\n\t\t\t\tint e2=(int)ptrMI[loc+cols];\n\n\t\t\t\tif ((e0<0&&e0!=ID)||(e1<0&&e1!=ID)||(e2<0&&e2!=ID)) return false; //find another line\n\t\t\t\tif (e0==1||e1==1||e2==1)\n\t\t\t\t{\n\t\t\t\t\tfloat angleEdge=0;\n\t\t\t\t\tint Rnt=crossSearch(Point2i(xInt,yInt), angleEdge,ID); // 1for finding a edge chain, 0 for non, -1 for another line segment\n\t\t\t\t\tif (Rnt)\n\t\t\t\t\t{\n\t\t\t\t\t\tif ((abs(angle-angleEdge)>CV_PI/6.0)||(CV_PI-abs(angle-angleEdge)>CV_PI/6.0))\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telse if (Rnt<0)\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse \n\t\t\t\tbreak;\n\t\t}\n\t}\n\telse\n\t{\n\t\tfloat k=deltaX/deltaY;\n\t\tfloat b=pts.x-k*pts.y;\n\t\tfloat angle=CV_PI/2.0-atan(k);\n\n\t\tint yMin=int(min(pts.y,pte.y)+0.5);\n\t\tint yMax=int(max(pts.y,pte.y)+0.5);\n\t\tif (yMin<0) yMin=0;\n\t\tif (yMin>=rows) yMin=rows-2;\n\t\tif (yMax<0) yMax=0;\n\t\tif (yMax>=rows) yMax=rows-1;\n\n\t\tfloat x=k*yMin+b;\n\t\tfor (i=yMin+1;i<yMax;++i)\n\t\t{\n\t\t\tint yInt=i;\n\t\t\tx+=k;\n\t\t\tint xInt=int(x+0.5);\n\n\t\t\tif (0<xInt&&xInt<cols_1)\n\t\t\t{\n\t\t\t\tint loc=yInt*cols+xInt;\n\t\t\t\tint e0=(int)ptrMI[loc-1];\n\t\t\t\tint e1=(int)ptrMI[loc];\n\t\t\t\tint e2=(int)ptrMI[loc+1];\n\n\t\t\t\tif ((e0<0&&e0!=ID)||(e1<0&&e1!=ID)||(e2<0&&e2!=ID)) return false; //find another line \n\t\t\t\tif (e0==1||e1==1||e2==1)\n\t\t\t\t{\n\t\t\t\t\tfloat angleEdge=0;\n\t\t\t\t\tint Rnt=crossSearch(Point2i(xInt,yInt), angleEdge,ID); // 1for finding a edge chain, 0 for non, -1 for another line segment\n\t\t\t\t\tif (Rnt)\n\t\t\t\t\t{\n\t\t\t\t\t\tif ((abs(angle-angleEdge)>CV_PI/6.0)||(CV_PI-abs(angle-angleEdge)>CV_PI/6.0))\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telse if (Rnt<0)\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nvoid MetaLine::extendHirozontal(line_t &metaLineCur,lines_list_t  &metaLines,int *removal)\n{\n\tint i,j;\n\n\tfloat *ptrMI=(float*) maskImage.data;\n\tfloat *ptrGM=(float*) gradientMap.data;\n\n\tint ID=metaLineCur.ID;\n\tfloat k=metaLineCur.k;\n\tfloat b=metaLineCur.b;\n\tfloat xs=metaLineCur.points[0].x;\n\tfloat xe=metaLineCur.points[metaLineCur.points.size()-1].x;\n\tfloat ye=k*xe+b;\n\tfloat xCur=xe;\n\tfloat yCur=ye;\n\tint xInt=int(xCur+0.5);\n\tint yInt=int(yCur+0.5);\n\tint index=(xe-xs)/abs(xe-xs);\n\n\tcluster_t pointsFormer;\n\tpointsFormer.pixels=&metaLineCur.points[0];\n\tpointsFormer.size=metaLineCur.points.size();\n\n\tint loc=0;\n\tint gap=0;\n\tint edge=0;\n\tint edgeTotal=0;\n\n\tfloat m0,m1,m2;\n\tfloat g0,g1,g2;\n\tbool extend=false;\n\twhile (1)\n\t{\n\t\txInt+=index;\n\t\tyCur+=index*k;\n\t\tyInt=int(yCur+0.5);\n\t\tbool chooseUp=false;\n\t\tif (yInt+0.5>yCur)chooseUp=true;\n\n\t\tif (0<xInt&&xInt<cols_1&&0<yInt&&yInt<rows_1)\n\t\t{\n\t\t\tloc=yInt*cols+xInt;\n\t\t\tm0=ptrMI[loc];\n\t\t\tm1=ptrMI[loc-cols];\n\t\t\tm2=ptrMI[loc+cols];\n\n\t\t\tsize_list_t lineHyps;\n\t\t\tif (m0<0&&m0!=-ID) { size_t &n=lineHyps.push_back(); n=-m0-1; }\n\t\t\tif (m1<0&&m1!=-ID) { size_t &n=lineHyps.push_back(); n=-m1-1; }\n\t\t\tif (m2<0&&m2!=-ID) { size_t &n=lineHyps.push_back(); n=-m2-1; }\n\t\t\tif (lineHyps.size())\n\t\t\t{\n\t\t\t\tint Rnt=lineMerging(ID,metaLineCur,lineHyps,metaLines,thAngle);\n\t\t\t\tif (Rnt!=-1)\n\t\t\t\t{\n\t\t\t\t\tfloat newPara[4];\n\t\t\t\t\tif (leastSquareFitting(metaLineCur.points,newPara,sigma))\n\t\t\t\t\t{\n\t\t\t\t\t\tif (!newPara[0])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tk=newPara[1];\n\t\t\t\t\t\t\tb=newPara[2];\n\t\t\t\t\t\t\txInt=metaLineCur.points[metaLineCur.points.size()-1].x;\n\t\t\t\t\t\t\tyCur=k*xInt+b;\n\t\t\t\t\t\t\tremoval[Rnt]=1;\n\t\t\t\t\t\t\textend=true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmetaLineCur.dir=newPara[0];  //0 for k<1, 1 for k >=1\n\t\t\t\t\t\t\tmetaLineCur.k=newPara[1];\n\t\t\t\t\t\t\tmetaLineCur.b=newPara[2];\n\t\t\t\t\t\t\tmetaLineCur.dev=newPara[3];\n\n\t\t\t\t\t\t\tmetaLineCur.ys=metaLineCur.points[0].y;\n\t\t\t\t\t\t\tmetaLineCur.xs=metaLineCur.k*metaLineCur.ys+metaLineCur.b;\n\t\t\t\t\t\t\tmetaLineCur.ye=metaLineCur.points[metaLineCur.points.size()-1].y;\n\t\t\t\t\t\t\tmetaLineCur.xe=metaLineCur.k*metaLineCur.ye+metaLineCur.b;\n\n\t\t\t\t\t\t\textendVertical(metaLineCur,metaLines,removal);\n\n\t\t\t\t\t\t\textend=true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//\n\t\t\t\t\t\tpointsFormer.size=metaLineCur.points.size();\n\t\t\t\t\t\tfor (j=0;j<metaLineCur.points.size();++j)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tint loc=metaLineCur.points[j].y*cols+metaLineCur.points[j].x;\n\t\t\t\t\t\t\t*(ptrMI+loc)=-float(ID);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tmetaLineCur.points.resize(pointsFormer.size);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif ((m0==1||m1==1||m2==1)&&(m0+m1+m2)==1)\n\t\t\t\t{\n\t\t\t\t\tif (m0==1&&m0>=m1&&m0>=m2) \n\t\t\t\t\t{\n\t\t\t\t\t\tpixel_t &p=metaLineCur.points.push_back();\n\t\t\t\t\t\tp.x=xInt;  p.y=yInt;\n\t\t\t\t\t\tptrMI[loc]=-ID;\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\telse if (m1==1&&m1>=m0&&m1>=m2) \n\t\t\t\t\t{\n\t\t\t\t\t\tpixel_t &p=metaLineCur.points.push_back();\n\t\t\t\t\t\tp.x=xInt;  p.y=yInt-1;\n\t\t\t\t\t\tptrMI[loc-cols]=-ID;\n\t\t\t\t\t}\n\t\t\t\t\telse if (m2==1&&m2>=m0&&m2>=m1) \n\t\t\t\t\t{\n\t\t\t\t\t\tif (chooseUp) {gap++;continue;};\n\t\t\t\t\t\tpixel_t &p=metaLineCur.points.push_back();\n\t\t\t\t\t\tp.x=xInt;  p.y=yInt+1;\n\t\t\t\t\t\tptrMI[loc+cols]=-ID;\n\t\t\t\t\t}\n\t\t\t\t\tedge++;\n\t\t\t\t\tedgeTotal++;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tgap++;\n\n\t\t\t\tif ((double)gap/edge>=0.25||edge==0) break;\n\t\t\t\tif (gap==2)\n\t\t\t\t{\n\t\t\t\t\tedge=0;\n\t\t\t\t\tgap=0;\n\t\t\t\t}\n\n\t\t\t\tif (edgeTotal>=thMeaningfulLength)\n\t\t\t\t{\n\t\t\t\t\tfloat metaLineParas[4];\n\t\t\t\t\tleastSquareFitting(metaLineCur.points,metaLineParas,sigma);\n\t\t\t\t\tk=metaLineParas[1];\n\t\t\t\t\tb=metaLineParas[2];\n\t\t\t\t\tyCur=xInt*k+b;\n\t\t\t\t\tedgeTotal=0;\n\t\t\t\t\tgap=0;\n\t\t\t\t\textend=true;\n\n\t\t\t\t\tpointsFormer.size=metaLineCur.points.size();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tbreak;\n\t}\n\n\tif (extend)\n\t{\n\t\tfloat metaLineParas[4];\n\t\tleastSquareFitting(metaLineCur.points,metaLineParas,sigma);\n\n\t\tmetaLineCur.dir=metaLineParas[0];  //0 for k<1, 1 for k >=1\n\t\tmetaLineCur.k=metaLineParas[1];\n\t\tmetaLineCur.b=metaLineParas[2];\n\t\tmetaLineCur.dev=metaLineParas[3];\n\n\t\tif (metaLineCur.dir==0)\n\t\t{\n\t\t\tmetaLineCur.xs=metaLineCur.points[0].x;\n\t\t\tmetaLineCur.ys=metaLineCur.k*metaLineCur.xs+metaLineCur.b;\n\t\t\tmetaLineCur.xe=metaLineCur.points[metaLineCur.points.size()-1].x;\n\t\t\tmetaLineCur.ye=metaLineCur.k*metaLineCur.xe+metaLineCur.b;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tmetaLineCur.ys=metaLineCur.points[0].y;\n\t\t\tmetaLineCur.xs=metaLineCur.k*metaLineCur.ys+metaLineCur.b;\n\t\t\tmetaLineCur.ye=metaLineCur.points[metaLineCur.points.size()-1].y;\n\t\t\tmetaLineCur.xe=metaLineCur.k*metaLineCur.ye+metaLineCur.b;\n\t\t}\n\n\t}\n\telse\n\t\tmetaLineCur.points.resize(pointsFormer.size);\n}\n\nvoid MetaLine::extendVertical(line_t &metaLineCur,lines_list_t  &metaLines,int *removal)\n{\n\tint i,j;\n\n\tfloat *ptrMI=(float*) maskImage.data;\n\tfloat *ptrGM=(float*) gradientMap.data;\n\n\tint ID=metaLineCur.ID;\n\tfloat k=metaLineCur.k;\n\tfloat b=metaLineCur.b;\n\tfloat ys=metaLineCur.points[0].y;\n\tfloat ye=metaLineCur.points[metaLineCur.points.size()-1].y;\n\tfloat xe=k*ye+b;\n\tfloat xCur=xe;\n\tfloat yCur=ye;\n\tint xInt=int(xCur+0.5);\n\tint yInt=int(yCur+0.5);\n\tint index=(ye-ys)/abs(ye-ys);\n\n\tcluster_t pointsFormer;\n\tpointsFormer.pixels=&metaLineCur.points[0];\n\tpointsFormer.size=metaLineCur.points.size();\n\n\tint loc=0;\n\tint gap=0;\n\tint edge=0;\n\tint edgeTotal=0;\n\t\n\tfloat m0,m1,m2;\n\tfloat g0,g1,g2;\n\tbool extend=false;\n\twhile (1)\n\t{\n\t\tyInt+=index;\n\t\txCur+=index*k;\n\t\txInt=int(xCur+0.5);\n\t\tbool chooseLeft=false;\n\t\tif (xInt+0.5>xCur)chooseLeft=true;\n\n\t\tif (0<xInt&&xInt<cols_1&&0<yInt&&yInt<rows_1)\n\t\t{\n\t\t\tloc=yInt*cols+xInt;\n\t\t\tm0=ptrMI[loc];\n\t\t\tm1=ptrMI[loc-1];\n\t\t\tm2=ptrMI[loc+1];\n\n\t\t\tsize_list_t lineHyps;\n\t\t\tif (m0<0&&m0!=-ID) { size_t &n=lineHyps.push_back(); n=-m0-1; }\n\t\t\tif (m1<0&&m1!=-ID) { size_t &n=lineHyps.push_back(); n=-m1-1; }\n\t\t\tif (m2<0&&m2!=-ID) { size_t &n=lineHyps.push_back(); n=-m2-1; }\n\t\t\tif (lineHyps.size())\n\t\t\t{\n\t\t\t\tint Rnt=lineMerging(ID,metaLineCur,lineHyps,metaLines,thAngle);\n\n\t\t\t\tif (Rnt!=-1)\n\t\t\t\t{\n\t\t\t\t\tfloat newPara[4];\n\t\t\t\t\tif (leastSquareFitting(metaLineCur.points,newPara,sigma))\n\t\t\t\t\t{\n\t\t\t\t\t\tif (newPara[0])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tk=newPara[1];\n\t\t\t\t\t\t\tb=newPara[2];\n\t\t\t\t\t\t\tyInt=metaLineCur.points[metaLineCur.points.size()-1].y;\n\t\t\t\t\t\t\txCur=k*yInt+b;\n\t\t\t\t\t\t\tremoval[Rnt]=1;\n\t\t\t\t\t\t\textend=true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmetaLineCur.dir=newPara[0];  //0 for k<1, 1 for k >=1\n\t\t\t\t\t\t\tmetaLineCur.k=newPara[1];\n\t\t\t\t\t\t\tmetaLineCur.b=newPara[2];\n\t\t\t\t\t\t\tmetaLineCur.dev=newPara[3];\n\n\t\t\t\t\t\t\tmetaLineCur.xs=metaLineCur.points[0].x;\n\t\t\t\t\t\t\tmetaLineCur.ys=metaLineCur.k*metaLineCur.xs+metaLineCur.b;\n\t\t\t\t\t\t\tmetaLineCur.xe=metaLineCur.points[metaLineCur.points.size()-1].x;\n\t\t\t\t\t\t\tmetaLineCur.ye=metaLineCur.k*metaLineCur.xe+metaLineCur.b;\n\t\t\t\t\t\t\textendHirozontal(metaLineCur,metaLines,removal);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//\n\t\t\t\t\t\tpointsFormer.size=metaLineCur.points.size();\n\t\t\t\t\t\tfor (j=0;j<metaLineCur.points.size();++j)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tint loc=metaLineCur.points[j].y*cols+metaLineCur.points[j].x;\n\t\t\t\t\t\t\t*(ptrMI+loc)=-float(ID);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tmetaLineCur.points.resize(pointsFormer.size);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif ((m0==1||m1==1||m2==1)&&(m0+m1+m2)==1)\n\t\t\t\t{\n\t\t\t\t\tif (m0==1&&m0>=m1&&m0>=m2) \n\t\t\t\t\t{\n\t\t\t\t\t\tpixel_t &p=metaLineCur.points.push_back();\n\t\t\t\t\t\tp.x=xInt;  p.y=yInt;\n\t\t\t\t\t\tptrMI[loc]=-ID;\n\t\t\t\t\t}\n\t\t\t\t\telse if (m1==1&&m1>=m0&&m1>=m2) \n\t\t\t\t\t{\n\t\t\t\t\t\tpixel_t &p=metaLineCur.points.push_back();\n\t\t\t\t\t\tp.x=xInt-1;  p.y=yInt;\n\t\t\t\t\t\tptrMI[loc-1]=-ID;\n\t\t\t\t\t}\n\t\t\t\t\telse if (m2==1&&m2>=m0&&m2>=m1) \n\t\t\t\t\t{\n\t\t\t\t\t\tif (chooseLeft) {gap++;continue;};\n\t\t\t\t\t\tpixel_t &p=metaLineCur.points.push_back();\n\t\t\t\t\t\tp.x=xInt+1;  p.y=yInt;\n\t\t\t\t\t\tptrMI[loc+1]=-ID;\n\t\t\t\t\t}\n\t\t\t\t\tedge++;\n\t\t\t\t\tedgeTotal++;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tgap++;\n\n\t\t\t\tif ((double)gap/edge>=0.25||edge==0) break;\n\t\t\t\tif (gap==2)\n\t\t\t\t{\n\t\t\t\t\tedge=0;\n\t\t\t\t\tgap=0;\n\t\t\t\t}\n\n\t\t\t\tif (edgeTotal>=thMeaningfulLength)\n\t\t\t\t{\n\t\t\t\t\tfloat metaLineParas[4];\n\t\t\t\t\tleastSquareFitting(metaLineCur.points,metaLineParas,sigma);\n\t\t\t\t\tk=metaLineParas[1];\n\t\t\t\t\tb=metaLineParas[2];\n\t\t\t\t\txCur=yInt*k+b;\n\t\t\t\t\tedgeTotal=0;\n\t\t\t\t\tgap=0;\n\t\t\t\t\textend=true;\n\n\t\t\t\t\tpointsFormer.size=metaLineCur.points.size();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tbreak;\n\t}\n\n\t//\n\tif (extend)\n\t{\n\t\tfloat metaLineParas[4];\n\t\tleastSquareFitting(metaLineCur.points,metaLineParas,sigma);\n\n\t\tmetaLineCur.dir=metaLineParas[0];  //0 for k<1, 1 for k >=1\n\t\tmetaLineCur.k=metaLineParas[1];\n\t\tmetaLineCur.b=metaLineParas[2];\n\t\tmetaLineCur.dev=metaLineParas[3];\n\n\t\tif (metaLineCur.dir==0)\n\t\t{\n\t\t\tmetaLineCur.xs=metaLineCur.points[0].x;\n\t\t\tmetaLineCur.ys=metaLineCur.k*metaLineCur.xs+metaLineCur.b;\n\t\t\tmetaLineCur.xe=metaLineCur.points[metaLineCur.points.size()-1].x;\n\t\t\tmetaLineCur.ye=metaLineCur.k*metaLineCur.xe+metaLineCur.b;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tmetaLineCur.ys=metaLineCur.points[0].y;\n\t\t\tmetaLineCur.xs=metaLineCur.k*metaLineCur.ys+metaLineCur.b;\n\t\t\tmetaLineCur.ye=metaLineCur.points[metaLineCur.points.size()-1].y;\n\t\t\tmetaLineCur.xe=metaLineCur.k*metaLineCur.ye+metaLineCur.b;\n\t\t}\n\t}\n\telse\n\t\tmetaLineCur.points.resize(pointsFormer.size);\n}\n\nfloat MetaLine::probability(int N,int k,float p)\n{\n\tint i=0;\n\tfloat v=pow(p,N);\n\tfloat prob=v;\n\tfor (i=0;i<N-k;++i)\n\t{\n\t\tv=v*float(N-i)/float(1+i)*(1-p)/p;\n\t\tprob+=v;\n\t}\n\treturn prob;\n}\n\nvoid MetaLine::getInformations(cv::Mat &originalImage,float gausSigma, int gausHalfSize,float p)\n{\n\tint i,j,m,n;\n\tint grayLevels=255;\n\tint apertureSize=3;\n\tfloat anglePer=CV_PI/8.0;\n\tfloat gNoise=1.3333;//1.3333 \n\tthGradientLow=gNoise;\n\n\tcols = originalImage.cols;\n\trows = originalImage.rows;\n\tcols_1=cols-1;\n\trows_1=rows-1;\n\tN4=pow(double(rows)*cols,2.0);\n\n\tint imageDataLength = rows*originalImage.cols;\n\n\t//meaningful Length\n\tthMeaningfulLength=int(2.0*log((float)rows*cols)/log(8.0)+0.5);\n\tthAngle=2*atan(2.0/float(thMeaningfulLength));\n\n\t//get gray image\n\tcv::Mat grayImage;\n\tint aa=originalImage.channels();\n\n\tif ( originalImage.channels() == 1 )\n\t\tgrayImage = originalImage;\n\telse\n\t\tcv::cvtColor(originalImage, grayImage, CV_BGR2GRAY);\n\n\t//gaussian filter\n\tif ( gausSigma > 0.0 && gausHalfSize > 0 )\n\t{\n\t\tint gausSize = gausHalfSize*2 + 1;\n\t\tcv::GaussianBlur(grayImage, filteredImage, cv::Size(gausSize,gausSize), gausSigma);\n\t}\n\n\t//get gradient map and orientation map\n\tgradientMap = Mat::zeros(filteredImage.rows,filteredImage.cols,CV_32FC1);\n\torientationMap = Mat::zeros(filteredImage.rows,filteredImage.cols,CV_32FC1);\n\torientationMapInt=Mat::zeros(filteredImage.rows,filteredImage.cols,CV_8U);\n\tmaskImage = Mat::zeros(filteredImage.rows,filteredImage.cols,CV_32FC1);\n\tcv::Mat orientationIndex = Mat::zeros(filteredImage.rows,filteredImage.cols,CV_8U);\n\n\tcv::Mat dx(filteredImage.rows, filteredImage.cols, CV_16S,Scalar(0));\n\tcv::Mat dy(filteredImage.rows, filteredImage.cols, CV_16S,Scalar(0));\n\n\tcv::Sobel(filteredImage, dx, CV_16S, 1, 0, apertureSize, 1, 0, cv::BORDER_REPLICATE);\n\tcv::Sobel(filteredImage, dy, CV_16S, 0, 1, apertureSize, 1, 0, cv::BORDER_REPLICATE);\n\n\n\t//temp\n\tcv::Mat temp(filteredImage.rows, filteredImage.cols, CV_8U,Scalar(0));\n\tchar *ptr_temp=(char *)temp.data;\n\n\t//calculate gradient and orientation\n\tint totalNum=0;\n\tint t=8;\n\tstd::vector<int> histogram(t*grayLevels,0);\n\tfor (i=0;i<rows;++i)\n\t{\n\t\tfloat *ptrG=gradientMap.ptr<float>(i);\n\t\tfloat *ptrO=orientationMap.ptr<float>(i);\n\t\tuchar *ptrOI=orientationMapInt.ptr<uchar>(i);\n\t\tshort *ptrX=dx.ptr<short>(i);\n\t\tshort *ptrY=dy.ptr<short>(i);\n\t\tfor (j=0;j<cols;++j)\n\t\t{\n\t\t\tfloat gx=ptrX[j];\n\t\t\tfloat gy=ptrY[j];\n\n\t\t\t//ptrG[j]=sqrt(gx*gx+gy*gy);\n\t\t\tptrG[j]=abs(gx)+abs(gy);\n\t\t\tptrO[j] = atan2(gx,-gy);\n\t\t\tptrOI[j] = int((ptrO[j]+CV_PI)/anglePer);\n\t\t\tif (ptrOI[j]==16)ptrOI[j]=0;\n\n\t\t\tif (ptrG[j]>thGradientLow)\n\t\t\t{\n\t\t\t\thistogram[int(ptrG[j]+0.5)]++;\n\t\t\t\ttotalNum++;\n\t\t\t}\n\t\t\telse\n\t\t\t\tptrG[j]=0.0;\n\t\t}\n\t}\n\n\t//gradient statistic\n\tN2=0;\n\tfor (i=0;i<histogram.size();++i)\n\t{\n\t\tif (histogram[i])\n\t\t\tN2+=(float)histogram[i]*(histogram[i]-1);\n\t}\n\tfloat pMax=1.0/exp((log(N2)/thMeaningfulLength));\n\tfloat pMin=1.0/exp((log(N2)/sqrt((float)cols*rows)));\n\n\tgreaterThan=std::vector<float>(t*grayLevels,0);\n\tsmallerThan=std::vector<float>(t*grayLevels,0);\n\tint count=0;\n\tfor (i=t*grayLevels-1;i>=0;--i)\n\t{\n\t\tcount+=histogram[i];\n\t\tfloat probabilityGreater=float(count)/float(totalNum);\n\t\tgreaterThan[i]=probabilityGreater;\n\t}\n\tcount=0;\n\n\t/*\n\tfor (i=0;i<t*grayLevels;++i)\n\t{\n\t\tif (greaterThan[i]<pMin)\n\t\t{\n\t\t\tthGradientLow=i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (thGradientLow<gNoise) thGradientLow=gNoise;\n\n\tfor (i=t*grayLevels-1;i>=0;--i)\n\t{\n\t\tif (greaterThan[i]>pMax)\n\t\t{\n\t\t\tthGradientHigh=i;\n\t\t\tbreak;\n\t\t}\n\t}\n\t*/\n\tfor (i=t*grayLevels-1;i>=0;--i)\n\t{\n\t\tif (greaterThan[i]>pMax)\n\t\t{\n\t\t\tthGradientHigh=i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tfor (i=t*grayLevels-1;i>=0;--i)\n\t{\n\t\tif (greaterThan[i]>pMin)\n\t\t{\n\t\t\tthGradientLow=i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (thGradientLow<gNoise) thGradientLow=gNoise;\n\n\t//convert probabilistic meaningful to visual meaningful\n\tthGradientHigh=sqrt(thGradientHigh*visualMeaningfulGradient);\n\t\n\t//canny\n\tcv::Canny(filteredImage,cannyEdge,thGradientLow,thGradientHigh,apertureSize);\n\n\t//\n\tint num=0;\n\tuchar *ptrCanny=cannyEdge.data;\n\tfloat *ptrM=(float*)maskImage.data;\n\tfloat *ptrG=(float*)gradientMap.data;\n\tfor (i=0;i<rows;++i)\n\t{\n\t\tfor (j=0;j<cols;++j)\n\t\t{\n\t\t\tif (*ptrCanny++)\n\t\t\t{\n\t\t\t\t*ptrM++=1;\n\t\t\t\tgradientPoints.push_back(Point(j,i));\n\t\t\t\tgradientValue.push_back(ptrG[i*cols+j]);\n\t\t\t\tnum++;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t*ptrM++;\n\t\t\t}\n\t\t}\n\t}\n}\n\nbool MetaLine::next(int &xSeed,int &ySeed)\n{\n\tint x, y;\n\tfloat *ptrM=(float *)maskImage.data;\n\tuchar *ptrO=orientationMapInt.data;\n\n\tint direction=ptrO[ySeed*cols+xSeed];\n\tint direction0=direction-1;\n\tif (direction0<0) direction0=15;\n\tint direction1=direction;\n\tint direction2=direction+1;\n\tif (direction2==16) direction2=0;\n\t/*\n\tint index=direction/2;\n\tint *X_OFFSET,*Y_OFFSET;\n\tif (index==0||index==4)\n\t{\n\t\tint XTemp[8] = { 1, -1,  0,  0,  1,  1, -1, -1 };\n\t\tint YTemp[8] = { 0,  0,  1, -1,  1, -1,  1, -1 };\n\t\tX_OFFSET=XTemp;\n\t\tY_OFFSET=YTemp;\n\t}\n\n\tif (index==2||index==6)\n\t{\n\t\tint XTemp[8] = {  0,  0,  1, -1,  1,  1, -1, -1 };\n\t\tint YTemp[8] = {  1, -1,  0,  0, -1,  1, -1,  1 };\n\t\tX_OFFSET=XTemp;\n\t\tY_OFFSET=YTemp;\n\t}\n\n\tif (index==3||index==7)\n\t{\n\t\tint XTemp[8] = {  1,  -1,  1, -1,  0,  0,  1, -1 };\n\t\tint YTemp[8] = {  1,  -1, -1,  1,  1, -1,  0,  0 };\n\t\tX_OFFSET=XTemp;\n\t\tY_OFFSET=YTemp;\n\t}\n\n\tif (index==1||index==5)\n\t{\n\t\tint XTemp[8] = {  1, -1,  1,  -1,  0,  0,  1, -1 };\n\t\tint YTemp[8] = { -1,  1,  1,  -1,  1, -1,  0,  0 };\n\t\tX_OFFSET=XTemp;\n\t\tY_OFFSET=YTemp;\n\t}\n\t*/\n\n\tstatic const int X_OFFSET[8] = {  0,  1,  0, -1,  1, -1, -1,  1 };\n\tstatic const int Y_OFFSET[8] = {  1,  0, -1,  0,  1,  1, -1, -1 };\n\n\tfor (size_t i=0; i!=8; ++i)\n\t{\n\t\tx = xSeed + X_OFFSET[i];\n\t\tif ((0 <= x) && (x < cols))\n\t\t{\n\t\t\ty = ySeed + Y_OFFSET[i];\n\t\t\tif ((0 <= y) && (y < rows))\n\t\t\t{\n\t\t\t\tif (ptrM[y*cols+x])\n\t\t\t\t{\n\t\t\t\t\tint directionTemp=ptrO[y*cols+x];\n\t\t\t\t\tif (directionTemp==direction0||directionTemp==direction1||directionTemp==direction2)\n\t\t\t\t\t{\n\t\t\t\t\t\txSeed = x;\n\t\t\t\t\t\tySeed = y;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\nbool MetaLine::smartRouting(clusters_list_t &segments,float minDeviation,int minSize)\n{\n\tint i,j,m,n;\n\tif (minSize<3) minSize=3;\n\n\tcv::Mat maskImageOri=maskImage.clone();\n\tfloat* ptrM=(float*)maskImage.data;\n\tuchar *ptrO=orientationMapInt.data;\n\n\t//get the sorted gradient points\n\tint numGradientPoints=gradientPoints.size();\n\tQuickSort<float,cv::Point>::SortDescent(&gradientValue[0], 0, numGradientPoints-1, &gradientPoints[0]);\n\n\t//find strings\n\tstrings_list_t strings;\n\tfor (i=0;i<numGradientPoints;++i)\n\t{\n\t\tstring_t &str = strings.push_back();\n\t\tstr.clear();\n\n\t\tint count=0;\n\t\tint x = gradientPoints[i].x;\n\t\tint y = gradientPoints[i].y;\n\t\tdo\n\t\t{\n\t\t\tpixel_t &p = str.push_back();\n\t\t\tp.x=x;\n\t\t\tp.y=y;\n\t\t\tptrM[y*cols+x]=0;\n\t\t}\n\t\twhile (next( x, y));\n\n\t\tpixel_t temp;\n\t\tfor (m=0, n=str.size()-1; m<n; ++m, --n)\n\t\t{\n\t\t\ttemp = str[m];\n\t\t\tstr[m] = str[n];\n\t\t\tstr[n] = temp;\n\t\t}\n\n\t\t// Find and add feature pixels to the begin of the string.\n\t\tx = gradientPoints[i].x;\n\t\ty = gradientPoints[i].y;\n\t\tif (next( x, y))\n\t\t{\n\t\t\tdo\n\t\t\t{\n\t\t\t\tpixel_t &p = str.push_back();\n\t\t\t\tp.x=x;\n\t\t\t\tp.y=y;\n\t\t\t\tptrM[y*cols+x]=0;\n\t\t\t}\n\t\t\twhile (next( x, y));\n\t\t}\n\t\tif (str.size()<thMeaningfulLength)\n\t\t\tstrings.pop_back();\n\t\t\n\t}\n\tmaskImage=maskImageOri;\n\n\t//show\n\tcv::Mat stringsImage(rows,cols,CV_8UC3,cv::Scalar(0,0,0));\n\n\tCvFont font;\n\tdouble hScale=1.0;\n\tdouble vScale=1.0;\n\tcvInitFont(&font,CV_FONT_HERSHEY_PLAIN, hScale,vScale,0,1);\n\n\tstd::vector<cv::Scalar> colors(7);\n\tfor (i=0;i<7;++i)\n\t{\n\t\tint R=int(double(rand())/RAND_MAX*255);\n\t\tint G=int(double(rand())/RAND_MAX*255);\n\t\tint B=int(double(rand())/RAND_MAX*255);\n\n\t\tcolors[i]=Scalar(R,G,B);\n\t}\n\tfor (i=0;i<strings.size();++i)\n\t{\n\t\tint R=colors[(i%7)].val[0];\n\t\tint G=colors[(i%7)].val[1];\n\t\tint B=colors[(i%7)].val[2];\n\t\tfor (j=0;j<strings[i].size();++j)\n\t\t{\n\t\t\tint x=strings[i][j].x;\n\t\t\tint y=strings[i][j].y;\n\t\t\t*(stringsImage.data+3*(y*cols+x)+0)=R;\n\t\t\t*(stringsImage.data+3*(y*cols+x)+1)=G;\n\t\t\t*(stringsImage.data+3*(y*cols+x)+2)=B;\n\t\t}\n\t\tchar text[100];\n\t\tsprintf(text,\"%d\", i);\n\t\tPoint mid=Point(strings[i][strings[i].size()/2].x,strings[i][strings[i].size()/2].y);\n\t\tcv::putText(stringsImage,text,mid,1,1,colors[i%7],1);\n\t}\n\timwrite(\"C:\\\\12345stringsImage.bmp\",stringsImage);\n// \timshow(\"\",stringsImage);\n// \tcv::waitKey(0);\n\n\t//find segments\n\tsegments.clear();\n\tfor (i=0;i<strings.size();++i)\n\t{\n\t\tconst string_t &str = strings[i];\n\t\tsubDivision(segments, str, 0, strings[i].size()-1, minDeviation, minSize);\n\t}\n\n\t//draw\n// \tstd::vector<cv::Scalar> colors(7);\n// \tfor (i=0;i<7;++i)\n// \t{\n// \t\tint R=int(double(rand())/RAND_MAX*255);\n// \t\tint G=int(double(rand())/RAND_MAX*255);\n// \t\tint B=int(double(rand())/RAND_MAX*255);\n// \n// \t\tcolors[i]=Scalar(R,G,B);\n// \t}\n\tint times=1;\n\tcv::Mat clustersImage(times*rows,times*cols,CV_8UC3,cv::Scalar(0,0,0));\n\tfor (i=0;i<segments.size();++i)\n\t{\n\t\tint R=colors[(i%7)].val[0];\n\t\tint G=colors[(i%7)].val[1];\n\t\tint B=colors[(i%7)].val[2];\n\t\tfor (j=0;j<segments[i].size;++j)\n\t\t{\n\t\t\tint x=times*segments[i].pixels[j].x;\n\t\t\tint y=times*segments[i].pixels[j].y;\n\t\t\t*(clustersImage.data+3*(y*times*cols+x)+0)=R;\n\t\t\t*(clustersImage.data+3*(y*times*cols+x)+1)=G;\n\t\t\t*(clustersImage.data+3*(y*times*cols+x)+2)=B;\n\t\t}\n\n\t\tchar text[100];\n\t\tsprintf(text,\"%d\", i);\n\t\tPoint mid=times*cv::Point(int(segments[i].pixels[segments[i].size/2].x),int(segments[i].pixels[segments[i].size/2].y));\n\t\t//cv::putText(clustersImage,text,mid,1,1,colors[i%7],1);\n\t}\n\timwrite(\"C:\\\\12345clustersImage.bmp\",clustersImage);\n// \timshow(\" \",clustersImage);\n// \tcv::waitKey(0);\n\n\treturn 1;\n}\n\nvoid MetaLine::getMetaLine(clusters_list_t &segments,lines_list_t &metaLines,float sigma)\n{\n\tint i,j;\n\tfloat* ptrMaskImage=(float*)maskImage.data;\n\n\t//get meta lines\n\tint numSegments=segments.size();\n\tfor (i=0;i<numSegments;i++)\n\t{\n\t\tfloat parameters[4];\n\t\tleastSquareFitting(segments[i],parameters,sigma);\n\n\t\tline_t &metaLineTemp=metaLines.push_back();\n\n\t\tfloat numLines=-float(metaLines.size());\n\t\tfor (j=0;j<segments[i].size;++j)\n\t\t{\n\t\t\tpixel_t &p=metaLineTemp.points.push_back();\n\t\t\tp.x=segments[i].pixels[j].x;\n\t\t\tp.y=segments[i].pixels[j].y;\n\n\t\t\tint loc = segments[i].pixels[j].y*cols +segments[i].pixels[j].x;\n\t\t\tptrMaskImage[loc]=numLines;\n\t\t}\n\n\t\tmetaLineTemp.ID=-numLines;\n\t\tmetaLineTemp.dir=parameters[0];  //0 for k<1, 1 for k >=1\n\t\tmetaLineTemp.k=parameters[1];\n\t\tmetaLineTemp.b=parameters[2];\n\t\tif (!parameters[0])\n\t\t{\n\t\t\tmetaLineTemp.xs=metaLineTemp.points[0].x;\n\t\t\tmetaLineTemp.ys=metaLineTemp.k*metaLineTemp.xs+metaLineTemp.b;\n\t\t\tmetaLineTemp.xe=metaLineTemp.points[metaLineTemp.points.size()-1].x;\n\t\t\tmetaLineTemp.ye=metaLineTemp.k*metaLineTemp.xe+metaLineTemp.b;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tmetaLineTemp.ys=metaLineTemp.points[0].y;\n\t\t\tmetaLineTemp.xs=metaLineTemp.k*metaLineTemp.ys+metaLineTemp.b;\n\t\t\tmetaLineTemp.ye=metaLineTemp.points[metaLineTemp.points.size()-1].y;\n\t\t\tmetaLineTemp.xe=metaLineTemp.k*metaLineTemp.ye+metaLineTemp.b;\n\t\t}\n\t}\n}\n\nvoid MetaLine::MetaLineDetection(cv::Mat originalImage,float gausSigma, int gausHalfSize,std::vector<std::vector<float> > &lines)\n{\n\tint i,j;\n\t\n\tgetInformations(originalImage, gausSigma,  gausHalfSize,p);\n\n\t//smart routing\n\tfloat minDeviation=2.0;\n\tint minSize=thMeaningfulLength/2;\n\tclusters_list_t segments;\n\tsmartRouting(segments,minDeviation,minSize);\n\n\t//get initial meta lines\n\tlines_list_t metaLines;\n\tgetMetaLine(segments,metaLines,sigma);\n\n\t//meta line extending\n\tint *removal=(int *)malloc(metaLines.size()*sizeof(int));\n\tmemset(removal,0,metaLines.size()*sizeof(int));\n    metaLineExtending(metaLines,removal);\n\n\t//meta line merging\n\t//metaLineMerging(metaLines,removal);\n\n\t//line validity check\n\tlineValidityCheck(metaLines,removal);\n\n\t//get lines\n\tstd::vector<int> ID;\n\tfor (i=0;i<metaLines.size();++i)\n\t{\n\t\tif (!removal[i])\n\t\t{\n\t\t\tstd::vector<float> lineTemp(5);\n\t\t\tlineTemp[0]=metaLines[i].xs;\n\t\t\tlineTemp[1]=metaLines[i].ys;\n\t\t\tlineTemp[2]=metaLines[i].xe;\n\t\t\tlineTemp[3]=metaLines[i].ye;\n\t\t\tlineTemp[4]=metaLines[i].ID;\n\t\t\tlines.push_back(lineTemp);\n\t\t}\n\t}\n    free(removal);\n}\n\nint MetaLine::lineMerging(int IDCur,line_t &metaLineCur,size_list_t &lineHyps,lines_list_t &metaLines,float thAngle)\n{\n\tint i,j;\n\tint numCur=metaLineCur.points.size();\n\n\tfloat angleCur=0.0;\n\tif (metaLineCur.points[0].x==metaLineCur.points[numCur-1].x)\n\t{\n\t\tangleCur=CV_PI/2.0;\n\t}\n\telse\n\t\tangleCur=atan(float(metaLineCur.points[0].y-metaLineCur.points[numCur-1].y)/float(metaLineCur.points[0].x-metaLineCur.points[numCur-1].x));\n\n\t//meta line merge judge\n\tstd::vector<int> nums;\n\tstd::vector<float> angles;\n\tfor (i=0;i<lineHyps.size();++i)\n\t{\n\t\tint numTemp=metaLines[lineHyps[i]].points.size();\n\t\tfloat angleTemp=0.0;\n\t\tif (metaLines[lineHyps[i]].points[0].x==metaLines[lineHyps[i]].points[numTemp-1].x)\n\t\t{\n\t\t\tangleTemp=CV_PI/2.0;\n\t\t}\n\t\telse\n\t\t\tangleTemp=atan(float(metaLines[lineHyps[i]].points[0].y-metaLines[lineHyps[i]].points[numTemp-1].y)/float(metaLines[lineHyps[i]].points[0].x-metaLines[lineHyps[i]].points[numTemp-1].x));\n\t\tangles.push_back(angleTemp);\n\t}\n\n\tfloat angleMin=100;\n\tint metaIDHyp=0;\n\tfor (i=0;i<lineHyps.size();++i)\n\t{\n\t\tfloat angleOffset=min((double)abs(angles[i]-angleCur),CV_PI-abs(angles[i]-angleCur));\n\t\tif (angleOffset<angleMin)\n\t\t{\n\t\t\tangleMin=angleOffset;\n\t\t\tmetaIDHyp=lineHyps[i];\n\t\t}\n\t}\n\tif (angleMin>thAngle)\n\t\treturn -1;\n\telse\n\t{\n\t\t//merged the line\n\t\tfloat thDis=4;\n\t\tint numHyp=metaLines[metaIDHyp].points.size();\n\t\tfloat k=abs(tan(angleCur));\n\t\tif (k>1)\n\t\t{\n\t\t\tfloat dis_s=abs(metaLines[metaIDHyp].points[0].y-metaLineCur.points[numCur-1].y);\n\t\t\tfloat dis_e=abs(metaLines[metaIDHyp].points[numHyp-1].y-metaLineCur.points[numCur-1].y);\n\t\t\tif (dis_s<dis_e&&dis_s<thDis)\n\t\t\t{\n\t\t\t\tif ((metaLines[metaIDHyp].points[numHyp-1].y-metaLineCur.points[numCur-1].y)*(metaLineCur.points[0].y-metaLineCur.points[numCur-1].y)<0)\n\t\t\t\t{\n\t\t\t\t\t//merge\n\t\t\t\t\tfor (i=0;i<numHyp;++i)\n\t\t\t\t\t{\n\t\t\t\t\t\tpixel_t &p=metaLineCur.points.push_back();\n\t\t\t\t\t\tp.x=metaLines[metaIDHyp].points[i].x;\n\t\t\t\t\t\tp.y=metaLines[metaIDHyp].points[i].y;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn metaIDHyp;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\tif (dis_e<dis_s&&dis_e<thDis)\n\t\t\t{\n\t\t\t\tif ((metaLines[metaIDHyp].points[0].y-metaLineCur.points[numCur-1].y)*(metaLineCur.points[0].y-metaLineCur.points[numCur-1].y)<0)\n\t\t\t\t{\n\t\t\t\t\t//merge\n\t\t\t\t\tfor (i=0;i<numHyp;++i)\n\t\t\t\t\t{\n\t\t\t\t\t\tpixel_t &p=metaLineCur.points.push_back();\n\t\t\t\t\t\tp.x=metaLines[metaIDHyp].points[numHyp-1-i].x;\n\t\t\t\t\t\tp.y=metaLines[metaIDHyp].points[numHyp-1-i].y;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn metaIDHyp;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\treturn -1;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfloat dis_s=abs(metaLines[metaIDHyp].points[0].x-metaLineCur.points[numCur-1].x);\n\t\t\tfloat dis_e=abs(metaLines[metaIDHyp].points[numHyp-1].x-metaLineCur.points[numCur-1].x);\n\t\t\tif (dis_s<dis_e&&dis_s<thDis)\n\t\t\t{\n\t\t\t\tif ((metaLines[metaIDHyp].points[numHyp-1].x-metaLineCur.points[numCur-1].x)*(metaLineCur.points[0].x-metaLineCur.points[numCur-1].x)<0)\n\t\t\t\t{\n\t\t\t\t\t//merge\n\t\t\t\t\tfor (i=0;i<numHyp;++i)\n\t\t\t\t\t{\n\t\t\t\t\t\tpixel_t &p=metaLineCur.points.push_back();\n\t\t\t\t\t\tp.x=metaLines[metaIDHyp].points[i].x;\n\t\t\t\t\t\tp.y=metaLines[metaIDHyp].points[i].y;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn metaIDHyp;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\tif (dis_e<dis_s&&dis_e<thDis)\n\t\t\t{\n\t\t\t\tif ((metaLines[metaIDHyp].points[0].x-metaLineCur.points[numCur-1].x)*(metaLineCur.points[0].x-metaLineCur.points[numCur-1].x)<0)\n\t\t\t\t{\n\t\t\t\t\t//merge\n\t\t\t\t\tfor (i=0;i<numHyp;++i)\n\t\t\t\t\t{\n\t\t\t\t\t\tpixel_t &p=metaLineCur.points.push_back();\n\t\t\t\t\t\tp.x=metaLines[metaIDHyp].points[numHyp-1-i].x;\n\t\t\t\t\t\tp.y=metaLines[metaIDHyp].points[numHyp-1-i].y;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn metaIDHyp;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\treturn -1;\n\t\t}\n\t}\n}\n\nint MetaLine::lineMerging2(int IDCur,line_t &metaLineCur,size_list_t &lineHyps,lines_list_t &metaLines,size_list_t &IDMerged)\n{\n\tint i,j;\n\tfloat thDev=2.0;\n\tfloat *ptrMI=(float*) maskImage.data;\n\n\tfloat xs=metaLineCur.xs;\n\tfloat ys=metaLineCur.ys;\n\tfloat xe=metaLineCur.xe;\n\tfloat ye=metaLineCur.ye;\n\tfloat length=metaLineCur.points.size();\n\n\tfloat xsCur,ysCur,xeCur,yeCur;\n\tstd::vector<int> removal(lineHyps.size(),0);\n\tfor (i=0;i<lineHyps.size();++i)\n\t{\n\t\txsCur=metaLines[lineHyps[i]].xs;\n\t\tysCur=metaLines[lineHyps[i]].ys;\n\t\txeCur=metaLines[lineHyps[i]].xe;\n\t\tyeCur=metaLines[lineHyps[i]].ye;\n\n\t\tfloat deviation1 = float( abs( ((xsCur - xs) * (ys - ye)) + ((ysCur - ys) * (xe - xs)) ) );\n\t\tdeviation1/=length;\n\t\tfloat deviation2 = float( abs( ((xeCur - xs) * (ys - ye)) + ((yeCur - ys) * (xe - xs)) ) );\n\t\tdeviation2/=length;\n\t\tif (deviation1+deviation2>2*thDev) removal[i]=1;\n\t}\n\n\tstd::vector<int> IDHypsNew;\n\tstd::vector<float> dis;\n\tfor (i=0;i<lineHyps.size();++i)\n\t{\n\t\tif (!removal[i])\n\t\t{\n\t\t\txsCur=metaLines[lineHyps[i]].xs;\n\t\t\tysCur=metaLines[lineHyps[i]].ys;\n\t\t\txeCur=metaLines[lineHyps[i]].xe;\n\t\t\tyeCur=metaLines[lineHyps[i]].ye;\n\n\t\t\tfloat dis1=sqrt((xs-xsCur)*(xs-xsCur)+(ys-ysCur)*(ys-ysCur));\n\t\t\tfloat dis2=sqrt((xs-xeCur)*(xs-xeCur)+(ys-yeCur)*(ys-yeCur));\n\t\t\tfloat dis3=sqrt((xe-xsCur)*(xe-xsCur)+(ye-ysCur)*(ye-ysCur));\n\t\t\tfloat dis4=sqrt((xe-xeCur)*(xe-xeCur)+(ye-yeCur)*(ye-yeCur));\n\n\t\t\tfloat disMin=min(min(dis1,dis2),min(dis3,dis4));\n\n\t\t\tIDHypsNew.push_back(lineHyps[i]);\n\t\t\tdis.push_back(disMin);\n\t\t}\n\t}\n\n\t//merging judge\n\tif (IDHypsNew.size())\n\t{\n\t\t//sort according to dis\n\t\tQuickSort<float,int>::SortAscent(&dis[0], 0, dis.size()-1, &IDHypsNew[0]);\n\n\t\tfor (i=0;i<IDHypsNew.size();++i)\n\t\t{\n\t\t\t//dis\n\t\t\txs=metaLineCur.xs;\n\t\t\tys=metaLineCur.ys;\n\t\t\txe=metaLineCur.xe;\n\t\t\tye=metaLineCur.ye;\n\t\t\tlength=metaLineCur.points.size();\n\n\t\t\txsCur=metaLines[IDHypsNew[i]].xs;\n\t\t\tysCur=metaLines[IDHypsNew[i]].ys;\n\t\t\txeCur=metaLines[IDHypsNew[i]].xe;\n\t\t\tyeCur=metaLines[IDHypsNew[i]].ye;\n\t\t\tfloat lengthCur=metaLines[IDHypsNew[i]].points.size();\n\n\t\t\tfloat dis1=sqrt((xs-xsCur)*(xs-xsCur)+(ys-ysCur)*(ys-ysCur));\n\t\t\tfloat dis2=sqrt((xs-xeCur)*(xs-xeCur)+(ys-yeCur)*(ys-yeCur));\n\t\t\tfloat dis3=sqrt((xe-xsCur)*(xe-xsCur)+(ye-ysCur)*(ye-ysCur));\n\t\t\tfloat dis4=sqrt((xe-xeCur)*(xe-xeCur)+(ye-yeCur)*(ye-yeCur));\n\t\t\tfloat disMin=min(min(dis1,dis2),min(dis3,dis4));\n\n\t\t\tPoint2f pts,pte;\n\t\t\tfloat lengthMerged=length+lengthCur+disMin;\n\t\t\tfloat pMerge=(length+lengthCur)/(lengthMerged);\n\t\t\tfloat NFA=length*lengthCur*pow(pMerge,int(disMin+0.5));\n\t\t\tif (NFA>1)\n\t\t\t{\n\t\t\t\tstd::vector<Point2f> mergedPoints;\n\t\t\t\tif (disMin==dis1)\n\t\t\t\t{\n\t\t\t\t\tpts=Point2f(xs,ys);\n\t\t\t\t\tpte=Point2f(xsCur,ysCur);\n\t\t\t\t\tfor (j=length-1;j>=0;--j) { mergedPoints.push_back(Point2f(metaLineCur.points[j].x,metaLineCur.points[j].y)) ; }\n\t\t\t\t\tfor (j=0;j<lengthCur;++j) { mergedPoints.push_back(Point2f(metaLines[IDHypsNew[i]].points[j].x,metaLines[IDHypsNew[i]].points[j].y)); }\n\t\t\t\t}\n\t\t\t\telse if (disMin==dis2)\n\t\t\t\t{\n\t\t\t\t\tpts=Point2f(xs,ys);\n\t\t\t\t\tpte=Point2f(xeCur,yeCur);\n\t\t\t\t\tfor (j=length-1;j>=0;--j)     { mergedPoints.push_back(Point2f(metaLineCur.points[j].x,metaLineCur.points[j].y)) ; }\n\t\t\t\t\tfor (j=lengthCur-1;j>=0;--j)  { mergedPoints.push_back(Point2f(metaLines[IDHypsNew[i]].points[j].x,metaLines[IDHypsNew[i]].points[j].y)); }\n\t\t\t\t}\n\t\t\t\telse if (disMin==dis3)\n\t\t\t\t{\n\t\t\t\t\tpts=Point2f(xe,ye);\n\t\t\t\t\tpte=Point2f(xsCur,ysCur);\n\t\t\t\t\tfor (j=0;j<length;++j)     { mergedPoints.push_back(Point2f(metaLineCur.points[j].x,metaLineCur.points[j].y)) ; }\n\t\t\t\t\tfor (j=0;j<lengthCur;++j)  { mergedPoints.push_back(Point2f(metaLines[IDHypsNew[i]].points[j].x,metaLines[IDHypsNew[i]].points[j].y)); }\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tpts=Point2f(xe,ye);\n\t\t\t\t\tpte=Point2f(xeCur,yeCur);\n\t\t\t\t\tfor (j=0;j<length;++j)       { mergedPoints.push_back(Point2f(metaLineCur.points[j].x,metaLineCur.points[j].y)) ; }\n\t\t\t\t\tfor (j=lengthCur-1;j>=0;--j) { mergedPoints.push_back(Point2f(metaLines[IDHypsNew[i]].points[j].x,metaLines[IDHypsNew[i]].points[j].y)); }\n\t\t\t\t}\n\n\t\t\t\t//line fitting\n\t\t\t\tfloat newPara[4];\n\t\t\t\tfloat metaLineParas[4];\n\t\t\t\tif (leastSquareFitting(mergedPoints,metaLineParas,sigma))\n\t\t\t\t{\n\t\t\t\t\tif (crossingCheck( pts, pte, -IDCur-1))\n\t\t\t\t\t{\n\t\t\t\t\t\tmetaLineCur.dir=metaLineParas[0];  //0 for k<1, 1 for k >=1\n\t\t\t\t\t\tmetaLineCur.k=metaLineParas[1];\n\t\t\t\t\t\tmetaLineCur.b=metaLineParas[2];\n\t\t\t\t\t\tmetaLineCur.dev=metaLineParas[3];\n\n\t\t\t\t\t\tif (metaLineCur.dir==0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmetaLineCur.xs=mergedPoints[0].x;\n\t\t\t\t\t\t\tmetaLineCur.ys=metaLineCur.k*metaLineCur.xs+metaLineCur.b;\n\t\t\t\t\t\t\tmetaLineCur.xe=mergedPoints[mergedPoints.size()-1].x;\n\t\t\t\t\t\t\tmetaLineCur.ye=metaLineCur.k*metaLineCur.xe+metaLineCur.b;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmetaLineCur.ys=mergedPoints[0].y;\n\t\t\t\t\t\t\tmetaLineCur.xs=metaLineCur.k*metaLineCur.ys+metaLineCur.b;\n\t\t\t\t\t\t\tmetaLineCur.ye=mergedPoints[mergedPoints.size()-1].y;\n\t\t\t\t\t\t\tmetaLineCur.xe=metaLineCur.k*metaLineCur.ye+metaLineCur.b;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsize_t &temp=IDMerged.push_back();\n\t\t\t\t\t\ttemp=IDHypsNew[i];\n\n\t\t\t\t\t\tmetaLineCur.points.resize(mergedPoints.size());\n\t\t\t\t\t\tfor (j=0;j<mergedPoints.size();++j)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmetaLineCur.points[j].x=mergedPoints[j].x;\n\t\t\t\t\t\t\tmetaLineCur.points[j].y=mergedPoints[j].y;\n\n\t\t\t\t\t\t\tint loc=metaLineCur.points[j].y*cols+metaLineCur.points[j].x;\n\t\t\t\t\t\t\tptrMI[loc]=-IDCur-1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (IDHypsNew.size()) return 1;\n\telse return -1;\n}\n\nvoid MetaLine::metaLineExtending(lines_list_t &metaLines,int *removal)\n{\n\tint i,j,m,n;\n\tint num=metaLines.size();\n\n\t//sort lines\n\tstd::vector<int> length;\n\tstd::vector<int> index;\n\tfor (i=0;i<metaLines.size();++i)\n\t{\n\t\tif (metaLines[i].points.size()>2*thMeaningfulLength)\n\t\t{\n\t\t\tindex.push_back(i);\n\t\t\tlength.push_back(metaLines[i].points.size());\n\t\t}\n\t}\n\tQuickSort<int,int>::SortDescent(&length[0], 0, length.size()-1, &index[0]);\n\n\tfor (i=0;i<length.size();++i)\n\t{\n\t\tint t=index[i];\n\t\tif (!removal[t])\n\t\t{\n\t\t\tint dir=metaLines[t].dir;\n\t\t\tif (!dir)  //horizontal line\n\t\t\t{\n\t\t\t\textendHirozontal(metaLines[t],metaLines,removal);\n\n\t\t\t\t//the other direction extend\n\t\t\t\tfor (m=0,n=metaLines[t].points.size()-1;m<n;++m,--n)\n\t\t\t\t{\n\t\t\t\t\tpixel_t temp=metaLines[t].points[m];\n\t\t\t\t\tmetaLines[t].points[m]=metaLines[t].points[n];\n\t\t\t\t\tmetaLines[t].points[n]=temp;\n\t\t\t\t}\n\t\t\t\tif (!metaLines[t].dir)\n\t\t\t\t\textendHirozontal(metaLines[t],metaLines,removal);\n\t\t\t\telse\n\t\t\t\t\textendVertical(metaLines[t],metaLines,removal);\n\n\t\t\t}\n\t\t\telse  //vertical line\n\t\t\t{\n\t\t\t\textendVertical(metaLines[t],metaLines,removal);\n\n\t\t\t\t//the other direction extend\n\t\t\t\tfor (m=0,n=metaLines[t].points.size()-1;m<n;++m,--n)\n\t\t\t\t{\n\t\t\t\t\tpixel_t temp=metaLines[t].points[m];\n\t\t\t\t\tmetaLines[t].points[m]=metaLines[t].points[n];\n\t\t\t\t\tmetaLines[t].points[n]=temp;\n\t\t\t\t}\n\t\t\t\tif (!metaLines[t].dir)\n\t\t\t\t\textendHirozontal(metaLines[t],metaLines,removal);\n\t\t\t\telse\n\t\t\t\t\textendVertical(metaLines[t],metaLines,removal);\n\t\t\t}\n\n\t\t\tfloat metaLineParas[4];\n\t\t\tgradientWeightedLeastSquareFitting(metaLines[t].points,metaLineParas,0.5);\n\t\t\tmetaLines[t].dir=metaLineParas[0];  //0 for k<1, 1 for k >=1\n\t\t\tmetaLines[t].k=metaLineParas[1];\n\t\t\tmetaLines[t].b=metaLineParas[2];\n\t\t\tmetaLines[t].dev=metaLineParas[3];\n\t\t\tif (metaLines[t].dir)\n\t\t\t{\n\t\t\t\tmetaLines[t].ys=metaLines[t].points[0].y;\n\t\t\t\tmetaLines[t].xs=metaLines[t].k*metaLines[t].ys+metaLines[t].b;\n\t\t\t\tmetaLines[t].ye=metaLines[t].points[metaLines[t].points.size()-1].y;\n\t\t\t\tmetaLines[t].xe=metaLines[t].k*metaLines[t].ye+metaLines[t].b;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tmetaLines[t].xs=metaLines[t].points[0].x;\n\t\t\t\tmetaLines[t].ys=metaLines[t].k*metaLines[t].xs+metaLines[t].b;\n\t\t\t\tmetaLines[t].xe=metaLines[t].points[metaLines[t].points.size()-1].x;\n\t\t\t\tmetaLines[t].ye=metaLines[t].k*metaLines[t].xe+metaLines[t].b;\n\t\t\t}\n\t\t}\n\t}\n}\n\nvoid MetaLine::metaLineMerging(lines_list_t &metaLines,int *removal)\n{\n\tint i,j,m,n;\n\n\t//sort lines\n\tstd::vector<int> length;\n\tstd::vector<int> index;\n\tfor (i=0;i<metaLines.size();++i)\n\t{\n\t\tif (!removal[i]&&metaLines[i].points.size()>2*thMeaningfulLength)\n\t\t{\n\t\t\tindex.push_back(i);\n\t\t\tlength.push_back(metaLines[i].points.size());\n\t\t}\n\t}\n\tQuickSort<int,int>::SortDescent(&length[0], 0, length.size()-1, &index[0]);\n\n\t//creat line bins\n\tint numBins=16;\n\tfloat stepBins=CV_PI/numBins;\n\tstd::vector<std::vector<int> > bins(numBins);\n\tstd::vector<int> lineBinIndex(length.size(),0);\n\tstd::vector<float> lineAngle(length.size(),0);\n\tfor (i=0;i<length.size();++i)\n\t{\n\t\tint lineID=index[i];\n\t\tfloat deltaX=metaLines[lineID].xe-metaLines[lineID].xs;\n\t\tfloat deltaY=metaLines[lineID].ye-metaLines[lineID].ys;\n\n\t\tfloat angle=atan(deltaY/deltaX);\n\t\tangle+=CV_PI/2.0;\n\t\tint binID=angle/stepBins;\n\t\tif (binID==numBins) binID=numBins-1;\n\n\t\tbins[binID].push_back(i);\n\t\tlineBinIndex[i]=binID;\n\t\tlineAngle[i]=angle;\n\t}\n\n\t//line merging\n\tfor (i=0;i<length.size();++i)\n\t{\n\t\tint binID=lineBinIndex[i];\n\n\t\tint lineID1=index[i];\n\t\tfloat angle1=lineAngle[i];\n\t\tif (!removal[lineID1])\n\t\t{\n\t\t\tif (metaLines[lineID1].ID==265)\n\t\t\t{\n\t\t\t\tint aa=0;\n\t\t\t}\n\t\t\tif (bins[binID].size())\n\t\t\t{\n\t\t\t\tsize_list_t lineIDHyps;\n\t\t\t\tfor (j=0;j<bins[binID].size();++j)\n\t\t\t\t{\n\t\t\t\t\tint t=bins[binID][j];\n\t\t\t\t\tint lineID2=index[t];\n\t\t\t\t\tif (lineID2!=lineID1)\n\t\t\t\t\t{\n\t\t\t\t\t\tfloat angle2=lineAngle[t];\n\n\t\t\t\t\t\tif (abs(angle1-angle2)<thAngle)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsize_t &temp=lineIDHyps.push_back();\n\t\t\t\t\t\t\ttemp=lineID2;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//line merging\n\t\t\t\tsize_list_t lineIDMerged;\n\t\t\t\tint Rnt=lineMerging2(lineID1,metaLines[lineID1],lineIDHyps,metaLines,lineIDMerged);\n\t\t\t\tif (Rnt)\n\t\t\t\t{\n\t\t\t\t\tfor (j=0;j<lineIDMerged.size();++j)\n\t\t\t\t\t\tremoval[lineIDMerged[j]]=1;\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n}\n\nvoid MetaLine::subDivision(clusters_list_t &clusters, const string_t &string, const size_t first_index, const size_t last_index, const float min_deviation, const size_t min_size)\n{\n\tsize_t clusters_count = clusters.size();\n\n\tconst pixel_t &first = string[first_index];\n\tconst pixel_t &last = string[last_index];\n\t\n\t// Compute the length of the straight line segment defined by the endpoints of the cluster.\n\tint x = first.x - last.x;\n\tint y = first.y - last.y;\n\tfloat length = sqrt( static_cast<float>( (x * x) + (y * y) ) );\n\t\n\t// Find the pixels with maximum deviation from the line segment in order to subdivide the cluster.\n\tsize_t max_pixel_index = 0;\n\tfloat deviation, max_deviation = -1.0;\n\n\tfor (size_t i=first_index, count=string.size(); i!=last_index; i=(i+1)%count)\n\t{\n\t\tconst pixel_t &current = string[i];\n\t\t\n\t\tdeviation = static_cast<float>( abs( ((current.x - first.x) * (first.y - last.y)) + ((current.y - first.y) * (last.x - first.x)) ) );\n\n\t\tif (deviation > max_deviation)\n\t\t{\n\t\t\tmax_pixel_index = i;\n\t\t\tmax_deviation = deviation;\n\t\t}\n\t}\n \tmax_deviation /= length;\n// \n// \t// Compute the ratio between the length of the segment and the maximum deviation.\n// \tfloat ratio = length / std::max( max_deviation, min_deviation );\n\n\t// Test the number of pixels of the sub-clusters.\n\tint half_min_size=min_size/2;\n\tif ((max_deviation>=min_deviation) && ((max_pixel_index - first_index + 1) >= half_min_size) && ((last_index - max_pixel_index + 1) >= half_min_size))\n\t{\n\t\tsubDivision( clusters, string, first_index, max_pixel_index, min_deviation, min_size );\n\t\tsubDivision( clusters, string, max_pixel_index, last_index, min_deviation, min_size );\n\n// \t\t// Test the quality of the sub-clusters against the quality of the current cluster.\n// \t\tif ((ratio1 > ratio) || (ratio2 > ratio))\n// \t\t{\n// \t\t\treturn std::max( ratio1, ratio2 );\n// \t\t}\n\t}\n\telse\n\t{\n\t\t// Remove the sub-clusters from the list of clusters.\n\t\tclusters.resize( clusters_count );\n\n\t\t// Keep current cluster\n\t\tcluster_t &cluster = clusters.push_back();\n\n\t\tcluster.pixels = &first;\n\t\tcluster.size = (last_index - first_index) + 1;\n\t}\n\n}\n\nvoid MetaLine::lineValidityCheck(lines_list_t &metaLines,int *removal)\n{\n\tint i,j;\n\n\t// line Validity Check on Gradient orientation\n\tint num=0;\n\tfor (i=0;i<metaLines.size();++i)\n\t{\n\t\tif (removal[i]||metaLines[i].points.size()<thMeaningfulLength)\n\t\t{\n\t\t\tremoval[i]=1;\n\t\t\tnum++;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfloat orientProbability=lineValidityCheckGradientOrientation( metaLines[i]);\n\t\t\tfloat gradientProbability=lineValidityCheckGradientLevel( metaLines[i]);\n\t\t\tif (orientProbability*N4*gradientProbability*N2>1)\n\t\t\t{\n\t\t\t\tremoval[i]=1;\n\t\t\t\tnum++;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfloat MetaLine::lineValidityCheckGradientLevel(line_t &metaLines)\n{\n\tint i,j;\n\n\tfloat* ptrGM=(float*) gradientMap.data;\n\tint thGptNum=thMeaningfulLength;\n\n\tstd::vector<float> gradient;\n\tint numPoints=metaLines.points.size();\n\tint step=numPoints/thGptNum;\n\tif (step==0) step=1;\n\tstep=1;\n\n\tfor (j=0;j<numPoints;j+=step)\n\t{\n\t\tint loc=metaLines.points[j].y*cols+metaLines.points[j].x;\n\t\tgradient.push_back(ptrGM[loc]);\n\t}\n\n\t//sort\n\tQuickSort<float,int>::SortDescent(&gradient[0], 0, gradient.size()-1);\n\n\tint index=int(gradient[gradient.size()-1]+0.5);\n\tfloat probability=pow(greaterThan[index],numPoints);\n\n\treturn probability;\n}\n\nfloat MetaLine::lineValidityCheckGradientOrientation(line_t &metaLines)\n{\n\tint i,j;\n\tfloat* ptr=(float*) orientationMap.data;\n\tfloat angleOffset=CV_PI/8.0;\n\n\tfloat deltaX=metaLines.xs-metaLines.xe;\n\tfloat deltaY=metaLines.ys-metaLines.ye;\n\tfloat angleLine = atan(deltaY/deltaX);\n\tstd::vector<int> alignIndex(metaLines.points.size(),0);\n\tint count1=0;\n\tint count2=0;\n\tint count3=0;\n\tfor (j=0;j<metaLines.points.size();++j)\n\t{\n\t\tint loc=metaLines.points[j].y*cols+metaLines.points[j].x;\n\t\tfloat anglePt=ptr[loc];\n\t\tif (abs(anglePt-angleLine)<angleOffset)\n\t\t\tcount1++;\n\t\tif ((CV_PI-abs(anglePt-angleLine))<angleOffset)\n\t\t\tcount2++;\n\t\tcount3++;\n\t}\n\n\tint count=max(count1,count2);\n\t\n\treturn probability(count3,count,p);\n}"
  },
  {
    "path": "thirdparty/CannyLines/src/MetaLine.h",
    "content": "#ifndef _META_LINE_H_\n#define _META_LINE_H_\n#pragma once\n\n#include <opencv2/opencv.hpp>\n#include \"types.h\"\n#include <vector>\n\nusing namespace cv;\nusing namespace std;\n\nenum DIR{LEFT,RIGHT,UP,DOWN};\n\nclass MetaLine\n{\npublic:\n\tMetaLine(void);\n\t~MetaLine(void);\n\n\tvoid MetaLineDetection(cv::Mat originalImage,float gausSigma, int gausHalfSize,std::vector<std::vector<float> > &lines);\n\nprivate:\n\tvoid getInformations(cv::Mat &originalImage,float gausSigma, int gausHalfSize,float p);\n\tbool smartRouting(clusters_list_t &segments,float minDeviation,int minSize);\n\tvoid getMetaLine(clusters_list_t &segments,lines_list_t &metaLines,float thMSE);\n\tvoid getMetaLine(strings_list_t &strings,lines_list_t &metaLines,float thMSE);\n\tvoid metaLineExtending(lines_list_t &metaLines,int *removal);\n\tvoid metaLineMerging(lines_list_t &metaLines,int *removal);\n\tvoid lineValidityCheck(lines_list_t &metaLines,int *removal);\n\n\t//\n\tbool next(int &x_seed,int &y_seed);\n\tvoid subDivision(clusters_list_t &clusters, const string_t &string, const size_t first_index, const size_t last_index, const float min_deviation, const size_t min_size);\n\n\tvoid extendHirozontal(line_t &metaLineCur,lines_list_t  &metaLines,int *removal);\n\tvoid extendVertical(line_t &metaLineCur,lines_list_t  &metaLines,int *removal);\n\tint lineMerging(int IDCur,line_t &metaLineCur,size_list_t &IDHyps,lines_list_t &metaLines,float thAngle);\n\tint lineMerging2(int IDCur,line_t &metaLineCur,size_list_t &IDHyps,lines_list_t &metaLines,size_list_t &IDMerged);\n\tbool crossingCheck(Point2f pts,Point2f pte,int ID);\n\tint crossSearch(Point2i pts,float &angle,int ID);\n\n\tbool leastSquareFitting(string_t &string, float *parameters,float thMSE);\n\tbool leastSquareFitting(cluster_t &cluster, float *parameters,float thMSE);\n\tbool leastSquareFitting(std::vector<Point2f> &points, float *parameters,float thMSE);\n\tbool gradientWeightedLeastSquareFitting(string_t &string,float *parameters,float thMSE);\n\n\tfloat lineValidityCheckGradientLevel(line_t &metaLines);\n\tfloat lineValidityCheckGradientOrientation(line_t &metaLines);\n\tfloat probability(int N,int k,float p);\n\n\t//\npublic:\n\tfloat p;\n\tfloat sigma;\n\tfloat thAngle;\n\n\tint thMeaningfulLength;\n\tfloat visualMeaningfulGradient;\n\tfloat thGradientLow;\n\tfloat thGradientHigh;\n\tcv::Mat cannyEdge;\n\nprivate:\n\tint rows,cols;\n\tint rows_1,cols_1 ;\n\tint thSearchSteps;\n\n\tfloat N4;\n\tfloat N2;\n\n\tcv::Mat filteredImage;\n\tcv::Mat gradientMap; //the gradient value\n\tcv::Mat orientationMap; //index for the gradient orientation\n\tcv::Mat orientationMapInt;//\n\tcv::Mat searchingMap; //index for searching direction\n\tcv::Mat maskImage; //index for the position of gradient points\n\n\tstd::vector<Point> gradientPoints;\n\tstd::vector<float> gradientValue;\n\tstd::vector<float> greaterThan;\n\tstd::vector<float> smallerThan;\n};\n#endif  // _META_LINE_H_\n"
  },
  {
    "path": "thirdparty/CannyLines/src/QuickSort.h",
    "content": "/* --- --- ---\n * Copyright (C) 2008--2010 Idiap Research Institute (.....@idiap.ch)\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n// QuickSort.h: interface for the CQuickSort class.\n//\n//////////////////////////////////////////////////////////////////////\n\n#if !defined(_QUICK_SORT_H_)\n#define _QUICK_SORT_H_\n\n#include \"stdio.h\"\n\ntemplate <class TD, class TI>\t\t/* class TD - the type of sorted data, class TI - the type of indices */\nclass QuickSort\n{\npublic:\n\t/* sort everything inbetween `low' <-> `high' */\n\tstatic void Sort(TD *pData, long low, long high, bool bAscent=true, TI* pIdxes=NULL)\n\t{\n\t\tlong i = low;\n\t\tlong j = high;\n\t\tTD y = 0;\n\t\tTI idx;\n\n\t\t/* compare value */\n\t\tTD z = pData[(low + high) / 2];\n\n\t\t/* partition */\n\t\tdo {\n\t\t\tif ( bAscent ) {\n\t\t\t\t/* find member above ... */\n\t\t\t\twhile(pData[i] < z) i++;\n\n\t\t\t\t/* find element below ... */\n\t\t\t\twhile(pData[j] > z) j--;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t/* find member below ... */\n\t\t\t\twhile(pData[i] > z) i++;\n\n\t\t\t\t/* find element above ... */\n\t\t\t\twhile(pData[j] < z) j--;\n\t\t\t}\n\n\t\t\tif(i <= j) {\n\t\t\t\t/* swap two elements */\n\t\t\t\ty = pData[i];\n\t\t\t\tpData[i] = pData[j];\n\t\t\t\tpData[j] = y;\n\n\t\t\t\tif ( pIdxes ) {\n\t\t\t\t\tidx = (pIdxes)[i];\n\t\t\t\t\t(pIdxes)[i] = (pIdxes)[j];\n\t\t\t\t\t(pIdxes)[j] = idx;\n\t\t\t\t}\n\n\t\t\t\ti++;\n\t\t\t\tj--;\n\t\t\t}\n\t\t} while(i <= j);\n\n\t\t/* recurse */\n\t\tif(low < j)\n\t\t\tSort(pData, low, j, bAscent, pIdxes);\n\n\t\tif(i < high)\n\t\t\tSort(pData, i, high, bAscent, pIdxes);\n\t};\n\n\t/* sort everything inbetween `low' <-> `high' */\n\tstatic void SortAscent(TD *pData, long low, long high)\n\t{\n\t\tlong i = low;\n\t\tlong j = high;\n\t\tTD y = 0;\n\n\t\t/* compare value */\n\t\tTD z = pData[(low + high) / 2];\n\n\t\t/* partition */\n\t\tdo {\n\t\t\t/* find member above ... */\n\t\t\twhile(pData[i] < z) i++;\n\t\t\t\n\t\t\t/* find element below ... */\n\t\t\twhile(pData[j] > z) j--;\n\n\t\t\tif(i <= j) {\n\t\t\t\t/* swap two elements */\n\t\t\t\ty = pData[i];\n\t\t\t\tpData[i] = pData[j];\n\t\t\t\tpData[j] = y;\n\n\t\t\t\ti++;\n\t\t\t\tj--;\n\t\t\t}\n\t\t} while(i <= j);\n\n\t\t/* recurse */\n\t\tif(low < j)\n\t\t\tSortAscent(pData, low, j);\n\n\t\tif(i < high)\n\t\t\tSortAscent(pData, i, high);\n\t};\n\n\t/* sort everything inbetween `low' <-> `high' */\n\tstatic void SortDescent(TD *pData, long low, long high)\n\t{\n\t\tlong i = low;\n\t\tlong j = high;\n\t\tTD y = 0;\n\n\t\t/* compare value */\n\t\tTD z = pData[(low + high) / 2];\n\n\t\t/* partition */\n\t\tdo {\n\t\t\t/* find member below ... */\n\t\t\twhile(pData[i] > z) i++;\n\n\t\t\t/* find element above ... */\n\t\t\twhile(pData[j] < z) j--;\n\n\t\t\tif(i <= j) {\n\t\t\t\t/* swap two elements */\n\t\t\t\ty = pData[i];\n\t\t\t\tpData[i] = pData[j];\n\t\t\t\tpData[j] = y;\n\n\t\t\t\ti++;\n\t\t\t\tj--;\n\t\t\t}\n\t\t} while(i <= j);\n\n\t\t/* recurse */\n\t\tif(low < j)\n\t\t\tSortDescent(pData, low, j);\n\n\t\tif(i < high)\n\t\t\tSortDescent(pData, i, high);\n\t};\n\n\t/* sort everything inbetween `low' <-> `high' */\n\tstatic void SortAscent(TD *pData, long low, long high, TI* pIdxes)\n\t{\n\t\tlong i = low;\n\t\tlong j = high;\n\t\tTD y = 0;\n\t\tTI idx;\n\n\t\t/* compare value */\n\t\tTD z = pData[(low + high) / 2];\n\n\t\t/* partition */\n\t\tdo {\n\t\t\t/* find member above ... */\n\t\t\twhile(pData[i] < z) i++;\n\t\t\t\n\t\t\t/* find element below ... */\n\t\t\twhile(pData[j] > z) j--;\n\n\t\t\tif(i <= j) {\n\t\t\t\t/* swap two elements */\n\t\t\t\ty = pData[i];\n\t\t\t\tpData[i] = pData[j];\n\t\t\t\tpData[j] = y;\n\n\t\t\t\tidx = (pIdxes)[i];\n\t\t\t\t(pIdxes)[i] = (pIdxes)[j];\n\t\t\t\t(pIdxes)[j] = idx;\n\n\t\t\t\ti++;\n\t\t\t\tj--;\n\t\t\t}\n\t\t} while(i <= j);\n\n\t\t/* recurse */\n\t\tif(low < j)\n\t\t\tSortAscent(pData, low, j, pIdxes);\n\n\t\tif(i < high)\n\t\t\tSortAscent(pData, i, high, pIdxes);\n\t};\n\n\t/* sort everything inbetween `low' <-> `high' */\n\tstatic void SortDescent(TD *pData, long low, long high, TI* pIdxes)\n\t{\n\t\tlong i = low;\n\t\tlong j = high;\n\t\tTD y = 0;\n\t\tTI idx;\n\n\t\t/* compare value */\n\t\tTD z = pData[(low + high) / 2];\n\n\t\t/* partition */\n\t\tdo {\n\t\t\t/* find member below ... */\n\t\t\twhile(pData[i] > z) i++;\n\n\t\t\t/* find element above ... */\n\t\t\twhile(pData[j] < z) j--;\n\n\t\t\tif(i <= j) {\n\t\t\t\t/* swap two elements */\n\t\t\t\ty = pData[i];\n\t\t\t\tpData[i] = pData[j];\n\t\t\t\tpData[j] = y;\n\n\t\t\t\tidx = (pIdxes)[i];\n\t\t\t\t(pIdxes)[i] = (pIdxes)[j];\n\t\t\t\t(pIdxes)[j] = idx;\n\n\t\t\t\ti++;\n\t\t\t\tj--;\n\t\t\t}\n\t\t} while(i <= j);\n\n\t\t/* recurse */\n\t\tif(low < j)\n\t\t\tSortDescent(pData, low, j, pIdxes);\n\n\t\tif(i < high)\n\t\t\tSortDescent(pData, i, high, pIdxes);\n\t};\n\n\t/* sort everything inbetween `low' <-> `high' */\n\tstatic void SortAscent(TD *pData, long low, long high, TI* pIdxes,TI* pID)\n\t{\n\t\tlong i = low;\n\t\tlong j = high;\n\t\tTD y = 0;\n\t\tTI idx;\n\n\t\t/* compare value */\n\t\tTD z = pData[(low + high) / 2];\n\n\t\t/* partition */\n\t\tdo {\n\t\t\t/* find member above ... */\n\t\t\twhile(pData[i] < z) i++;\n\n\t\t\t/* find element below ... */\n\t\t\twhile(pData[j] > z) j--;\n\n\t\t\tif(i <= j) {\n\t\t\t\t/* swap two elements */\n\t\t\t\ty = pData[i];\n\t\t\t\tpData[i] = pData[j];\n\t\t\t\tpData[j] = y;\n\n\t\t\t\tidx = (pIdxes)[i];\n\t\t\t\t(pIdxes)[i] = (pIdxes)[j];\n\t\t\t\t(pIdxes)[j] = idx;\n\n\t\t\t\tpID[(pIdxes)[i]]=i;\n\t\t\t\tpID[(pIdxes)[j]]=j;\n\n\t\t\t\ti++;\n\t\t\t\tj--;\n\t\t\t}\n\t\t} while(i <= j);\n\n\t\t/* recurse */\n\t\tif(low < j)\n\t\t\tSortAscent(pData, low, j, pIdxes,pID);\n\n\t\tif(i < high)\n\t\t\tSortAscent(pData, i, high, pIdxes,pID);\n\t};\n\n\t/* sort everything inbetween `low' <-> `high' */\n\tstatic void SortDescent(TD *pData, long low, long high, TI* pIdxes,TI* pID)\n\t{\n\t\tlong i = low;\n\t\tlong j = high;\n\t\tTD y = 0;\n\t\tTI idx;\n\n\t\t/* compare value */\n\t\tTD z = pData[(low + high) / 2];\n\n\t\t/* partition */\n\t\tdo {\n\t\t\t/* find member below ... */\n\t\t\twhile(pData[i] > z) i++;\n\n\t\t\t/* find element above ... */\n\t\t\twhile(pData[j] < z) j--;\n\n\t\t\tif(i <= j) {\n\t\t\t\t/* swap two elements */\n\t\t\t\ty = pData[i];\n\t\t\t\tpData[i] = pData[j];\n\t\t\t\tpData[j] = y;\n\n\t\t\t\tidx = (pIdxes)[i];\n\t\t\t\t(pIdxes)[i] = (pIdxes)[j];\n\t\t\t\t(pIdxes)[j] = idx;\n\n\t\t\t\tpID[(pIdxes)[i]]=i;\n\t\t\t\tpID[(pIdxes)[j]]=j;\n\n\t\t\t\ti++;\n\t\t\t\tj--;\n\t\t\t}\n\t\t} while(i <= j);\n\n\t\t/* recurse */\n\t\tif(low < j)\n\t\t\tSortDescent(pData, low, j, pIdxes,pID);\n\n\t\tif(i < high)\n\t\t\tSortDescent(pData, i, high, pIdxes,pID);\n\t};\n};\n\n#endif // !defined(_QUICK_SORT_H_)\n"
  },
  {
    "path": "thirdparty/CannyLines/src/buffer_2d.cpp",
    "content": "/*\n * Copyright (C) 2008 Leandro A. F. Fernandes and Manuel M. Oliveira\n *\n * author   : Fernandes, Leandro A. F.\n * e-mail   : laffernandes@gmail.com\n * home page: http://www.inf.ufrgs.br/~laffernandes\n *\n *\n * The complete description of the implemented techinique can be found at\n *\n *      Leandro A. F. Fernandes, Manuel M. Oliveira\n *      Real-time line detection through an improved Hough transform voting scheme\n *      Pattern Recognition (PR), Elsevier, 41:1, 2008, 299-314.\n *      DOI: http://dx.doi.org/10.1016/j.patcog.2007.04.003\n *      Project Page: http://www.inf.ufrgs.br/~laffernandes/kht.html\n *\n * If you use this implementation, please reference the above paper.\n *\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see http://www.gnu.org/licenses/.\n */\n\n#include <cstdlib>\n#include <memory.h>\n#include \"buffer_2d.h\"\n\n// Allocates 2D memory blocks.\nvoid*\nmalloc_2d(const size_t size1, const size_t size2, const size_t data_size)\n{\n\tconst size_t pointers_size = size1 * sizeof( void* );\n\tconst size_t items_size = size1 * size2 * data_size;\n\n\tvoid *buffer = malloc( pointers_size + items_size );\n\n\tvoid **pointers = static_cast<void**>( buffer );\n\tchar *items = &(static_cast<char*>( buffer ))[pointers_size];\n\n\tfor (size_t i=0, j=0, j_inc=size2*data_size; i!=size1; ++i, j+=j_inc)\n\t{\n\t\tpointers[i] = &items[j];\n\t}\n\n\treturn buffer;\n}\n\n// Sets 2D buffers to a specified character.\nvoid*\nmemset_2d(void *dest, const int c, const size_t size1, const size_t size2, const size_t data_size)\n{\n\tif (dest)\n\t{\n\t\tconst size_t pointers_size = size1 * sizeof( void* );\n\t\tconst size_t items_size = size1 * size2 * data_size;\n\n\t\tchar *buffer = static_cast<char*>( dest );\n\t\t\n\t\tmemset( &buffer[pointers_size], c, items_size );\n\t}\n\n\treturn dest;\n}\n\n// Reallocate 2D memory blocks.\nvoid*\nrealloc_2d(void *memblock, const size_t size1, const size_t size2, const size_t data_size)\n{\n\tconst size_t pointers_size = size1 * sizeof( void* );\n\tconst size_t items_size = size1 * size2 * data_size;\n\n\tmemblock = realloc( memblock, pointers_size + items_size );\n\n\tvoid **pointers = static_cast<void**>( memblock );\n\tchar *items = &(static_cast<char*>( memblock ))[pointers_size];\n\n\tfor (size_t i=0, j=0, j_inc=size2*data_size; i!=size1; ++i, j+=j_inc)\n\t{\n\t\tpointers[i] = &items[j];\n\t}\n\n\treturn memblock;\n}\n"
  },
  {
    "path": "thirdparty/CannyLines/src/buffer_2d.h",
    "content": "/*\n * Copyright (C) 2008 Leandro A. F. Fernandes and Manuel M. Oliveira\n *\n * author   : Fernandes, Leandro A. F.\n * e-mail   : laffernandes@gmail.com\n * home page: http://www.inf.ufrgs.br/~laffernandes\n *\n *\n * The complete description of the implemented techinique can be found at\n *\n *      Leandro A. F. Fernandes, Manuel M. Oliveira\n *      Real-time line detection through an improved Hough transform voting scheme\n *      Pattern Recognition (PR), Elsevier, 41:1, 2008, 299-314.\n *      DOI: http://dx.doi.org/10.1016/j.patcog.2007.04.003\n *      Project Page: http://www.inf.ufrgs.br/~laffernandes/kht.html\n *\n * If you use this implementation, please reference the above paper.\n *\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see http://www.gnu.org/licenses/.\n */\n\n#ifndef _BUFFER_2D_\n#define _BUFFER_2D_\n\n#include <cstdlib>\n\n// Allocates 2D memory blocks.\nvoid* malloc_2d(const size_t size1, const size_t size2, const size_t data_size);\n\n// Sets 2D buffers to a specified character.\nvoid* memset_2d(void *dest, const int c, const size_t size1, const size_t size2, const size_t data_size);\n\n// Reallocate 2D memory blocks.\nvoid* realloc_2d(void *memblock, const size_t size1, const size_t size2, const size_t data_size);\n\n#endif // !_BUFFER_2D_\n"
  },
  {
    "path": "thirdparty/CannyLines/src/main.cpp",
    "content": "#include <stdio.h>\n#include <fstream>\n#include \"cv.h\"\n#include \"highgui.h\"\n#include \"CannyLine.h\"\n\nusing namespace cv;\nusing namespace std;\n\n\nvoid main()\n{\t\n\tstring fileCur;\n\tcv::Mat img = imread( fileCur, 0 );\n\n\tCannyLine detector;\n\tstd::vector<std::vector<float> > lines;\n\tdetector.cannyLine( img, lines );\n\n\t// show\n\tcv::Mat imgShow( img.rows, img.cols, CV_8UC3, cv::Scalar( 255, 255, 255 ) );\n\tfor ( int m=0; m<lines.size(); ++m )\n\t{\n\t\tcv::line( imgShow, cv::Point( lines[m][0], lines[m][1] ), cv::Point( lines[m][2], lines[m][3] ), cv::Scalar(0,0,0), 1, CV_AA );\n\t}\n\timshow(\"\",imgShow);\n\tcv::waitKey(0);\n}"
  },
  {
    "path": "thirdparty/CannyLines/src/types.h",
    "content": "/*\n * Copyright (C) 2008 Leandro A. F. Fernandes and Manuel M. Oliveira\n *\n * author   : Fernandes, Leandro A. F.\n * e-mail   : laffernandes@gmail.com\n * home page: http://www.inf.ufrgs.br/~laffernandes\n *\n *\n * The complete description of the implemented techinique can be found at\n *\n *      Leandro A. F. Fernandes, Manuel M. Oliveira\n *      Real-time line detection through an improved Hough transform voting scheme\n *      Pattern Recognition (PR), Elsevier, 41:1, 2008, 299-314.\n *      DOI: http://dx.doi.org/10.1016/j.patcog.2007.04.003\n *      Project Page: http://www.inf.ufrgs.br/~laffernandes/kht.html\n *\n * If you use this implementation, please reference the above paper.\n *\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see http://www.gnu.org/licenses/.\n */\n\n#ifndef _TYPES_\n#define _TYPES_\n\n#include <cmath>\n#include <cstdlib>\n#include <memory.h>\n#include \"buffer_2d.h\"\n\n// A simple list implementation (use it only with aggregate types).\ntemplate<typename item_type, size_t capacity_inc>\nclass list\n{\nprivate:\n\n\t// Specifies the size of allocated storage for the container.\n\tsize_t m_capacity;\n\n\t// Specifies the list of items.\n\titem_type *m_items;\n\n\t// Counts the number of elements.\n\tsize_t m_size;\n\npublic:\n\n\t// Erases the elements of the list.\n\tinline\n\tvoid clear()\n\t{\n\t\tm_size = 0;\n\t}\n\n\t// Tests if the list is empty.\n\tinline\n\tbool empty() const\n\t{\n\t\treturn (m_size == 0);\n\t}\n\n\t// Returns a pointer to the list of items.\n\tinline\n\titem_type* items()\n\t{\n\t\treturn m_items;\n\t}\n\t\n\t// Returns a pointer to the list of items.\n\tinline\n\tconst item_type* items() const\n\t{\n\t\treturn m_items;\n\t}\n\t\n\t// Class constructor.\n\tlist() :\n\t\tm_capacity(0),\n\t\tm_items(0),\n\t\tm_size(0)\n\t{\n\t}\n\n\t// Class destructor.\n\t~list()\n\t{\n\t\tfree( m_items );\n\t};\n\n\t// Deletes the element at the end of the list.\n\tinline\n\tvoid pop_back()\n\t{\n\t\tm_size--;\n\t}\n\t\n\t// Adds a new last element and returns a reference to it.\n\tinline\n\titem_type& push_back()\n\t{\n\t\tif (m_capacity == m_size)\n\t\t{\n\t\t\tm_items = (item_type*)realloc( m_items, (m_capacity += capacity_inc) * sizeof( item_type ) );\n\t\t\tmemset( &m_items[m_size], 0, capacity_inc * sizeof( item_type ) );\n\t\t}\n\t\treturn m_items[m_size++];\n\t}\n\n\t// Specifies a new capacity for a list.\n\tinline\n\tvoid reserve(const size_t capacity)\n\t{\n\t\tif (m_capacity < capacity)\n\t\t{\n\t\t\tsize_t first = m_capacity;\n\t\t\tm_items = (item_type*)realloc( m_items, (m_capacity = capacity) * sizeof( item_type ) );\n\t\t\tmemset( &m_items[first], 0, (capacity - first) * sizeof( item_type ) );\n\t\t}\n\n\t\tif (m_size > capacity)\n\t\t{\n\t\t\tm_size = capacity;\n\t\t}\n\t}\n\n\t// Specifies a new size for a list.\n\tinline\n\tvoid resize(const size_t size)\n\t{\n\t\tif (m_capacity < size)\n\t\t{\n\t\t\tsize_t first = m_capacity;\n\t\t\tm_items = (item_type*)realloc( m_items, (m_capacity = size) * sizeof( item_type ) );\n\t\t\tmemset( &m_items[first], 0, (size - first) * sizeof( item_type ) );\n\t\t}\n\t\tm_size = size;\n\t}\n\n\t// Returns the number of elements.\n\tinline\n\tsize_t size() const\n\t{\n\t\treturn m_size;\n\t}\n\n\t// Returns a reference to the list element at a specified position.\n\tinline\n\titem_type& operator [] (const size_t index)\n\t{\n\t\treturn m_items[index];\n\t}\n\n\t// Returns a reference to the list element at a specified position.\n\tinline\n\tconst item_type& operator [] (const size_t index) const\n\t{\n\t\treturn m_items[index];\n\t}\n};\n\n// A feature pixel.\nstruct pixel_t\n{\n\tfloat x;\n\tfloat y;\n};\n\n// A cluster of approximately collinear feature pixels.\nstruct cluster_t\n{\n\tconst pixel_t *pixels;\n\tsize_t size;\n};\n\n// Specifies a list of approximately collinear feature pixels.\ntypedef list<cluster_t,1000> clusters_list_t;\n\n// Specifies a string of adjacent feature pixels.\ntypedef list<pixel_t,1000> string_t;\n\n// Specifies a list of string of feature pixels.\ntypedef list<string_t,1000> strings_list_t;\n\ntypedef list<size_t,1000> size_list_t;\n\nstruct line_t\n{\n\tint ID;\n\tstring_t points;\n\tfloat xs,ys;\n\tfloat xe,ye;\n\tint dir; //0 for k<1, 1 for k >=1\n\tfloat k,b;\n\tfloat dev;\n};\n// Specifies a list of line\ntypedef list<line_t,10000> lines_list_t;\n\n#endif // !_TYPES_\n"
  },
  {
    "path": "thirdparty/LSD/COPYING",
    "content": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU Affero General Public License is a free, copyleft license for\nsoftware and other kinds of works, specifically designed to ensure\ncooperation with the community in the case of network server software.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nour General Public Licenses are intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  Developers that use our General Public Licenses protect your rights\nwith two steps: (1) assert copyright on the software, and (2) offer\nyou this License which gives you legal permission to copy, distribute\nand/or modify the software.\n\n  A secondary benefit of defending all users' freedom is that\nimprovements made in alternate versions of the program, if they\nreceive widespread use, become available for other developers to\nincorporate.  Many developers of free software are heartened and\nencouraged by the resulting cooperation.  However, in the case of\nsoftware used on network servers, this result may fail to come about.\nThe GNU General Public License permits making a modified version and\nletting the public access it on a server without ever releasing its\nsource code to the public.\n\n  The GNU Affero General Public License is designed specifically to\nensure that, in such cases, the modified source code becomes available\nto the community.  It requires the operator of a network server to\nprovide the source code of the modified version running there to the\nusers of that server.  Therefore, public use of a modified version, on\na publicly accessible server, gives the public access to the source\ncode of the modified version.\n\n  An older license, called the Affero General Public License and\npublished by Affero, was designed to accomplish similar goals.  This is\na different license, not a version of the Affero GPL, but Affero has\nreleased a new version of the Affero GPL which permits relicensing under\nthis license.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU Affero General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Remote Network Interaction; Use with the GNU General Public License.\n\n  Notwithstanding any other provision of this License, if you modify the\nProgram, your modified version must prominently offer all users\ninteracting with it remotely through a computer network (if your version\nsupports such interaction) an opportunity to receive the Corresponding\nSource of your version by providing access to the Corresponding Source\nfrom a network server at no charge, through some standard or customary\nmeans of facilitating copying of software.  This Corresponding Source\nshall include the Corresponding Source for any work covered by version 3\nof the GNU General Public License that is incorporated pursuant to the\nfollowing paragraph.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the work with which it is combined will remain governed by version\n3 of the GNU General Public License.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU Affero General Public License from time to time.  Such new versions\nwill be similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU Affero General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU Affero General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU Affero General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU Affero General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU Affero General Public License for more details.\n\n    You should have received a copy of the GNU Affero General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If your software can interact with users remotely through a computer\nnetwork, you should also make sure that it provides a way for users to\nget its source.  For example, if your program is a web application, its\ninterface could display a \"Source\" link that leads users to an archive\nof the code.  There are many ways you could offer source, and different\nsolutions will be better for different programs; see section 13 for the\nspecific requirements.\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU AGPL, see\n<http://www.gnu.org/licenses/>.\n"
  },
  {
    "path": "thirdparty/LSD/Makefile",
    "content": "# -----------------------------------------------------------------------------\n#\n# LSD - Line Segment Detector on digital images\n#\n# Copyright 2007-2010 rafael grompone von gioi (grompone@gmail.com)\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see <http://www.gnu.org/licenses/>.\n#\n# -----------------------------------------------------------------------------\n\nall: lsd lsd_call_example\n\nlsd: lsd.c lsd.h lsd_cmd.c\n\tcc -O3 -lm -o lsd lsd_cmd.c lsd.c\n\nlsd_call_example: lsd.c lsd.h lsd_call_example.c\n\tcc -lm -o lsd_call_example lsd_call_example.c lsd.c\n\nstrict: lsd.c lsd.h lsd_cmd.c\n\tcc -fPIC -ansi -Wall -Wextra -Werror -lm -o lsd_strict lsd.c lsd_cmd.c\n\ndoc: lsd.c lsd.h doxygen.config\n\tdoxygen doxygen.config\n\nclean:\n\trm -f lsd lsd_call_example lsd_strict\n\ncleandoc:\n\trm -rf doc\n\n# -----------------------------------------------------------------------------\n"
  },
  {
    "path": "thirdparty/LSD/README.md",
    "content": "LSD - Line Segment Detector\r\r\n===========================\r\r\n\r\r\nVersion 1.5 - December 3, 2010\r\r\n\r\r\nby Rafael Grompone von Gioi <grompone@gmail.com>\r\r\n\r\r\n\r\r\nIntroduction\r\r\n------------\r\r\n\r\r\nLSD is an implementation of the Line Segment Detector on digital\r\r\nimages described in the paper:\r\r\n\r\r\n  \"LSD: A Fast Line Segment Detector with a False Detection Control\"\r\r\n  by Rafael Grompone von Gioi, Jeremie Jakubowicz, Jean-Michel Morel,\r\r\n  and Gregory Randall, IEEE Transactions on Pattern Analysis and\r\r\n  Machine Intelligence, vol. 32, no. 4, pp. 722-732, April, 2010.\r\r\n\r\r\nand in more details in the CMLA Technical Report:\r\r\n\r\r\n  \"LSD: A Line Segment Detector, Technical Report\",\r\r\n  by Rafael Grompone von Gioi, Jeremie Jakubowicz, Jean-Michel Morel,\r\r\n  Gregory Randall, CMLA, ENS Cachan, 2010.\r\r\n\r\r\nThe version implemented here includes some further improvements\r\r\ndescribed on the LSD page at www.ipol.im. That same page includes more\r\r\ninformation, including this code and an online demo version:\r\r\n\r\r\n  http://www.ipol.im/pub/algo/gjmr_line_segment_detector\r\r\n\r\r\n\r\r\nFiles\r\r\n-----\r\r\n\r\r\nREADME.txt          - This file.\r\r\nCOPYING             - GNU AFFERO GENERAL PUBLIC LICENSE Version 3.\r\r\nMakefile            - Compilation instructions for 'make'.\r\r\nlsd.c               - LSD module ANSI C code.\r\r\nlsd.h               - LSD module ANSI C header.\r\r\nlsd_cmd.c           - LSD command line interface, ANSI C code.\r\r\nlsd_call_example.c  - Minimal example of calling LSD from a C language program.\r\r\nchairs.pgm          - Test image in PGM format.\r\r\nchairs.lsd.txt      - Expected result for 'chairs.pgm' image as an ASCII file.\r\r\nchairs.lsd.eps      - Expected result for 'chairs.pgm' image as an EPS file.\r\r\ndoc                 - Html code documentation.\r\r\ndoxygen.config      - doxygen configuration file for documentation generation.\r\r\n\r\r\n\r\r\nCompiling\r\r\n---------\r\r\n\r\r\nLSD is an ANSI C Language program and can be used as a module\r\r\nto be called from a C language program or as an independent\r\r\ncommand.\r\r\n\r\r\nIn the distribution is included a Makefile file with instructions\r\r\nto build the command lines program 'lsd', as well as minimal\r\r\nexample program on how to call LSD from C code.\r\r\n\r\r\nTo build both programs, a C compiler (called with 'cc') must be\r\r\ninstalled on your system, as well as the program 'make'.\r\r\nLSD only uses the standard C library so it should compile\r\r\nin any ANSI C Language environment. In particular, it should\r\r\ncompile in an Unix like system.\r\r\n\r\r\nThe compiling instruction is just\r\r\n\r\r\n  make\r\r\n\r\r\nfrom the directory where the source codes and the Makefile are located.\r\r\n\r\r\nTo verify a correct compilation you can apply LSD to the test\r\r\nimage 'chairs.pgm' and compare the result to the provided ones.\r\r\n\r\r\nAn explicit example of how to compile a program using LSD as a module\r\r\nis provided. The compilation line for 'lsd_call_example.c' is just\r\r\n\r\r\n  cc -lm -o lsd_call_example lsd_call_example.c lsd.c\r\r\n\r\r\n\r\r\nRunning LSD Command\r\r\n-------------------\r\r\n\r\r\nThe simplest LSD command execution is just\r\r\n\r\r\n  lsd\r\r\n\r\r\nor\r\r\n\r\r\n  ./lsd\r\r\n\r\r\nif the command is not in the path. That should print LSD version\r\r\nand the command line interface, including the available options.\r\r\nThe only input image format handled by LSD is PGM, in its two\r\r\nversions, ASCII and Binary. A useful execution would be:\r\r\n\r\r\n  lsd chairs.pgm chairs.result.txt\r\r\n\r\r\nThat should give the result as an ASCII file 'chairs.result.txt'\r\r\nwith the coordinates each line segment detected as a line in\r\r\nthe file like the following:\r\r\n\r\r\n  159.232890 134.369601 160.325338 105.613616 2.735466 \r\r\n\r\r\nwhich means that a line segment starting at point (159.232890,134.369601)\r\r\nand ending at point (160.325338 105.613616) and of width 2.735466\r\r\nwas detected. The unit is the pixel and the origin of coordinates\r\r\nis the center of pixel (0,0).\r\r\n\r\r\nFor easier visualization of the result, the LSD command can also\r\r\ngive the output in EPS or SVG file formats. For example,\r\r\n\r\r\n  lsd -P chairs.result.eps chairs.pgm chairs.result.txt\r\r\n\r\r\nwill, in addition to the ASCII output file, produce the EPS file\r\r\n'chairs.result.eps'.\r\r\n\r\r\nTo see the full options, execute LSD command without parameters,\r\r\nas in './lsd'.\r\r\n\r\r\nOptional arguments should always appear before the needed arguments\r\r\ninput and output. For example, the following line is wrong:\r\r\n\r\r\n  lsd chairs.pgm -s 0.5 chairs.result.txt   -> WRONG!!\r\r\n\r\r\nand should be\r\r\n\r\r\n  lsd -s 0.5 chairs.pgm chairs.result.txt\r\r\n\r\r\nIf the name of an input file is just - (one dash), then that\r\r\nfile will be read from the standard input. Analogously, if the\r\r\nname of an output file is just - (one dash), then that file\r\r\nwill be written to the standard output. For example,\r\r\n\r\r\n  lsd - -\r\r\n\r\r\nwill work as a filter, taking the input from standard input and\r\r\ngiving the output to standard output.\r\r\n\r\r\n\r\r\nCode Documentation\r\r\n------------------\r\r\n\r\r\nThere is a HTML documentation of the code on the directory 'doc'. The\r\r\nentry point is the file 'doc/index.html' that should be opened with a\r\r\nweb browser. The documentation was automatically generated from the\r\r\nsource code files using the Doxygen documentation system, see\r\r\nhttp://www.stack.nl/~dimitri/doxygen/.\r\r\n\r\r\n\r\r\nCopyright and License\r\r\n---------------------\r\r\n\r\r\nCopyright 2007-2010 rafael grompone von gioi (grompone@gmail.com)\r\r\n\r\r\nLSD is free software: you can redistribute it and/or modify\r\r\nit under the terms of the GNU Affero General Public License as\r\r\npublished by the Free Software Foundation, either version 3 of the\r\r\nLicense, or (at your option) any later version.\r\r\n\r\r\nLSD is distributed in the hope that it will be useful,\r\r\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\r\r\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\r\nGNU Affero General Public License for more details.\r\r\n\r\r\nYou should have received a copy of the GNU Affero General Public License\r\r\nalong with this program. If not, see <http://www.gnu.org/licenses/>.\r\r\n\r\r\n\r\r\nThanks\r\r\n------\r\r\n\r\r\nI would be grateful to receive any comment, especially about errors,\r\r\nbugs, or strange results.\r\r\n"
  },
  {
    "path": "thirdparty/LSD/chairs.lsd.eps",
    "content": "%!PS-Adobe-3.0 EPSF-3.0\n%%BoundingBox: 0 0 512 512\n%%Creator: LSD, Line Segment Detector\n%%Title: (chairs.lsd.eps)\n%%EndComments\nnewpath 159.232890 377.630399 moveto 160.325338 406.386384 lineto 1.500000 setlinewidth stroke\nnewpath 66.105373 436.412213 moveto 63.972852 463.940680 lineto 1.500000 setlinewidth stroke\nnewpath 68.757033 345.302576 moveto 63.229592 403.884869 lineto 1.500000 setlinewidth stroke\nnewpath 214.249352 288.880786 moveto 216.035182 327.663671 lineto 1.500000 setlinewidth stroke\nnewpath 146.507379 405.095649 moveto 144.805709 426.409387 lineto 1.500000 setlinewidth stroke\nnewpath 16.923435 91.703293 moveto 101.917593 79.163701 lineto 1.500000 setlinewidth stroke\nnewpath 185.613699 173.799808 moveto 184.450026 212.664673 lineto 1.500000 setlinewidth stroke\nnewpath 185.553747 95.117638 moveto 184.760563 102.794000 lineto 1.500000 setlinewidth stroke\nnewpath 104.420784 82.933415 moveto 14.001093 96.356269 lineto 1.500000 setlinewidth stroke\nnewpath 236.956356 61.906785 moveto 338.133131 46.428147 lineto 1.500000 setlinewidth stroke\nnewpath 440.312266 68.681418 moveto 461.485782 171.197215 lineto 1.500000 setlinewidth stroke\nnewpath 390.175127 68.752265 moveto 386.423926 82.501938 lineto 1.500000 setlinewidth stroke\nnewpath 254.349382 367.377162 moveto 309.534989 361.672777 lineto 1.500000 setlinewidth stroke\nnewpath 395.623625 357.611991 moveto 469.473514 349.807144 lineto 1.500000 setlinewidth stroke\nnewpath 82.100903 313.871348 moveto 82.505242 338.885018 lineto 1.500000 setlinewidth stroke\nnewpath 308.102489 364.883084 moveto 265.621383 368.836134 lineto 1.500000 setlinewidth stroke\nnewpath 318.193027 403.361748 moveto 377.018594 397.930169 lineto 1.500000 setlinewidth stroke\nnewpath 177.234686 340.115222 moveto 178.866472 400.138825 lineto 1.500000 setlinewidth stroke\nnewpath 83.483276 302.582551 moveto 83.002669 312.678681 lineto 1.500000 setlinewidth stroke\nnewpath 470.753079 352.524955 moveto 426.714048 357.429896 lineto 1.500000 setlinewidth stroke\nnewpath 347.054436 46.040231 moveto 390.859403 69.519765 lineto 1.500000 setlinewidth stroke\nnewpath 130.050173 88.785323 moveto 145.520607 96.582136 lineto 1.500000 setlinewidth stroke\nnewpath 359.127942 271.253044 moveto 363.431147 306.641769 lineto 1.500000 setlinewidth stroke\nnewpath 338.937027 50.196876 moveto 329.742966 53.614810 lineto 1.500000 setlinewidth stroke\nnewpath 55.447508 224.112945 moveto 90.891886 217.896771 lineto 1.500000 setlinewidth stroke\nnewpath 220.576199 73.846485 moveto 226.204808 64.213795 lineto 1.500000 setlinewidth stroke\nnewpath 459.356888 398.687832 moveto 509.492223 393.836399 lineto 1.500000 setlinewidth stroke\nnewpath 472.109699 35.342094 moveto 483.528037 22.997805 lineto 1.500000 setlinewidth stroke\nnewpath 28.400012 378.274511 moveto 0.578315 382.302547 lineto 1.500000 setlinewidth stroke\nnewpath 129.429473 406.943925 moveto 65.661795 408.853635 lineto 1.500000 setlinewidth stroke\nnewpath 65.393503 409.002684 moveto 62.249854 434.078699 lineto 1.500000 setlinewidth stroke\nnewpath 209.403932 404.204705 moveto 252.014573 400.465538 lineto 1.500000 setlinewidth stroke\nnewpath 254.544229 210.539515 moveto 349.452808 200.890307 lineto 1.500000 setlinewidth stroke\nnewpath 494.491690 20.821260 moveto 509.489418 18.307701 lineto 1.500000 setlinewidth stroke\nnewpath 418.147191 445.425796 moveto 463.270471 442.096800 lineto 1.500000 setlinewidth stroke\nnewpath 114.550553 84.813610 moveto 109.152211 81.770175 lineto 1.500000 setlinewidth stroke\nnewpath 363.760038 171.885065 moveto 368.999069 152.523278 lineto 1.500000 setlinewidth stroke\nnewpath 112.015348 78.588127 moveto 129.096273 86.944720 lineto 1.500000 setlinewidth stroke\nnewpath 450.611143 459.939084 moveto 489.517674 457.039207 lineto 1.500000 setlinewidth stroke\nnewpath 114.103020 455.036541 moveto 113.370535 467.639271 lineto 1.500000 setlinewidth stroke\nnewpath 166.443487 369.132111 moveto 177.706109 333.278739 lineto 1.500000 setlinewidth stroke\nnewpath 0.568442 379.782537 moveto 29.760859 374.961420 lineto 1.500000 setlinewidth stroke\nnewpath 0.822115 439.176661 moveto 33.431051 435.034186 lineto 1.500000 setlinewidth stroke\nnewpath 335.206776 52.203363 moveto 233.710408 66.732278 lineto 1.500000 setlinewidth stroke\nnewpath 506.939321 397.705002 moveto 430.625997 401.395607 lineto 1.500000 setlinewidth stroke\nnewpath 91.889757 406.545068 moveto 132.021450 403.062750 lineto 1.500000 setlinewidth stroke\nnewpath 490.624116 25.330339 moveto 481.689616 31.633947 lineto 1.500000 setlinewidth stroke\nnewpath 148.343515 467.931628 moveto 171.978709 464.613785 lineto 1.500000 setlinewidth stroke\nnewpath 167.308281 467.628627 moveto 167.161805 485.127401 lineto 1.500000 setlinewidth stroke\nnewpath 370.836320 64.750257 moveto 345.209318 52.225532 lineto 1.500000 setlinewidth stroke\nnewpath 391.906831 427.947381 moveto 432.009557 423.987798 lineto 1.500000 setlinewidth stroke\nnewpath 178.416428 333.174306 moveto 193.827134 289.929762 lineto 1.500000 setlinewidth stroke\nnewpath 133.271812 377.250054 moveto 162.050609 372.421696 lineto 1.500000 setlinewidth stroke\nnewpath 90.277768 284.200800 moveto 83.969749 301.679861 lineto 1.500000 setlinewidth stroke\nnewpath 184.930491 103.852722 moveto 185.794276 173.857488 lineto 1.500000 setlinewidth stroke\nnewpath 459.882600 167.961912 moveto 464.790514 177.409137 lineto 1.500000 setlinewidth stroke\nnewpath 121.173667 440.346765 moveto 136.308673 402.901333 lineto 1.500000 setlinewidth stroke\nnewpath 142.958322 100.873992 moveto 126.173037 90.489190 lineto 1.500000 setlinewidth stroke\nnewpath 373.211533 401.131622 moveto 328.114968 405.008304 lineto 1.500000 setlinewidth stroke\nnewpath 26.897965 492.627292 moveto 25.020860 511.439445 lineto 1.500000 setlinewidth stroke\nnewpath 428.479914 43.042322 moveto 438.882696 65.354530 lineto 1.500000 setlinewidth stroke\nnewpath 359.498486 462.415370 moveto 409.487962 459.720172 lineto 1.500000 setlinewidth stroke\nnewpath 200.759417 98.701775 moveto 191.059982 91.175324 lineto 1.500000 setlinewidth stroke\nnewpath 160.717716 434.737817 moveto 220.711892 432.105099 lineto 1.500000 setlinewidth stroke\nnewpath 224.660034 248.669855 moveto 223.280681 255.158097 lineto 1.500000 setlinewidth stroke\nnewpath 485.638645 460.647267 moveto 440.636706 461.823046 lineto 1.500000 setlinewidth stroke\nnewpath 78.123187 435.098969 moveto 119.520625 432.216279 lineto 1.500000 setlinewidth stroke\nnewpath 303.110387 264.990330 moveto 245.341121 271.258830 lineto 1.500000 setlinewidth stroke\nnewpath 44.214757 461.751230 moveto 38.283969 478.929883 lineto 1.500000 setlinewidth stroke\nnewpath 136.358108 345.985404 moveto 133.914970 364.904170 lineto 1.500000 setlinewidth stroke\nnewpath 290.612784 464.985153 moveto 325.781195 461.913101 lineto 1.500000 setlinewidth stroke\nnewpath 430.928389 73.610954 moveto 443.824367 88.428422 lineto 1.500000 setlinewidth stroke\nnewpath 250.702019 403.335905 moveto 230.666339 405.506570 lineto 1.500000 setlinewidth stroke\nnewpath 401.971668 322.776260 moveto 432.172868 320.692792 lineto 1.500000 setlinewidth stroke\nnewpath 284.417212 430.488894 moveto 322.134685 426.113665 lineto 1.500000 setlinewidth stroke\nnewpath 509.887214 22.546250 moveto 492.055317 26.318579 lineto 1.500000 setlinewidth stroke\nnewpath 35.522946 456.125588 moveto 40.682107 454.014564 lineto 1.500000 setlinewidth stroke\nnewpath 134.291376 399.817391 moveto 142.123736 379.734505 lineto 1.500000 setlinewidth stroke\nnewpath 383.492191 76.060838 moveto 375.382597 66.582396 lineto 1.500000 setlinewidth stroke\nnewpath 108.153220 365.300245 moveto 110.409196 348.845413 lineto 1.500000 setlinewidth stroke\nnewpath 434.003471 321.297586 moveto 433.045129 341.371187 lineto 1.500000 setlinewidth stroke\nnewpath 38.179708 290.715251 moveto 0.309891 294.225283 lineto 1.500000 setlinewidth stroke\nnewpath 426.878110 427.671871 moveto 386.805716 430.330850 lineto 1.500000 setlinewidth stroke\nnewpath 5.548653 290.405969 moveto 38.141785 287.838046 lineto 1.500000 setlinewidth stroke\nnewpath 228.231497 251.607507 moveto 230.003626 241.268495 lineto 1.500000 setlinewidth stroke\nnewpath 125.598417 90.330665 moveto 115.603827 89.038809 lineto 1.500000 setlinewidth stroke\nnewpath 0.618577 412.593471 moveto 24.644698 407.698868 lineto 1.500000 setlinewidth stroke\nnewpath 98.357075 71.679418 moveto 32.948807 81.444875 lineto 1.500000 setlinewidth stroke\nnewpath 400.760375 343.945157 moveto 401.833753 322.749515 lineto 1.500000 setlinewidth stroke\nnewpath 114.391901 436.067978 moveto 68.111960 436.897458 lineto 1.500000 setlinewidth stroke\nnewpath 131.537589 425.110571 moveto 129.878963 463.896551 lineto 1.500000 setlinewidth stroke\nnewpath 455.572123 489.617824 moveto 474.507270 487.643681 lineto 1.500000 setlinewidth stroke\nnewpath 319.431011 429.545754 moveto 284.362402 432.474131 lineto 1.500000 setlinewidth stroke\nnewpath 61.838651 377.730091 moveto 53.981571 375.012465 lineto 1.500000 setlinewidth stroke\nnewpath 106.794317 453.609591 moveto 115.847654 450.857427 lineto 1.500000 setlinewidth stroke\nnewpath 198.098624 478.654066 moveto 217.026545 476.394406 lineto 1.500000 setlinewidth stroke\nnewpath 274.419642 453.085261 moveto 254.365818 455.030329 lineto 1.500000 setlinewidth stroke\nnewpath 110.830519 347.323695 moveto 136.968982 344.880446 lineto 1.500000 setlinewidth stroke\nnewpath 156.904122 452.971452 moveto 194.558357 449.806331 lineto 1.500000 setlinewidth stroke\nnewpath 203.411749 392.793786 moveto 204.813000 380.035815 lineto 1.500000 setlinewidth stroke\nnewpath 277.089886 335.050031 moveto 275.815996 352.638833 lineto 1.500000 setlinewidth stroke\nnewpath 405.685811 462.708039 moveto 361.855954 464.707487 lineto 1.500000 setlinewidth stroke\nnewpath 86.904705 467.833598 moveto 103.180657 465.515839 lineto 1.500000 setlinewidth stroke\nnewpath 224.523552 271.186505 moveto 227.747717 252.346516 lineto 1.500000 setlinewidth stroke\nnewpath 453.820099 386.398501 moveto 454.326662 371.415627 lineto 1.500000 setlinewidth stroke\nnewpath 88.113984 383.638165 moveto 105.634220 382.823208 lineto 1.500000 setlinewidth stroke\nnewpath 225.624005 392.563789 moveto 211.857320 392.787623 lineto 1.500000 setlinewidth stroke\nnewpath 62.346586 404.899777 moveto 49.555360 400.810796 lineto 1.500000 setlinewidth stroke\nnewpath 460.641118 445.570022 moveto 408.119470 447.472307 lineto 1.500000 setlinewidth stroke\nnewpath 32.114157 81.255887 moveto 4.020168 87.197125 lineto 1.500000 setlinewidth stroke\nnewpath 350.302735 36.609514 moveto 256.669285 49.928845 lineto 1.500000 setlinewidth stroke\nnewpath 421.966069 483.511538 moveto 461.946711 481.807376 lineto 1.500000 setlinewidth stroke\nnewpath 129.453086 478.275785 moveto 149.464944 475.874606 lineto 1.500000 setlinewidth stroke\nnewpath 151.960634 280.982370 moveto 112.851686 284.888582 lineto 1.500000 setlinewidth stroke\nnewpath 129.400486 203.257632 moveto 109.353394 203.529021 lineto 1.500000 setlinewidth stroke\nnewpath 455.578760 370.633154 moveto 479.469681 369.144017 lineto 1.500000 setlinewidth stroke\nnewpath 46.205567 339.143549 moveto 64.055075 300.555218 lineto 1.500000 setlinewidth stroke\nnewpath 190.646608 453.308588 moveto 146.861333 454.692642 lineto 1.500000 setlinewidth stroke\nnewpath 204.454163 378.572164 moveto 227.005579 376.687350 lineto 1.500000 setlinewidth stroke\nnewpath 461.866721 484.786020 moveto 423.139823 485.731889 lineto 1.500000 setlinewidth stroke\nnewpath 453.212818 471.741539 moveto 494.476852 469.499876 lineto 1.500000 setlinewidth stroke\nnewpath 477.426352 319.954966 moveto 492.912716 256.323335 lineto 1.500000 setlinewidth stroke\nnewpath 325.794712 391.469623 moveto 326.718149 377.614546 lineto 1.500000 setlinewidth stroke\nnewpath 479.313251 386.457094 moveto 455.497646 387.716265 lineto 1.500000 setlinewidth stroke\nnewpath 227.407290 377.579614 moveto 226.462509 392.519869 lineto 1.500000 setlinewidth stroke\nnewpath 350.883550 375.097838 moveto 350.472920 390.086589 lineto 1.500000 setlinewidth stroke\nnewpath 18.257506 412.516374 moveto 0.560668 414.570856 lineto 1.500000 setlinewidth stroke\nnewpath 206.372770 47.223601 moveto 200.829459 71.421837 lineto 1.500000 setlinewidth stroke\nnewpath 335.694580 449.573404 moveto 369.606124 446.194873 lineto 1.500000 setlinewidth stroke\nnewpath 29.371380 438.834823 moveto 8.180792 440.744195 lineto 1.500000 setlinewidth stroke\nnewpath 45.217461 406.170714 moveto 56.739988 383.183907 lineto 1.500000 setlinewidth stroke\nnewpath 253.340273 452.967003 moveto 278.389335 449.579830 lineto 1.500000 setlinewidth stroke\nnewpath 431.848879 342.161551 moveto 401.733189 343.858942 lineto 1.500000 setlinewidth stroke\nnewpath 43.425276 181.143174 moveto 35.516449 213.543380 lineto 1.500000 setlinewidth stroke\nnewpath 108.044574 382.381890 moveto 105.311392 397.339280 lineto 1.500000 setlinewidth stroke\nnewpath 249.350404 336.109851 moveto 277.190608 333.527333 lineto 1.500000 setlinewidth stroke\nnewpath 328.075196 375.760737 moveto 350.730312 373.923873 lineto 1.500000 setlinewidth stroke\nnewpath 18.525858 511.573816 moveto 24.735488 499.053794 lineto 1.500000 setlinewidth stroke\nnewpath 246.244878 356.614163 moveto 248.802003 336.621469 lineto 1.500000 setlinewidth stroke\nnewpath 427.869552 234.532747 moveto 410.975793 227.971751 lineto 1.500000 setlinewidth stroke\nnewpath 398.134242 497.837133 moveto 429.433750 496.473438 lineto 1.500000 setlinewidth stroke\nnewpath 246.683107 56.928003 moveto 219.201307 64.494107 lineto 1.500000 setlinewidth stroke\nnewpath 176.089103 89.826466 moveto 169.333992 107.609423 lineto 1.500000 setlinewidth stroke\nnewpath 348.324771 295.823580 moveto 350.485679 306.403456 lineto 1.500000 setlinewidth stroke\nnewpath 452.900719 249.213735 moveto 394.006643 255.325359 lineto 1.500000 setlinewidth stroke\nnewpath 365.238056 249.006028 moveto 372.084940 203.906873 lineto 1.500000 setlinewidth stroke\nnewpath 39.495839 373.091246 moveto 46.797720 362.571360 lineto 1.500000 setlinewidth stroke\nnewpath 49.039987 437.651941 moveto 61.520660 408.722134 lineto 1.500000 setlinewidth stroke\nnewpath 121.888190 73.834984 moveto 114.379933 71.360035 lineto 1.500000 setlinewidth stroke\nnewpath 172.835900 108.781820 moveto 177.568496 94.098522 lineto 1.500000 setlinewidth stroke\nnewpath 509.618479 8.570647 moveto 475.552093 17.341835 lineto 1.500000 setlinewidth stroke\nnewpath 84.327486 397.872805 moveto 87.147464 384.188746 lineto 1.500000 setlinewidth stroke\nnewpath 169.405751 487.301562 moveto 201.911433 486.222771 lineto 1.500000 setlinewidth stroke\nnewpath 344.833624 305.215772 moveto 342.819955 287.659989 lineto 1.500000 setlinewidth stroke\nnewpath 442.766424 61.625929 moveto 450.516605 72.700855 lineto 1.500000 setlinewidth stroke\nnewpath 355.565684 196.353809 moveto 364.080400 172.519754 lineto 1.500000 setlinewidth stroke\nnewpath 351.934340 486.244031 moveto 389.410827 485.305310 lineto 1.500000 setlinewidth stroke\nnewpath 496.897016 471.641476 moveto 479.413083 473.085954 lineto 1.500000 setlinewidth stroke\nnewpath 0.633644 457.020121 moveto 34.411079 456.567512 lineto 1.500000 setlinewidth stroke\nnewpath 2.996378 184.109044 moveto 42.069625 179.162297 lineto 1.500000 setlinewidth stroke\nnewpath 169.371594 88.864141 moveto 156.496274 92.902703 lineto 1.500000 setlinewidth stroke\nnewpath 310.586433 245.220095 moveto 294.455011 238.677717 lineto 1.500000 setlinewidth stroke\nnewpath 349.301186 390.404290 moveto 326.741529 392.119755 lineto 1.500000 setlinewidth stroke\nnewpath 133.136094 363.997108 moveto 109.017347 366.188348 lineto 1.500000 setlinewidth stroke\nnewpath 254.109359 50.188348 moveto 222.751823 57.207974 lineto 1.500000 setlinewidth stroke\nnewpath 321.406759 320.364156 moveto 333.316419 281.433559 lineto 1.500000 setlinewidth stroke\nnewpath 284.366747 260.829888 moveto 256.873049 261.246134 lineto 1.500000 setlinewidth stroke\nnewpath 106.764309 194.292743 moveto 174.234571 185.319146 lineto 1.500000 setlinewidth stroke\nnewpath 339.395916 288.871768 moveto 342.719927 310.380776 lineto 1.500000 setlinewidth stroke\nnewpath 41.911574 451.954699 moveto 48.327150 437.716084 lineto 1.500000 setlinewidth stroke\nnewpath 283.365831 257.604286 moveto 282.075951 242.607716 lineto 1.500000 setlinewidth stroke\nnewpath 274.352037 353.582898 moveto 246.630292 355.762194 lineto 1.500000 setlinewidth stroke\nnewpath 362.659723 306.989077 moveto 366.774935 320.156274 lineto 1.500000 setlinewidth stroke\nnewpath 428.134504 499.101032 moveto 399.382780 500.310018 lineto 1.500000 setlinewidth stroke\nnewpath 189.109111 17.682152 moveto 178.306095 15.484706 lineto 1.500000 setlinewidth stroke\nnewpath 104.359670 397.336686 moveto 84.283501 398.404159 lineto 1.500000 setlinewidth stroke\nnewpath 505.126517 247.670462 moveto 505.894641 213.852732 lineto 1.500000 setlinewidth stroke\nnewpath 154.999632 93.814789 moveto 129.233747 80.271917 lineto 1.500000 setlinewidth stroke\nnewpath 363.171642 450.185499 moveto 315.642871 451.877109 lineto 1.500000 setlinewidth stroke\nnewpath 369.258623 160.451274 moveto 403.256407 156.168030 lineto 1.500000 setlinewidth stroke\nnewpath 453.182331 496.471301 moveto 486.924373 495.034438 lineto 1.500000 setlinewidth stroke\nnewpath 260.627491 368.941456 moveto 221.885083 370.393940 lineto 1.500000 setlinewidth stroke\nnewpath 371.707029 141.696856 moveto 388.261380 86.043747 lineto 1.500000 setlinewidth stroke\nnewpath 91.135701 220.378308 moveto 105.541817 191.333741 lineto 1.500000 setlinewidth stroke\nnewpath 330.678520 493.081171 moveto 351.929315 490.587945 lineto 1.500000 setlinewidth stroke\nnewpath 480.302377 370.114812 moveto 480.205104 385.130378 lineto 1.500000 setlinewidth stroke\nnewpath 14.421376 488.185990 moveto 0.559439 489.331938 lineto 1.500000 setlinewidth stroke\nnewpath 111.601542 175.545259 moveto 123.994127 146.749033 lineto 1.500000 setlinewidth stroke\nnewpath 294.514109 500.091709 moveto 320.707543 497.096960 lineto 1.500000 setlinewidth stroke\nnewpath 355.890985 40.873036 moveto 348.942537 37.191140 lineto 1.500000 setlinewidth stroke\nnewpath 353.104281 252.621493 moveto 356.705833 231.346363 lineto 1.500000 setlinewidth stroke\nnewpath 28.151838 274.968945 moveto 9.105274 271.693390 lineto 1.500000 setlinewidth stroke\nnewpath 229.410862 494.092763 moveto 244.415633 491.621735 lineto 1.500000 setlinewidth stroke\nnewpath 0.529073 229.266887 moveto 32.083426 225.739469 lineto 1.500000 setlinewidth stroke\nnewpath 31.876890 17.061774 moveto 5.878110 74.675141 lineto 1.500000 setlinewidth stroke\nnewpath 53.538549 375.706604 moveto 47.685556 372.085250 lineto 1.500000 setlinewidth stroke\nnewpath 194.205052 80.191093 moveto 199.506846 93.823724 lineto 1.500000 setlinewidth stroke\nnewpath 379.315714 172.742470 moveto 367.835549 166.948520 lineto 1.500000 setlinewidth stroke\nnewpath 476.264587 19.358183 moveto 448.383295 56.264460 lineto 1.500000 setlinewidth stroke\nnewpath 113.153085 281.713723 moveto 163.120503 277.570764 lineto 1.500000 setlinewidth stroke\nnewpath 350.648351 44.423420 moveto 333.126157 43.840231 lineto 1.500000 setlinewidth stroke\nnewpath 391.843385 491.144340 moveto 413.374216 488.193252 lineto 1.500000 setlinewidth stroke\nnewpath 186.933246 246.931189 moveto 196.824766 245.895315 lineto 1.500000 setlinewidth stroke\nnewpath 289.491922 487.200911 moveto 325.697471 485.161700 lineto 1.500000 setlinewidth stroke\nnewpath 35.637980 207.754140 moveto 0.366122 211.299482 lineto 1.500000 setlinewidth stroke\nnewpath 109.015978 494.979121 moveto 115.568756 478.852147 lineto 1.500000 setlinewidth stroke\nnewpath 310.756543 477.364754 moveto 353.256773 474.868666 lineto 1.500000 setlinewidth stroke\nnewpath 0.498982 266.632486 moveto 48.182540 260.578183 lineto 1.500000 setlinewidth stroke\nnewpath 293.317471 237.385609 moveto 318.137550 235.272398 lineto 1.500000 setlinewidth stroke\nnewpath 404.168898 156.086759 moveto 447.071086 150.338482 lineto 1.500000 setlinewidth stroke\nnewpath 48.198019 256.210030 moveto 33.804745 249.839271 lineto 1.500000 setlinewidth stroke\nnewpath 350.687175 493.390433 moveto 323.165693 495.625973 lineto 1.500000 setlinewidth stroke\nnewpath 425.678600 357.660754 moveto 373.165640 359.849876 lineto 1.500000 setlinewidth stroke\nnewpath 457.111719 58.518955 moveto 451.342462 74.937878 lineto 1.500000 setlinewidth stroke\nnewpath 104.793695 190.870832 moveto 111.581106 175.684948 lineto 1.500000 setlinewidth stroke\nnewpath 231.812366 243.451438 moveto 250.703798 240.657867 lineto 1.500000 setlinewidth stroke\nnewpath 380.808612 476.262835 moveto 424.492554 472.903760 lineto 1.500000 setlinewidth stroke\nnewpath 174.720731 76.019737 moveto 170.056191 87.892622 lineto 1.500000 setlinewidth stroke\nnewpath 217.866308 66.243596 moveto 212.290311 77.220906 lineto 1.500000 setlinewidth stroke\nnewpath 230.388600 244.866362 moveto 233.206521 228.671681 lineto 1.500000 setlinewidth stroke\nnewpath 369.077836 203.834460 moveto 366.186141 225.031024 lineto 1.500000 setlinewidth stroke\nnewpath 464.384146 178.965963 moveto 498.542915 175.531353 lineto 1.500000 setlinewidth stroke\nnewpath 365.660804 502.993653 moveto 396.895522 502.302755 lineto 1.500000 setlinewidth stroke\nnewpath 410.680304 226.870013 moveto 490.797513 217.919117 lineto 1.500000 setlinewidth stroke\nnewpath 54.298768 391.031389 moveto 60.940456 385.504055 lineto 1.500000 setlinewidth stroke\nnewpath 76.806900 321.360859 moveto 78.900908 311.276555 lineto 1.500000 setlinewidth stroke\nnewpath 100.729051 468.628310 moveto 84.267199 470.335535 lineto 1.500000 setlinewidth stroke\nnewpath 405.286079 55.793187 moveto 394.168044 62.269726 lineto 1.500000 setlinewidth stroke\nnewpath 498.938042 216.253391 moveto 500.497341 242.706208 lineto 1.500000 setlinewidth stroke\nnewpath 246.936403 465.747215 moveto 225.647021 467.848150 lineto 1.500000 setlinewidth stroke\nnewpath 106.834003 254.695592 moveto 143.111350 251.232030 lineto 1.500000 setlinewidth stroke\nnewpath 145.702630 153.582554 moveto 134.573226 150.628247 lineto 1.500000 setlinewidth stroke\nnewpath 176.051898 179.895368 moveto 162.689009 169.115904 lineto 1.500000 setlinewidth stroke\nnewpath 214.112891 250.069835 moveto 212.495319 257.755555 lineto 1.500000 setlinewidth stroke\nnewpath 279.230909 230.119728 moveto 279.126898 257.624062 lineto 1.500000 setlinewidth stroke\nnewpath 31.413079 460.544347 moveto 16.180654 489.170670 lineto 1.500000 setlinewidth stroke\nnewpath 195.775680 246.157109 moveto 203.160950 245.669484 lineto 1.500000 setlinewidth stroke\nnewpath 214.361376 466.240747 moveto 249.506845 462.674240 lineto 1.500000 setlinewidth stroke\nnewpath 343.205783 206.095424 moveto 249.377596 213.906187 lineto 1.500000 setlinewidth stroke\nnewpath 143.365348 245.965333 moveto 132.813805 239.774832 lineto 1.500000 setlinewidth stroke\nnewpath 191.006334 44.356556 moveto 181.919833 75.138234 lineto 1.500000 setlinewidth stroke\nnewpath 201.961217 254.896000 moveto 185.667701 248.761583 lineto 1.500000 setlinewidth stroke\nnewpath 354.051180 256.267671 moveto 348.952971 271.649427 lineto 1.500000 setlinewidth stroke\nnewpath 408.444666 28.826396 moveto 407.066795 55.200325 lineto 1.500000 setlinewidth stroke\nnewpath 173.116727 162.697408 moveto 156.794171 160.832424 lineto 1.500000 setlinewidth stroke\nnewpath 165.628222 165.116892 moveto 183.315601 172.145345 lineto 1.500000 setlinewidth stroke\nnewpath 331.936485 44.273503 moveto 248.061683 57.214626 lineto 1.500000 setlinewidth stroke\nnewpath 388.125273 487.630085 moveto 375.594290 488.303804 lineto 1.500000 setlinewidth stroke\nnewpath 225.653682 486.290527 moveto 261.912485 485.398241 lineto 1.500000 setlinewidth stroke\nnewpath 492.988107 213.389217 moveto 481.094611 191.805016 lineto 1.500000 setlinewidth stroke\nnewpath 261.918245 479.246897 moveto 282.081662 476.902240 lineto 1.500000 setlinewidth stroke\nnewpath 203.089889 75.113545 moveto 227.114248 1.479557 lineto 1.500000 setlinewidth stroke\nnewpath 371.597054 216.889364 moveto 395.730266 229.930197 lineto 1.500000 setlinewidth stroke\nnewpath 401.294654 246.295891 moveto 399.821100 233.822300 lineto 1.500000 setlinewidth stroke\nnewpath 413.190261 231.239538 moveto 424.764846 236.815800 lineto 1.500000 setlinewidth stroke\nnewpath 108.388710 70.790650 moveto 99.294816 72.042523 lineto 1.500000 setlinewidth stroke\nnewpath 180.002423 58.955067 moveto 178.664124 27.655395 lineto 1.500000 setlinewidth stroke\nnewpath 32.901339 225.637393 moveto 54.857931 223.166669 lineto 1.500000 setlinewidth stroke\nnewpath 59.207593 340.687768 moveto 48.530556 337.511655 lineto 1.500000 setlinewidth stroke\nnewpath 124.548783 146.458058 moveto 139.285399 115.624451 lineto 1.500000 setlinewidth stroke\nnewpath 218.883099 11.217194 moveto 210.314543 37.926414 lineto 1.500000 setlinewidth stroke\nnewpath 36.822152 501.901100 moveto 64.448679 499.884248 lineto 1.500000 setlinewidth stroke\nnewpath 170.495828 270.135234 moveto 168.905550 250.063158 lineto 1.500000 setlinewidth stroke\nnewpath 443.645673 118.447665 moveto 428.962451 105.430374 lineto 1.500000 setlinewidth stroke\nnewpath 384.232856 59.106642 moveto 355.897007 41.718770 lineto 1.500000 setlinewidth stroke\nnewpath 149.159805 242.090842 moveto 164.295102 246.640781 lineto 1.500000 setlinewidth stroke\nnewpath 453.651684 142.364910 moveto 447.218659 129.338010 lineto 1.500000 setlinewidth stroke\nnewpath 63.964265 275.172559 moveto 61.931657 257.618440 lineto 1.500000 setlinewidth stroke\nnewpath 318.206578 235.095247 moveto 335.628712 233.930520 lineto 1.500000 setlinewidth stroke\nnewpath 267.343844 234.062660 moveto 276.637094 238.164065 lineto 1.500000 setlinewidth stroke\nnewpath 349.428930 498.177005 moveto 373.317285 495.843143 lineto 1.500000 setlinewidth stroke\nnewpath 441.516447 50.765331 moveto 433.884283 39.605719 lineto 1.500000 setlinewidth stroke\nnewpath 418.151797 502.435252 moveto 448.164219 501.676700 lineto 1.500000 setlinewidth stroke\nnewpath 463.127329 510.624434 moveto 440.621989 510.729376 lineto 1.500000 setlinewidth stroke\nnewpath 146.897513 479.205967 moveto 128.149236 480.481288 lineto 1.500000 setlinewidth stroke\nnewpath 118.941685 218.385850 moveto 143.325568 232.272826 lineto 1.500000 setlinewidth stroke\nnewpath 170.651802 2.552705 moveto 174.912861 77.806878 lineto 1.500000 setlinewidth stroke\nnewpath 140.671704 378.782745 moveto 84.362063 381.054305 lineto 1.500000 setlinewidth stroke\nnewpath 211.079091 484.980193 moveto 203.344104 488.158267 lineto 1.500000 setlinewidth stroke\nnewpath 209.392900 435.803317 moveto 163.142120 437.023790 lineto 1.500000 setlinewidth stroke\nnewpath 404.585196 2.459216 moveto 407.559390 28.655378 lineto 1.500000 setlinewidth stroke\nnewpath 62.368900 313.966723 moveto 64.628628 332.594232 lineto 1.500000 setlinewidth stroke\nnewpath 215.721371 77.420057 moveto 209.498834 87.699958 lineto 1.500000 setlinewidth stroke\nnewpath 410.644966 491.822301 moveto 378.153907 493.272595 lineto 1.500000 setlinewidth stroke\nnewpath 177.860484 278.822269 moveto 160.648302 275.019527 lineto 1.500000 setlinewidth stroke\nnewpath 190.420268 216.455630 moveto 254.452186 211.037122 lineto 1.500000 setlinewidth stroke\nnewpath 498.168996 16.524297 moveto 480.372643 21.768642 lineto 1.500000 setlinewidth stroke\nnewpath 266.930447 493.816611 moveto 298.170971 492.362967 lineto 1.500000 setlinewidth stroke\nnewpath 316.213806 351.760965 moveto 308.228518 363.942857 lineto 1.500000 setlinewidth stroke\nnewpath 12.817908 230.823020 moveto 40.005127 242.783970 lineto 1.500000 setlinewidth stroke\nnewpath 70.728690 490.169328 moveto 78.857900 471.153936 lineto 1.500000 setlinewidth stroke\nnewpath 97.442107 282.753687 moveto 100.924050 267.409212 lineto 1.500000 setlinewidth stroke\nnewpath 165.880858 483.435710 moveto 153.291019 481.528866 lineto 1.500000 setlinewidth stroke\nnewpath 63.205654 456.388068 moveto 49.193511 457.282822 lineto 1.500000 setlinewidth stroke\nnewpath 101.788326 267.290402 moveto 104.806543 255.233024 lineto 1.500000 setlinewidth stroke\nnewpath 315.637928 503.099476 moveto 344.400633 502.315791 lineto 1.500000 setlinewidth stroke\nnewpath 228.141109 405.670018 moveto 181.857650 407.037971 lineto 1.500000 setlinewidth stroke\nnewpath 291.477010 256.406827 moveto 290.666502 246.271718 lineto 1.500000 setlinewidth stroke\nnewpath 324.369299 487.544946 moveto 311.843805 488.436963 lineto 1.500000 setlinewidth stroke\nnewpath 485.630433 497.833440 moveto 455.618242 498.615714 lineto 1.500000 setlinewidth stroke\nnewpath 509.605902 280.612321 moveto 489.582630 278.315173 lineto 1.500000 setlinewidth stroke\nnewpath 177.374015 246.772856 moveto 188.566004 249.673280 lineto 1.500000 setlinewidth stroke\nnewpath 258.110982 429.580967 moveto 284.350636 430.101991 lineto 1.500000 setlinewidth stroke\nnewpath 325.652519 404.818225 moveto 303.098778 405.476237 lineto 1.500000 setlinewidth stroke\nnewpath 193.533012 58.870650 moveto 193.719718 76.381987 lineto 1.500000 setlinewidth stroke\nnewpath 436.025527 37.643935 moveto 436.918346 18.758858 lineto 1.500000 setlinewidth stroke\nnewpath 446.878057 504.291244 moveto 419.370360 504.493294 lineto 1.500000 setlinewidth stroke\nnewpath 245.190088 214.459073 moveto 268.851598 232.077911 lineto 1.500000 setlinewidth stroke\nnewpath 299.319077 402.058972 moveto 316.876687 402.566669 lineto 1.500000 setlinewidth stroke\nnewpath 369.046130 152.142723 moveto 372.053369 142.297663 lineto 1.500000 setlinewidth stroke\nnewpath 40.206787 248.000159 moveto 8.216876 239.767976 lineto 1.500000 setlinewidth stroke\nnewpath 132.355040 238.055417 moveto 117.756181 229.504693 lineto 1.500000 setlinewidth stroke\nnewpath 156.484047 164.078631 moveto 146.832148 156.154624 lineto 1.500000 setlinewidth stroke\nnewpath 157.316073 146.123449 moveto 174.606623 160.131970 lineto 1.500000 setlinewidth stroke\nnewpath 375.842982 253.017123 moveto 365.852756 250.478659 lineto 1.500000 setlinewidth stroke\nnewpath 396.604513 218.873415 moveto 396.450694 245.129837 lineto 1.500000 setlinewidth stroke\nnewpath 0.642291 486.567259 moveto 16.984944 485.097506 lineto 1.500000 setlinewidth stroke\nnewpath 64.372230 406.062504 moveto 90.642325 405.829659 lineto 1.500000 setlinewidth stroke\nnewpath 133.684762 401.087445 moveto 121.445276 430.466729 lineto 1.500000 setlinewidth stroke\nnewpath 395.400452 61.633352 moveto 383.353525 59.839930 lineto 1.500000 setlinewidth stroke\nnewpath 425.540448 397.294422 moveto 458.137088 398.564852 lineto 1.500000 setlinewidth stroke\nnewpath 41.899709 246.310493 moveto 55.815547 251.640875 lineto 1.500000 setlinewidth stroke\nnewpath 356.056772 231.336262 moveto 353.932967 207.664659 lineto 1.500000 setlinewidth stroke\nnewpath 504.293748 248.853002 moveto 501.685848 258.485359 lineto 1.500000 setlinewidth stroke\nnewpath 313.114186 448.499626 moveto 338.110365 448.808672 lineto 1.500000 setlinewidth stroke\nnewpath 143.382025 233.091529 moveto 157.477006 241.245170 lineto 1.500000 setlinewidth stroke\nnewpath 418.588857 19.149730 moveto 419.464219 13.688928 lineto 1.500000 setlinewidth stroke\nnewpath 478.861252 190.380571 moveto 420.265876 171.159207 lineto 1.500000 setlinewidth stroke\nnewpath 179.328823 403.391228 moveto 196.915613 404.451105 lineto 1.500000 setlinewidth stroke\nnewpath 291.552933 239.575830 moveto 306.783146 246.574879 lineto 1.500000 setlinewidth stroke\nnewpath 350.689819 477.683997 moveto 313.096307 479.545546 lineto 1.500000 setlinewidth stroke\nnewpath 220.852517 260.097877 moveto 222.797642 276.414026 lineto 1.500000 setlinewidth stroke\nnewpath 252.721943 236.866690 moveto 243.676709 229.451969 lineto 1.500000 setlinewidth stroke\nnewpath 496.897039 503.081761 moveto 468.153644 504.468655 lineto 1.500000 setlinewidth stroke\nnewpath 0.603673 493.558426 moveto 21.925325 492.122000 lineto 1.500000 setlinewidth stroke\nnewpath 160.488509 97.275855 moveto 173.026956 92.374203 lineto 1.500000 setlinewidth stroke\nnewpath 191.736754 256.336666 moveto 186.962945 273.552777 lineto 1.500000 setlinewidth stroke\nnewpath 394.375509 505.221858 moveto 366.876270 505.366497 lineto 1.500000 setlinewidth stroke\nnewpath 474.352938 492.203506 moveto 468.104026 492.285986 lineto 1.500000 setlinewidth stroke\nnewpath 497.324137 244.417470 moveto 464.542267 236.895978 lineto 1.500000 setlinewidth stroke\nnewpath 63.136909 448.678260 moveto 49.437102 447.849021 lineto 1.500000 setlinewidth stroke\nnewpath 170.673457 81.707842 moveto 144.255466 85.553946 lineto 1.500000 setlinewidth stroke\nnewpath 171.890684 201.236979 moveto 130.596007 201.819426 lineto 1.500000 setlinewidth stroke\nnewpath 244.343039 494.721458 moveto 226.755361 496.114422 lineto 1.500000 setlinewidth stroke\nnewpath 404.251084 443.959473 moveto 416.874383 445.131643 lineto 1.500000 setlinewidth stroke\nnewpath 194.221054 300.103838 moveto 211.960221 299.020659 lineto 1.500000 setlinewidth stroke\nnewpath 45.699621 364.161597 moveto 53.413071 344.742905 lineto 1.500000 setlinewidth stroke\nnewpath 73.381698 277.590069 moveto 70.998202 260.074216 lineto 1.500000 setlinewidth stroke\nnewpath 249.212802 226.752358 moveto 266.704842 234.270878 lineto 1.500000 setlinewidth stroke\nnewpath 492.479027 255.292628 moveto 468.004187 244.140131 lineto 1.500000 setlinewidth stroke\nnewpath 199.805568 71.339596 moveto 194.148442 2.540845 lineto 1.500000 setlinewidth stroke\nnewpath 216.883346 367.185936 moveto 256.882690 367.023953 lineto 1.500000 setlinewidth stroke\nnewpath 287.456984 228.870222 moveto 287.260252 256.377755 lineto 1.500000 setlinewidth stroke\nnewpath 421.914200 171.207441 moveto 380.582602 172.704230 lineto 1.500000 setlinewidth stroke\nnewpath 509.588612 15.222684 moveto 499.253867 16.860770 lineto 1.500000 setlinewidth stroke\nnewpath 183.988456 88.470159 moveto 190.104550 63.746253 lineto 1.500000 setlinewidth stroke\nnewpath 270.632849 500.721677 moveto 243.137606 501.083351 lineto 1.500000 setlinewidth stroke\nnewpath 475.514310 422.411456 moveto 490.609137 424.023538 lineto 1.500000 setlinewidth stroke\nnewpath 104.477450 225.955857 moveto 90.637697 222.573052 lineto 1.500000 setlinewidth stroke\nnewpath 179.041478 275.028866 moveto 176.679817 252.514355 lineto 1.500000 setlinewidth stroke\nnewpath 187.496702 2.514230 moveto 190.240894 17.916152 lineto 1.500000 setlinewidth stroke\nnewpath 210.029141 257.598507 moveto 209.622752 247.564340 lineto 1.500000 setlinewidth stroke\nnewpath 69.345239 250.121841 moveto 67.742726 265.217118 lineto 1.500000 setlinewidth stroke\nnewpath 459.318666 243.342481 moveto 389.308745 250.748706 lineto 1.500000 setlinewidth stroke\nnewpath 1.712044 94.377018 moveto 37.547416 16.780986 lineto 1.500000 setlinewidth stroke\nnewpath 108.734153 216.138878 moveto 105.447311 225.059530 lineto 1.500000 setlinewidth stroke\nnewpath 469.396151 501.812971 moveto 499.446799 500.361751 lineto 1.500000 setlinewidth stroke\nnewpath 8.200544 499.411057 moveto 24.479558 497.116939 lineto 1.500000 setlinewidth stroke\nnewpath 212.970213 275.433397 moveto 222.465228 280.199035 lineto 1.500000 setlinewidth stroke\nnewpath 335.670448 233.415209 moveto 345.637479 232.841970 lineto 1.500000 setlinewidth stroke\nnewpath 340.712938 305.919910 moveto 329.402188 303.734299 lineto 1.500000 setlinewidth stroke\nnewpath 417.957444 103.380125 moveto 403.763303 72.333179 lineto 1.500000 setlinewidth stroke\nnewpath 369.375516 498.881239 moveto 350.650317 500.430910 lineto 1.500000 setlinewidth stroke\nnewpath 464.433130 237.270453 moveto 428.173643 239.624309 lineto 1.500000 setlinewidth stroke\nnewpath 177.717277 17.603796 moveto 177.339108 2.581848 lineto 1.500000 setlinewidth stroke\nnewpath 259.385357 487.817950 moveto 246.854365 488.490580 lineto 1.500000 setlinewidth stroke\nnewpath 245.656558 267.906795 moveto 279.403275 264.127475 lineto 1.500000 setlinewidth stroke\nnewpath 426.048239 13.751602 moveto 427.810557 37.648189 lineto 1.500000 setlinewidth stroke\nnewpath 148.284290 87.591424 moveto 169.336971 84.834587 lineto 1.500000 setlinewidth stroke\nnewpath 182.192929 205.231808 moveto 171.942808 202.381179 lineto 1.500000 setlinewidth stroke\nnewpath 344.385814 247.787676 moveto 311.780612 249.955101 lineto 1.500000 setlinewidth stroke\nnewpath 359.787326 212.969616 moveto 362.871845 198.090792 lineto 1.500000 setlinewidth stroke\nnewpath 146.883274 266.644933 moveto 124.369671 266.561402 lineto 1.500000 setlinewidth stroke\nnewpath 388.951881 85.992311 moveto 391.187592 76.217771 lineto 1.500000 setlinewidth stroke\nnewpath 190.893366 27.611989 moveto 191.742724 45.131413 lineto 1.500000 setlinewidth stroke\nnewpath 422.874357 239.495164 moveto 412.523768 243.614176 lineto 1.500000 setlinewidth stroke\nnewpath 364.357656 427.034490 moveto 390.628196 427.273106 lineto 1.500000 setlinewidth stroke\nnewpath 494.364547 426.534157 moveto 478.102594 425.466160 lineto 1.500000 setlinewidth stroke\nnewpath 78.430220 227.594400 moveto 81.308799 256.306445 lineto 1.500000 setlinewidth stroke\nnewpath 85.008580 273.805163 moveto 83.632294 261.319083 lineto 1.500000 setlinewidth stroke\nnewpath 203.306343 279.487717 moveto 198.022776 277.984239 lineto 1.500000 setlinewidth stroke\nnewpath 281.907316 504.213553 moveto 296.890121 502.783415 lineto 1.500000 setlinewidth stroke\nnewpath 312.922246 263.088601 moveto 333.972673 272.294927 lineto 1.500000 setlinewidth stroke\nnewpath 370.090047 201.539851 moveto 376.551673 173.512277 lineto 1.500000 setlinewidth stroke\nnewpath 499.133034 174.689873 moveto 509.634463 173.181982 lineto 1.500000 setlinewidth stroke\nnewpath 55.642851 274.044041 moveto 29.358734 273.609981 lineto 1.500000 setlinewidth stroke\nnewpath 69.185803 306.593924 moveto 80.727335 308.080467 lineto 1.500000 setlinewidth stroke\nnewpath 204.774440 2.381307 moveto 197.255167 28.625785 lineto 1.500000 setlinewidth stroke\nnewpath 427.713383 106.260662 moveto 418.073618 102.766763 lineto 1.500000 setlinewidth stroke\nnewpath 438.077344 458.183529 moveto 449.457802 459.154564 lineto 1.500000 setlinewidth stroke\nnewpath 123.302102 266.590413 moveto 102.845546 269.062683 lineto 1.500000 setlinewidth stroke\nnewpath 167.238904 270.513137 moveto 150.411581 267.613546 lineto 1.500000 setlinewidth stroke\nnewpath 258.169773 262.491199 moveto 245.800027 258.351949 lineto 1.500000 setlinewidth stroke\nnewpath 456.945869 54.161963 moveto 471.021505 36.927921 lineto 1.500000 setlinewidth stroke\nnewpath 56.844474 350.328411 moveto 65.643100 350.513207 lineto 1.500000 setlinewidth stroke\nnewpath 159.436757 275.829162 moveto 109.383243 280.218991 lineto 1.500000 setlinewidth stroke\nnewpath 425.637193 248.994426 moveto 454.343206 246.063591 lineto 1.500000 setlinewidth stroke\nnewpath 385.668650 430.584809 moveto 365.591813 429.475775 lineto 1.500000 setlinewidth stroke\nnewpath 417.230416 40.283794 moveto 416.084912 24.813280 lineto 1.500000 setlinewidth stroke\nnewpath 490.527963 423.385469 moveto 504.366390 424.053391 lineto 1.500000 setlinewidth stroke\nnewpath 493.134436 180.123594 moveto 495.794452 197.972324 lineto 1.500000 setlinewidth stroke\nnewpath 211.898992 307.313993 moveto 191.848205 307.826297 lineto 1.500000 setlinewidth stroke\nnewpath 246.622792 258.989598 moveto 229.284125 257.317084 lineto 1.500000 setlinewidth stroke\nnewpath 347.599592 202.079236 moveto 354.590617 195.348971 lineto 1.500000 setlinewidth stroke\nnewpath 53.123525 438.921151 moveto 63.153233 439.241756 lineto 1.500000 setlinewidth stroke\nnewpath 61.499662 312.051653 moveto 69.343177 306.916951 lineto 1.500000 setlinewidth stroke\nnewpath 416.875000 511.375000 moveto 394.375000 511.375000 lineto 1.500000 setlinewidth stroke\nnewpath 19.426941 495.008433 moveto 3.096670 495.756783 lineto 1.500000 setlinewidth stroke\nnewpath 29.855908 471.615577 moveto 34.857954 461.616600 lineto 1.500000 setlinewidth stroke\nnewpath 171.453769 112.863025 moveto 164.820107 101.123483 lineto 1.500000 setlinewidth stroke\nnewpath 496.943482 303.458804 moveto 484.323284 304.495323 lineto 1.500000 setlinewidth stroke\nnewpath 54.722254 289.737220 moveto 44.645206 287.600610 lineto 1.500000 setlinewidth stroke\nnewpath 79.051400 256.409225 moveto 76.002901 227.585032 lineto 1.500000 setlinewidth stroke\nnewpath 437.492592 17.685435 moveto 437.982716 2.539496 lineto 1.500000 setlinewidth stroke\nnewpath 172.804972 251.277442 moveto 174.791335 270.212455 lineto 1.500000 setlinewidth stroke\nnewpath 242.030241 268.996670 moveto 231.073519 282.976527 lineto 1.500000 setlinewidth stroke\nnewpath 110.625719 76.349323 moveto 100.598579 76.068551 lineto 1.500000 setlinewidth stroke\nnewpath 116.890199 510.629510 moveto 96.870711 511.232627 lineto 1.500000 setlinewidth stroke\nnewpath 369.318245 356.419819 moveto 394.389408 356.978960 lineto 1.500000 setlinewidth stroke\nnewpath 79.610425 280.025869 moveto 74.334818 279.105269 lineto 1.500000 setlinewidth stroke\nnewpath 80.616631 377.905970 moveto 105.631670 378.651083 lineto 1.500000 setlinewidth stroke\nnewpath 104.639413 253.956704 moveto 109.658834 237.712705 lineto 1.500000 setlinewidth stroke\nnewpath 199.320274 267.724377 moveto 207.618770 272.294267 lineto 1.500000 setlinewidth stroke\nnewpath 58.622719 250.163723 moveto 59.848591 273.979306 lineto 1.500000 setlinewidth stroke\nnewpath 232.751653 269.327457 moveto 226.342556 281.745344 lineto 1.500000 setlinewidth stroke\nnewpath 432.407320 17.689379 moveto 431.052533 2.586648 lineto 1.500000 setlinewidth stroke\nnewpath 295.627701 495.189309 moveto 271.867110 496.187113 lineto 1.500000 setlinewidth stroke\nnewpath 323.690080 321.531958 moveto 315.739168 350.156712 lineto 1.500000 setlinewidth stroke\nnewpath 217.916823 247.651761 moveto 219.517891 260.106631 lineto 1.500000 setlinewidth stroke\nnewpath 253.437435 396.474529 moveto 261.950504 369.750854 lineto 1.500000 setlinewidth stroke\nnewpath 461.859077 33.774766 moveto 438.112621 37.547077 lineto 1.500000 setlinewidth stroke\nnewpath 166.063226 240.129765 moveto 166.232038 268.886112 lineto 1.500000 setlinewidth stroke\nnewpath 426.966803 2.578917 moveto 427.314256 12.695774 lineto 1.500000 setlinewidth stroke\nnewpath 385.671197 85.067623 moveto 376.698994 77.843598 lineto 1.500000 setlinewidth stroke\nnewpath 416.949825 476.532897 moveto 383.096147 478.332098 lineto 1.500000 setlinewidth stroke\nnewpath 506.875205 510.655385 moveto 489.374850 510.650397 lineto 1.500000 setlinewidth stroke\nnewpath 138.167688 114.555552 moveto 146.521022 98.688644 lineto 1.500000 setlinewidth stroke\nnewpath 167.039436 278.203663 moveto 152.673456 282.285985 lineto 1.500000 setlinewidth stroke\nnewpath 177.826016 252.220027 moveto 188.285695 255.920824 lineto 1.500000 setlinewidth stroke\nnewpath 249.606370 264.813188 moveto 235.482304 268.296377 lineto 1.500000 setlinewidth stroke\nnewpath 175.035574 90.418188 moveto 180.493365 78.121372 lineto 1.500000 setlinewidth stroke\nnewpath 197.982750 404.062905 moveto 208.299929 402.681087 lineto 1.500000 setlinewidth stroke\nnewpath 255.627550 224.563598 moveto 243.122130 224.506796 lineto 1.500000 setlinewidth stroke\nnewpath 17.596374 21.109543 moveto 0.035885 56.079167 lineto 1.500000 setlinewidth stroke\nnewpath 214.270946 324.683654 moveto 203.054972 327.327976 lineto 1.500000 setlinewidth stroke\nnewpath 243.129840 499.039200 moveto 269.393866 498.265074 lineto 1.500000 setlinewidth stroke\nnewpath 6.640064 231.073849 moveto 1.717464 255.346556 lineto 1.500000 setlinewidth stroke\nnewpath 119.473090 428.917258 moveto 128.760061 407.360080 lineto 1.500000 setlinewidth stroke\nnewpath 135.706954 237.363529 moveto 148.159036 241.266410 lineto 1.500000 setlinewidth stroke\nnewpath 195.619813 267.290286 moveto 193.503648 275.225972 lineto 1.500000 setlinewidth stroke\nnewpath 29.452973 511.045966 moveto 48.174606 509.460907 lineto 1.500000 setlinewidth stroke\nnewpath 74.458131 312.613017 moveto 76.450668 326.436165 lineto 1.500000 setlinewidth stroke\nnewpath 106.904335 455.791276 moveto 73.109775 457.279212 lineto 1.500000 setlinewidth stroke\nnewpath 283.126253 432.496986 moveto 260.616176 432.276698 lineto 1.500000 setlinewidth stroke\nnewpath 391.342230 75.805526 moveto 394.950323 64.510196 lineto 1.500000 setlinewidth stroke\nnewpath 394.391355 510.449842 moveto 416.897240 509.316741 lineto 1.500000 setlinewidth stroke\nnewpath -0.248520 68.453830 moveto 23.809101 18.557532 lineto 1.500000 setlinewidth stroke\nnewpath 378.759178 175.016859 moveto 373.248742 206.396730 lineto 1.500000 setlinewidth stroke\nnewpath 412.871578 23.902590 moveto 410.541294 2.498027 lineto 1.500000 setlinewidth stroke\nnewpath 201.474836 489.948532 moveto 191.797914 511.892242 lineto 1.500000 setlinewidth stroke\nnewpath 204.483029 226.357420 moveto 206.990027 241.763111 lineto 1.500000 setlinewidth stroke\nnewpath 345.693276 230.136857 moveto 345.856182 246.372680 lineto 1.500000 setlinewidth stroke\nnewpath 465.697913 246.239095 moveto 483.973291 256.043844 lineto 1.500000 setlinewidth stroke\nnewpath 46.921997 342.649468 moveto 28.075583 378.849272 lineto 1.500000 setlinewidth stroke\nnewpath 179.521575 76.381511 moveto 180.246940 60.052678 lineto 1.500000 setlinewidth stroke\nnewpath 330.738863 276.186912 moveto 320.098128 269.745330 lineto 1.500000 setlinewidth stroke\nnewpath 509.383651 484.798993 moveto 490.613698 484.300909 lineto 1.500000 setlinewidth stroke\nnewpath 42.331436 374.741147 moveto 26.273530 407.938699 lineto 1.500000 setlinewidth stroke\nnewpath 77.786746 326.414167 moveto 78.803047 335.191227 lineto 1.500000 setlinewidth stroke\nnewpath -1.017931 19.178092 moveto 55.054891 6.377623 lineto 1.500000 setlinewidth stroke\nnewpath 204.870715 248.780768 moveto 207.065469 260.326410 lineto 1.500000 setlinewidth stroke\nnewpath 363.247960 317.708129 moveto 323.910270 321.336402 lineto 1.500000 setlinewidth stroke\nnewpath 415.214637 5.119290 moveto 414.970917 22.633293 lineto 1.500000 setlinewidth stroke\nnewpath 150.624834 469.117989 moveto 131.874843 469.105198 lineto 1.500000 setlinewidth stroke\nnewpath 196.891135 489.434572 moveto 164.379678 488.674805 lineto 1.500000 setlinewidth stroke\nnewpath 216.948461 235.113935 moveto 218.633148 246.298459 lineto 1.500000 setlinewidth stroke\nnewpath 43.139919 494.147224 moveto 70.694170 492.637133 lineto 1.500000 setlinewidth stroke\nnewpath 54.500439 7.100052 moveto 92.007923 4.717886 lineto 1.500000 setlinewidth stroke\nnewpath 439.390016 508.576744 moveto 464.383794 508.182417 lineto 1.500000 setlinewidth stroke\nnewpath 125.659163 504.607463 moveto 143.179351 503.790296 lineto 1.500000 setlinewidth stroke\nnewpath 225.621919 452.237882 moveto 253.126032 452.336091 lineto 1.500000 setlinewidth stroke\nnewpath 197.996882 285.486545 moveto 182.309119 279.927392 lineto 1.500000 setlinewidth stroke\nnewpath 143.149516 235.659072 moveto 130.578648 235.228600 lineto 1.500000 setlinewidth stroke\nnewpath 232.400961 221.504400 moveto 227.547257 241.232861 lineto 1.500000 setlinewidth stroke\nnewpath 34.444759 253.263073 moveto 0.553211 256.968362 lineto 1.500000 setlinewidth stroke\nnewpath 49.311032 362.865584 moveto 64.251858 366.838138 lineto 1.500000 setlinewidth stroke\nnewpath 190.617635 274.169499 moveto 192.433523 266.507367 lineto 1.500000 setlinewidth stroke\nnewpath 88.443410 255.204414 moveto 85.877427 225.103482 lineto 1.500000 setlinewidth stroke\nnewpath 78.121460 502.687185 moveto 101.874659 502.751273 lineto 1.500000 setlinewidth stroke\nnewpath 131.764034 145.314975 moveto 151.935545 143.203364 lineto 1.500000 setlinewidth stroke\nnewpath 218.102409 468.054805 moveto 205.571327 467.396158 lineto 1.500000 setlinewidth stroke\nnewpath 240.986370 32.387699 moveto 229.944108 15.572120 lineto 1.500000 setlinewidth stroke\nnewpath 314.310736 346.358564 moveto 320.918982 320.519873 lineto 1.500000 setlinewidth stroke\nnewpath 20.697483 87.858630 moveto 5.245725 92.652511 lineto 1.500000 setlinewidth stroke\nnewpath 278.052957 463.177725 moveto 289.435435 464.661328 lineto 1.500000 setlinewidth stroke\nnewpath 17.287331 482.828621 moveto 28.670788 459.777239 lineto 1.500000 setlinewidth stroke\nnewpath 358.692989 230.119042 moveto 358.876824 247.643339 lineto 1.500000 setlinewidth stroke\nnewpath 376.749297 257.783779 moveto 369.718519 266.647483 lineto 1.500000 setlinewidth stroke\nnewpath 490.615544 481.975720 moveto 509.380571 482.271100 lineto 1.500000 setlinewidth stroke\nnewpath 71.932595 455.019037 moveto 105.722813 453.317922 lineto 1.500000 setlinewidth stroke\nnewpath 226.745906 216.350284 moveto 222.457824 238.747264 lineto 1.500000 setlinewidth stroke\nnewpath 316.819659 511.009531 moveto 329.594580 509.075085 lineto 1.500000 setlinewidth stroke\nnewpath 410.987995 59.840873 moveto 414.125776 50.045168 lineto 1.500000 setlinewidth stroke\nnewpath 66.893967 495.566878 moveto 44.381789 496.533158 lineto 1.500000 setlinewidth stroke\nnewpath 106.850590 378.548894 moveto 131.897388 376.674102 lineto 1.500000 setlinewidth stroke\nnewpath 433.926168 2.597891 moveto 434.519060 20.120126 lineto 1.500000 setlinewidth stroke\nnewpath 26.870479 459.306568 moveto 0.610265 459.031443 lineto 1.500000 setlinewidth stroke\nnewpath 81.974765 340.078169 moveto 80.545919 375.172673 lineto 1.500000 setlinewidth stroke\nnewpath 344.446768 207.615931 moveto 347.129112 228.842889 lineto 1.500000 setlinewidth stroke\nnewpath 351.491639 239.995757 moveto 350.387079 253.955083 lineto 1.500000 setlinewidth stroke\nnewpath 437.184643 66.759676 moveto 430.949735 71.778426 lineto 1.500000 setlinewidth stroke\nnewpath 88.162071 225.121680 moveto 91.523977 262.656440 lineto 1.500000 setlinewidth stroke\nnewpath 249.364557 455.401768 moveto 228.097670 454.599335 lineto 1.500000 setlinewidth stroke\nnewpath 81.457615 255.073485 moveto 79.596517 270.152341 lineto 1.500000 setlinewidth stroke\nnewpath 464.377050 491.567023 moveto 439.366557 491.833965 lineto 1.500000 setlinewidth stroke\nnewpath 68.015436 266.166912 moveto 69.902107 276.506902 lineto 1.500000 setlinewidth stroke\nnewpath 99.401555 76.554838 moveto 21.748923 88.021176 lineto 1.500000 setlinewidth stroke\nnewpath 81.882830 498.359348 moveto 108.143172 498.079363 lineto 1.500000 setlinewidth stroke\nnewpath 349.403585 510.554241 moveto 370.725512 509.134340 lineto 1.500000 setlinewidth stroke\nnewpath 24.922470 405.371612 moveto 39.412226 373.204840 lineto 1.500000 setlinewidth stroke\nnewpath 113.923185 227.827352 moveto 107.590600 252.806416 lineto 1.500000 setlinewidth stroke\nnewpath 203.108476 480.587563 moveto 178.095742 479.694048 lineto 1.500000 setlinewidth stroke\nnewpath 314.397133 466.140291 moveto 279.386521 466.903514 lineto 1.500000 setlinewidth stroke\nnewpath 33.049730 431.898817 moveto 44.421636 406.395795 lineto 1.500000 setlinewidth stroke\nnewpath 200.495338 32.583806 moveto 210.298553 1.727036 lineto 1.500000 setlinewidth stroke\nnewpath 476.599453 254.773100 moveto 467.109278 251.861410 lineto 1.500000 setlinewidth stroke\nnewpath 61.890042 510.368064 moveto 81.967861 509.125567 lineto 1.500000 setlinewidth stroke\nnewpath 100.483780 4.841632 moveto 128.094948 2.298696 lineto 1.500000 setlinewidth stroke\nnewpath 191.725361 290.391818 moveto 178.598829 283.030123 lineto 1.500000 setlinewidth stroke\nnewpath 478.390870 34.072970 moveto 463.460196 54.124591 lineto 1.500000 setlinewidth stroke\nnewpath 98.128854 509.015354 moveto 116.899024 508.500003 lineto 1.500000 setlinewidth stroke\nnewpath 135.599710 465.151390 moveto 136.489318 423.866689 lineto 1.500000 setlinewidth stroke\nnewpath 15.642237 504.080810 moveto 0.642758 505.337033 lineto 1.500000 setlinewidth stroke\nnewpath 438.063859 489.027180 moveto 454.391825 489.739149 lineto 1.500000 setlinewidth stroke\nnewpath 251.512312 44.145725 moveto 243.435976 33.325925 lineto 1.500000 setlinewidth stroke\nnewpath 354.359373 313.690213 moveto 325.603602 316.121960 lineto 1.500000 setlinewidth stroke\nnewpath 146.851175 381.523870 moveto 156.991555 383.146689 lineto 1.500000 setlinewidth stroke\nnewpath 215.181070 242.669939 moveto 212.901126 220.147663 lineto 1.500000 setlinewidth stroke\nnewpath 49.145863 403.108711 moveto 33.819750 435.454190 lineto 1.500000 setlinewidth stroke\nnewpath 73.802769 293.921216 moveto 54.884582 289.669587 lineto 1.500000 setlinewidth stroke\nnewpath 92.880535 5.458703 moveto 99.469806 4.715108 lineto 1.500000 setlinewidth stroke\nnewpath 195.843903 116.607355 moveto 186.975019 103.805708 lineto 1.500000 setlinewidth stroke\nnewpath 208.110989 90.312295 moveto 206.999992 97.643941 lineto 1.500000 setlinewidth stroke\nnewpath 215.081436 218.782224 moveto 217.060373 233.850655 lineto 1.500000 setlinewidth stroke\nnewpath 238.645445 34.571847 moveto 250.890490 46.092825 lineto 1.500000 setlinewidth stroke\nnewpath 125.886292 82.012629 moveto 111.998036 76.086651 lineto 1.500000 setlinewidth stroke\nnewpath 156.250987 112.337115 moveto 182.408485 129.302462 lineto 1.500000 setlinewidth stroke\nnewpath 213.358454 266.435357 moveto 217.228499 251.466393 lineto 1.500000 setlinewidth stroke\nnewpath 335.633936 268.853391 moveto 320.617411 262.643351 lineto 1.500000 setlinewidth stroke\nnewpath 509.646196 205.110532 moveto 508.246265 178.868531 lineto 1.500000 setlinewidth stroke\nnewpath 379.609699 392.678014 moveto 386.689884 361.333186 lineto 1.500000 setlinewidth stroke\nnewpath 130.616060 466.579965 moveto 149.384874 467.398631 lineto 1.500000 setlinewidth stroke\nnewpath 75.669187 225.700454 moveto 31.889371 229.062155 lineto 1.500000 setlinewidth stroke\nnewpath 104.375755 500.436659 moveto 81.875887 500.491169 lineto 1.500000 setlinewidth stroke\nnewpath 126.788004 151.921693 moveto 108.220995 191.420125 lineto 1.500000 setlinewidth stroke\nnewpath 504.795826 178.857204 moveto 505.958888 206.360881 lineto 1.500000 setlinewidth stroke\nnewpath 389.483639 361.403329 moveto 380.301301 396.616546 lineto 1.500000 setlinewidth stroke\nnewpath 478.151673 473.385197 moveto 456.883997 474.131423 lineto 1.500000 setlinewidth stroke\nnewpath 204.169062 243.897846 moveto 202.647020 230.178026 lineto 1.500000 setlinewidth stroke\nnewpath 374.379554 488.758236 moveto 355.609353 488.026235 lineto 1.500000 setlinewidth stroke\nnewpath 487.734453 266.892262 moveto 477.353966 254.716651 lineto 1.500000 setlinewidth stroke\nnewpath 355.514487 198.885336 moveto 357.622289 221.422017 lineto 1.500000 setlinewidth stroke\nnewpath 197.200289 275.495352 moveto 198.723651 269.015743 lineto 1.500000 setlinewidth stroke\nnewpath 244.348775 478.315737 moveto 264.362011 478.586179 lineto 1.500000 setlinewidth stroke\nnewpath 218.280509 233.920370 moveto 223.377914 216.448789 lineto 1.500000 setlinewidth stroke\nnewpath 445.615410 38.816738 moveto 459.403344 36.547196 lineto 1.500000 setlinewidth stroke\nnewpath 230.665479 406.386424 moveto 224.741854 427.375758 lineto 1.500000 setlinewidth stroke\nnewpath 222.111645 427.693729 moveto 227.954631 407.575519 lineto 1.500000 setlinewidth stroke\nnewpath 376.870531 490.213768 moveto 390.648540 490.907460 lineto 1.500000 setlinewidth stroke\nnewpath 385.960425 259.057761 moveto 378.125984 266.376054 lineto 1.500000 setlinewidth stroke\nnewpath 21.845994 490.112309 moveto 29.477701 472.669935 lineto 1.500000 setlinewidth stroke\nnewpath 406.917985 246.767564 moveto 453.161029 241.704039 lineto 1.500000 setlinewidth stroke\nnewpath 29.751528 371.550149 moveto 44.848539 339.095276 lineto 1.500000 setlinewidth stroke\nnewpath 116.053806 484.076668 moveto 107.955800 501.295425 lineto 1.500000 setlinewidth stroke\nnewpath 175.273688 460.129827 moveto 175.411296 470.145111 lineto 1.500000 setlinewidth stroke\nnewpath 344.329038 231.490412 moveto 342.311559 208.836122 lineto 1.500000 setlinewidth stroke\nnewpath 243.136021 488.549219 moveto 226.904595 488.000139 lineto 1.500000 setlinewidth stroke\nnewpath 271.875366 480.780737 moveto 244.374606 480.763776 lineto 1.500000 setlinewidth stroke\nnewpath 218.119733 493.781661 moveto 231.896399 493.004193 lineto 1.500000 setlinewidth stroke\nnewpath 429.437199 327.531663 moveto 405.621630 328.812330 lineto 1.500000 setlinewidth stroke\nnewpath 145.427530 498.802800 moveto 150.304233 485.464749 lineto 1.500000 setlinewidth stroke\nnewpath 175.597522 476.742610 moveto 196.915285 478.336058 lineto 1.500000 setlinewidth stroke\nnewpath 339.001021 282.017786 moveto 348.645421 287.628984 lineto 1.500000 setlinewidth stroke\nnewpath 141.771478 118.744745 moveto 149.412366 112.672015 lineto 1.500000 setlinewidth stroke\nnewpath 193.014210 505.082497 moveto 198.832256 489.916786 lineto 1.500000 setlinewidth stroke\nnewpath 280.703476 506.688648 moveto 269.323882 505.734924 lineto 1.500000 setlinewidth stroke\nnewpath 405.622508 116.275995 moveto 381.856103 116.874098 lineto 1.500000 setlinewidth stroke\nnewpath 494.459293 309.146687 moveto 483.078379 308.166094 lineto 1.500000 setlinewidth stroke\nnewpath 254.506291 53.486858 moveto 335.588474 41.135226 lineto 1.500000 setlinewidth stroke\nnewpath 44.356550 291.454709 moveto 65.899047 296.441030 lineto 1.500000 setlinewidth stroke\nnewpath 271.882878 340.353172 moveto 260.603166 340.742641 lineto 1.500000 setlinewidth stroke\nnewpath 499.506555 262.536219 moveto 505.128391 270.866565 lineto 1.500000 setlinewidth stroke\nnewpath 346.922747 58.105622 moveto 333.184158 59.470479 lineto 1.500000 setlinewidth stroke\nnewpath 221.533595 61.674267 moveto 234.196227 57.127158 lineto 1.500000 setlinewidth stroke\nnewpath 464.546398 437.658489 moveto 470.657479 406.381346 lineto 1.500000 setlinewidth stroke\nnewpath 63.079694 299.008414 moveto 44.745998 292.782507 lineto 1.500000 setlinewidth stroke\nnewpath 72.985402 437.613582 moveto 71.859897 451.373765 lineto 1.500000 setlinewidth stroke\nnewpath 150.526733 450.172224 moveto 152.323880 406.342152 lineto 1.500000 setlinewidth stroke\nnewpath 183.135132 140.330825 moveto 154.393250 141.745728 lineto 1.500000 setlinewidth stroke\nnewpath 472.121948 410.096897 moveto 473.120947 418.875461 lineto 1.500000 setlinewidth stroke\nnewpath 55.649919 379.917821 moveto 42.095993 378.287613 lineto 1.500000 setlinewidth stroke\nnewpath 150.568268 154.690730 moveto 163.179633 153.043199 lineto 1.500000 setlinewidth stroke\nnewpath 182.522431 134.146577 moveto 155.343194 116.161829 lineto 1.500000 setlinewidth stroke\nnewpath 207.751870 462.649496 moveto 208.450701 437.634099 lineto 1.500000 setlinewidth stroke\nnewpath 268.793362 491.283017 moveto 270.173864 482.553655 lineto 1.500000 setlinewidth stroke\nnewpath 475.649150 374.394329 moveto 456.881606 375.267065 lineto 1.500000 setlinewidth stroke\nnewpath 131.971927 101.223144 moveto 120.255824 93.745002 lineto 1.500000 setlinewidth stroke\nnewpath 412.722670 114.162661 moveto 393.960486 87.921372 lineto 1.500000 setlinewidth stroke\nnewpath 111.804929 278.066318 moveto 136.833635 275.897615 lineto 1.500000 setlinewidth stroke\nnewpath 425.522384 466.355541 moveto 428.855941 448.776569 lineto 1.500000 setlinewidth stroke\nnewpath 18.253278 199.921141 moveto 8.099398 201.166207 lineto 1.500000 setlinewidth stroke\nnewpath 216.799712 327.622556 moveto 216.872540 362.625005 lineto 1.500000 setlinewidth stroke\nnewpath 403.973322 93.705008 moveto 415.556680 111.419674 lineto 1.500000 setlinewidth stroke\nnewpath 149.382313 272.697045 moveto 110.650752 276.628691 lineto 1.500000 setlinewidth stroke\nnewpath 96.167759 246.590412 moveto 103.188670 228.900270 lineto 1.500000 setlinewidth stroke\nnewpath 117.482784 475.345485 moveto 119.273006 460.261247 lineto 1.500000 setlinewidth stroke\nnewpath 322.862184 420.054314 moveto 326.563824 406.291307 lineto 1.500000 setlinewidth stroke\nnewpath 180.250278 475.185940 moveto 181.561488 456.353172 lineto 1.500000 setlinewidth stroke\nnewpath 493.153764 15.288138 moveto 509.555077 12.396339 lineto 1.500000 setlinewidth stroke\nnewpath 441.870766 213.800501 moveto 414.317683 215.366578 lineto 1.500000 setlinewidth stroke\nnewpath 224.801459 468.873266 moveto 224.862454 483.873018 lineto 1.500000 setlinewidth stroke\nnewpath 277.507984 446.602379 moveto 282.056461 433.940184 lineto 1.500000 setlinewidth stroke\nnewpath 492.744526 443.805967 moveto 495.459041 428.844889 lineto 1.500000 setlinewidth stroke\nnewpath 30.611571 228.762231 moveto 16.907058 230.394208 lineto 1.500000 setlinewidth stroke\nnewpath 73.839870 392.641688 moveto 74.598802 360.130224 lineto 1.500000 setlinewidth stroke\nnewpath 145.513832 427.618603 moveto 144.286818 448.941855 lineto 1.500000 setlinewidth stroke\nnewpath 216.981275 491.533296 moveto 218.310259 480.146622 lineto 1.500000 setlinewidth stroke\nnewpath 31.953778 198.553249 moveto 19.437840 199.615449 lineto 1.500000 setlinewidth stroke\nnewpath 151.772195 487.587775 moveto 147.191146 500.239473 lineto 1.500000 setlinewidth stroke\nnewpath 329.144267 406.304761 moveto 325.343730 418.789377 lineto 1.500000 setlinewidth stroke\nnewpath 500.253667 462.558605 moveto 503.579794 443.956318 lineto 1.500000 setlinewidth stroke\nnewpath 76.140426 453.112282 moveto 80.109393 438.732685 lineto 1.500000 setlinewidth stroke\nnewpath 224.247919 498.839290 moveto 220.718025 511.401140 lineto 1.500000 setlinewidth stroke\nnewpath 31.900434 282.897521 moveto 18.153512 284.180500 lineto 1.500000 setlinewidth stroke\nnewpath 69.442058 431.385005 moveto 72.625028 410.050408 lineto 1.500000 setlinewidth stroke\nnewpath 119.084192 483.856904 moveto 117.994595 501.366885 lineto 1.500000 setlinewidth stroke\nnewpath 348.145999 384.354160 moveto 333.120077 385.012661 lineto 1.500000 setlinewidth stroke\nnewpath 110.548286 288.724165 moveto 99.589891 294.297521 lineto 1.500000 setlinewidth stroke\nnewpath 429.400356 334.232299 moveto 408.080312 335.745290 lineto 1.500000 setlinewidth stroke\nnewpath 478.115372 379.939294 moveto 456.793071 381.044802 lineto 1.500000 setlinewidth stroke\nnewpath 480.739645 320.152003 moveto 474.487585 346.695938 lineto 1.500000 setlinewidth stroke\nnewpath 4.409934 205.359695 moveto 13.152302 204.058425 lineto 1.500000 setlinewidth stroke\nnewpath 211.894676 317.872645 moveto 195.549228 319.171308 lineto 1.500000 setlinewidth stroke\nnewpath 271.891380 346.830998 moveto 255.617477 347.415560 lineto 1.500000 setlinewidth stroke\nnewpath 366.247951 321.328361 moveto 368.495420 351.347267 lineto 1.500000 setlinewidth stroke\nnewpath 469.429091 210.790721 moveto 445.633060 212.724200 lineto 1.500000 setlinewidth stroke\nnewpath 1.602069 455.745289 moveto 8.281317 445.224237 lineto 1.500000 setlinewidth stroke\nnewpath 70.390036 403.796528 moveto 74.146531 392.548697 lineto 1.500000 setlinewidth stroke\nnewpath 231.366519 450.124667 moveto 231.347967 408.875237 lineto 1.500000 setlinewidth stroke\nnewpath 369.374379 75.636368 moveto 363.922446 66.414551 lineto 1.500000 setlinewidth stroke\nnewpath 224.393459 386.657740 moveto 210.620555 387.556908 lineto 1.500000 setlinewidth stroke\nnewpath 473.285143 343.906707 moveto 477.951555 320.338151 lineto 1.500000 setlinewidth stroke\nnewpath 141.890153 275.335377 moveto 166.850691 273.537504 lineto 1.500000 setlinewidth stroke\nnewpath 468.666007 256.601586 moveto 461.254722 252.683764 lineto 1.500000 setlinewidth stroke\nnewpath 130.698192 357.106773 moveto 115.599192 358.616970 lineto 1.500000 setlinewidth stroke\nnewpath 158.961018 407.531670 moveto 159.661838 432.582005 lineto 1.500000 setlinewidth stroke\nnewpath 210.276462 93.417118 moveto 206.683129 105.961993 lineto 1.500000 setlinewidth stroke\nnewpath 438.125000 200.125000 moveto 413.125000 200.125000 lineto 1.500000 setlinewidth stroke\nnewpath 69.444049 448.879316 moveto 70.071524 438.840405 lineto 1.500000 setlinewidth stroke\nnewpath 166.982640 431.381664 moveto 167.228130 381.370598 lineto 1.500000 setlinewidth stroke\nnewpath 228.649420 483.894814 moveto 229.171751 470.070093 lineto 1.500000 setlinewidth stroke\nnewpath 30.380280 508.928487 moveto 31.448456 488.852305 lineto 1.500000 setlinewidth stroke\nnewpath 291.405380 483.881230 moveto 291.206201 468.867290 lineto 1.500000 setlinewidth stroke\nnewpath 191.879497 237.686352 moveto 176.777388 238.793396 lineto 1.500000 setlinewidth stroke\nnewpath 172.429308 500.133780 moveto 172.587984 490.116494 lineto 1.500000 setlinewidth stroke\nnewpath 235.485522 56.741082 moveto 254.357357 53.763188 lineto 1.500000 setlinewidth stroke\nnewpath 256.728403 397.630408 moveto 257.741534 425.093032 lineto 1.500000 setlinewidth stroke\nnewpath 219.877532 363.871212 moveto 219.500630 313.874053 lineto 1.500000 setlinewidth stroke\nnewpath 187.291479 398.857146 moveto 186.836193 356.362023 lineto 1.500000 setlinewidth stroke\nnewpath 318.692874 446.363495 moveto 318.414422 432.619136 lineto 1.500000 setlinewidth stroke\nnewpath 36.287081 487.585950 moveto 35.366815 501.440878 lineto 1.500000 setlinewidth stroke\nnewpath 83.375141 375.147631 moveto 87.331590 331.416308 lineto 1.500000 setlinewidth stroke\nnewpath 225.628900 335.125458 moveto 228.591872 309.886319 lineto 1.500000 setlinewidth stroke\nnewpath 371.816999 79.883789 moveto 357.947644 155.092293 lineto 1.500000 setlinewidth stroke\nnewpath 84.565941 496.384410 moveto 85.739608 472.569046 lineto 1.500000 setlinewidth stroke\nnewpath 221.893187 321.374730 moveto 222.486208 361.365937 lineto 1.500000 setlinewidth stroke\nnewpath 197.246527 135.130336 moveto 196.151458 211.382561 lineto 1.500000 setlinewidth stroke\nnewpath 213.443352 437.736186 moveto 211.761799 461.455592 lineto 1.500000 setlinewidth stroke\nnewpath 466.262593 402.550003 moveto 463.341674 426.401534 lineto 1.500000 setlinewidth stroke\nnewpath 91.488082 365.187817 moveto 94.319894 326.280011 lineto 1.500000 setlinewidth stroke\nnewpath 180.632441 302.951873 moveto 171.330952 338.733574 lineto 1.500000 setlinewidth stroke\nnewpath 428.115051 198.304606 moveto 438.133806 198.129855 lineto 1.500000 setlinewidth stroke\nnewpath 74.592940 359.972918 moveto 76.268617 348.601447 lineto 1.500000 setlinewidth stroke\nnewpath 297.104687 368.861848 moveto 298.749664 397.589231 lineto 1.500000 setlinewidth stroke\nnewpath 388.539228 97.051116 moveto 401.924025 113.596555 lineto 1.500000 setlinewidth stroke\nnewpath 421.931288 362.618408 moveto 425.592386 393.878820 lineto 1.500000 setlinewidth stroke\nnewpath 88.700756 345.175742 moveto 86.167239 373.922788 lineto 1.500000 setlinewidth stroke\nnewpath 319.314049 302.610726 moveto 313.161486 328.883544 lineto 1.500000 setlinewidth stroke\nnewpath 500.187726 440.186209 moveto 499.057349 455.195218 lineto 1.500000 setlinewidth stroke\nnewpath 121.931328 502.626255 moveto 122.377393 482.608341 lineto 1.500000 setlinewidth stroke\nnewpath 226.015459 360.172507 moveto 227.832104 345.241450 lineto 1.500000 setlinewidth stroke\nnewpath 355.084869 180.600103 moveto 343.128783 198.464135 lineto 1.500000 setlinewidth stroke\nnewpath 491.616231 428.831149 moveto 489.075489 443.824245 lineto 1.500000 setlinewidth stroke\nnewpath 45.413561 491.371927 moveto 45.777149 466.359042 lineto 1.500000 setlinewidth stroke\nnewpath 282.972269 460.127962 moveto 282.632966 442.634544 lineto 1.500000 setlinewidth stroke\nnewpath 51.643669 311.288828 moveto 40.868229 340.215604 lineto 1.500000 setlinewidth stroke\nnewpath 361.048778 405.073265 moveto 363.340887 423.848644 lineto 1.500000 setlinewidth stroke\nnewpath 156.884664 121.360658 moveto 179.310046 136.471396 lineto 1.500000 setlinewidth stroke\nnewpath 103.055209 496.364045 moveto 105.413178 481.341751 lineto 1.500000 setlinewidth stroke\nnewpath 191.516858 210.165117 moveto 195.115637 130.158315 lineto 1.500000 setlinewidth stroke\nnewpath 210.285291 205.334735 moveto 217.227063 175.206117 lineto 1.500000 setlinewidth stroke\nnewpath 289.073204 277.053896 moveto 297.001444 272.864277 lineto 1.500000 setlinewidth stroke\nnewpath 336.839650 61.329619 moveto 327.757983 68.403834 lineto 1.500000 setlinewidth stroke\nnewpath 217.725166 173.800165 moveto 211.681623 105.142022 lineto 1.500000 setlinewidth stroke\nnewpath 255.742512 284.629705 moveto 283.351677 280.330810 lineto 1.500000 setlinewidth stroke\nnewpath 202.842126 445.131229 moveto 203.227281 462.622748 lineto 1.500000 setlinewidth stroke\nnewpath 214.505890 100.104104 moveto 219.300547 130.136886 lineto 1.500000 setlinewidth stroke\nnewpath 371.267082 351.415418 moveto 369.187544 320.137463 lineto 1.500000 setlinewidth stroke\nnewpath 13.186861 305.412524 moveto 30.940785 301.592731 lineto 1.500000 setlinewidth stroke\nnewpath 122.468853 128.654213 moveto 110.240335 164.995564 lineto 1.500000 setlinewidth stroke\nnewpath 230.562913 308.632413 moveto 227.767312 294.942778 lineto 1.500000 setlinewidth stroke\nnewpath 262.990764 402.623423 moveto 263.269915 378.862017 lineto 1.500000 setlinewidth stroke\nnewpath 96.075888 360.204639 moveto 98.506669 346.442413 lineto 1.500000 setlinewidth stroke\nnewpath 186.393053 462.591443 moveto 185.514828 475.204365 lineto 1.500000 setlinewidth stroke\nnewpath 93.348249 325.127291 moveto 93.340701 317.624783 lineto 1.500000 setlinewidth stroke\nnewpath 156.104923 433.737614 moveto 155.247196 446.349305 lineto 1.500000 setlinewidth stroke\nnewpath 232.253199 362.654436 moveto 233.324489 348.890527 lineto 1.500000 setlinewidth stroke\nnewpath 77.634320 411.179996 moveto 75.928257 426.408973 lineto 1.500000 setlinewidth stroke\nnewpath 119.478633 297.189033 moveto 150.700022 293.214295 lineto 1.500000 setlinewidth stroke\nnewpath 381.161055 362.479363 moveto 378.857980 373.769534 lineto 1.500000 setlinewidth stroke\nnewpath 377.491610 335.051017 moveto 374.499120 310.110108 lineto 1.500000 setlinewidth stroke\nnewpath 476.442492 288.801419 moveto 474.098735 302.578000 lineto 1.500000 setlinewidth stroke\nshowpage\n%%EOF\n"
  },
  {
    "path": "thirdparty/LSD/chairs.lsd.txt",
    "content": "159.232890 134.369601 160.325338 105.613616 2.735466 \n66.105373 75.587787 63.972852 48.059320 4.028428 \n68.757033 166.697424 63.229592 108.115131 5.142462 \n214.249352 223.119214 216.035182 184.336329 4.550998 \n146.507379 106.904351 144.805709 85.590613 4.785176 \n16.923435 420.296707 101.917593 432.836299 3.506918 \n185.613699 338.200192 184.450026 299.335327 5.745963 \n185.553747 416.882362 184.760563 409.206000 3.588424 \n104.420784 429.066585 14.001093 415.643731 7.071789 \n236.956356 450.093215 338.133131 465.571853 3.854458 \n440.312266 443.318582 461.485782 340.802785 6.986705 \n390.175127 443.247735 386.423926 429.498062 3.617778 \n254.349382 144.622838 309.534989 150.327223 3.688258 \n395.623625 154.388009 469.473514 162.192856 4.011921 \n82.100903 198.128652 82.505242 173.114982 5.403412 \n308.102489 147.116916 265.621383 143.163866 3.733869 \n318.193027 108.638252 377.018594 114.069831 3.714611 \n177.234686 171.884778 178.866472 111.861175 3.952433 \n83.483276 209.417449 83.002669 199.321319 2.913228 \n470.753079 159.475045 426.714048 154.570104 4.692542 \n347.054436 465.959769 390.859403 442.480235 5.156050 \n130.050173 423.214677 145.520607 415.417864 3.929099 \n359.127942 240.746956 363.431147 205.358231 5.148095 \n338.937027 461.803124 329.742966 458.385190 3.514971 \n55.447508 287.887055 90.891886 294.103229 7.515963 \n220.576199 438.153515 226.204808 447.786205 3.686397 \n459.356888 113.312168 509.492223 118.163601 4.013585 \n472.109699 476.657906 483.528037 489.002195 3.808180 \n28.400012 133.725489 0.578315 129.697453 4.590190 \n129.429473 105.056075 65.661795 103.146365 3.875215 \n65.393503 102.997316 62.249854 77.921301 3.717255 \n209.403932 107.795295 252.014573 111.534462 3.758426 \n254.544229 301.460485 349.452808 311.109693 4.995106 \n494.491690 491.178740 509.489418 493.692299 3.292066 \n418.147191 66.574204 463.270471 69.903200 4.148676 \n114.550553 427.186390 109.152211 430.229825 3.544391 \n363.760038 340.114935 368.999069 359.476722 4.727075 \n112.015348 433.411873 129.096273 425.055280 3.441002 \n450.611143 52.060916 489.517674 54.960793 3.460896 \n114.103020 56.963459 113.370535 44.360729 2.711269 \n166.443487 142.867889 177.706109 178.721261 4.601673 \n0.568442 132.217463 29.760859 137.038580 4.129691 \n0.822115 72.823339 33.431051 76.965814 4.152311 \n335.206776 459.796637 233.710408 445.267722 8.472018 \n506.939321 114.294998 430.625997 110.604393 4.250133 \n91.889757 105.454932 132.021450 108.937250 4.054862 \n490.624116 486.669661 481.689616 480.366053 9.010730 \n148.343515 44.068372 171.978709 47.386215 4.061125 \n167.308281 44.371373 167.161805 26.872599 2.594079 \n370.836320 447.249743 345.209318 459.774468 10.107451 \n391.906831 84.052619 432.009557 88.012202 3.501932 \n178.416428 178.825694 193.827134 222.070238 7.471541 \n133.271812 134.749946 162.050609 139.578304 4.095573 \n90.277768 227.799200 83.969749 210.320139 3.200202 \n184.930491 408.147278 185.794276 338.142512 6.619664 \n459.882600 344.038088 464.790514 334.590863 6.165761 \n121.173667 71.653235 136.308673 109.098667 4.191508 \n142.958322 411.126008 126.173037 421.510810 4.405030 \n373.211533 110.868378 328.114968 106.991696 3.843281 \n26.897965 19.372708 25.020860 0.560555 2.859979 \n428.479914 468.957678 438.882696 446.645470 5.588076 \n359.498486 49.584630 409.487962 52.279828 4.619415 \n200.759417 413.298225 191.059982 420.824676 5.482846 \n160.717716 77.262183 220.711892 79.894901 4.404005 \n224.660034 263.330145 223.280681 256.841903 2.705283 \n485.638645 51.352733 440.636706 50.176954 3.781369 \n78.123187 76.901031 119.520625 79.783721 3.945927 \n303.110387 247.009670 245.341121 240.741170 5.991382 \n44.214757 50.248770 38.283969 33.070117 4.487182 \n136.358108 166.014596 133.914970 147.095830 5.077874 \n290.612784 47.014847 325.781195 50.086899 3.578281 \n430.928389 438.389046 443.824367 423.571578 5.499863 \n250.702019 108.664095 230.666339 106.493430 3.831827 \n401.971668 189.223740 432.172868 191.307208 7.352799 \n284.417212 81.511106 322.134685 85.886335 3.670388 \n509.887214 489.453750 492.055317 485.681421 8.560541 \n35.522946 55.874412 40.682107 57.985436 3.319072 \n134.291376 112.182609 142.123736 132.265495 4.658270 \n383.492191 435.939162 375.382597 445.417604 4.474677 \n108.153220 146.699755 110.409196 163.154587 4.174711 \n434.003471 190.702414 433.045129 170.628813 4.162996 \n38.179708 221.284749 0.309891 217.774717 5.968258 \n426.878110 84.328129 386.805716 81.669150 3.824533 \n5.548653 221.594031 38.141785 224.161954 2.363897 \n228.231497 260.392493 230.003626 270.731505 6.371339 \n125.598417 421.669335 115.603827 422.961191 6.679145 \n0.618577 99.406529 24.644698 104.301132 4.627060 \n98.357075 440.320582 32.948807 430.555125 5.035560 \n400.760375 168.054843 401.833753 189.250485 4.377409 \n114.391901 75.932022 68.111960 75.102542 2.656401 \n131.537589 86.889429 129.878963 48.103449 2.978368 \n455.572123 22.382176 474.507270 24.356319 2.616143 \n319.431011 82.454246 284.362402 79.525869 2.704474 \n61.838651 134.269909 53.981571 136.987535 4.292530 \n106.794317 58.390409 115.847654 61.142573 4.678575 \n198.098624 33.345934 217.026545 35.605594 4.520218 \n274.419642 58.914739 254.365818 56.969671 3.054274 \n110.830519 164.676305 136.968982 167.119554 5.711412 \n156.904122 59.028548 194.558357 62.193669 3.725997 \n203.411749 119.206214 204.813000 131.964185 3.303882 \n277.089886 176.949969 275.815996 159.361167 5.619011 \n405.685811 49.291961 361.855954 47.292513 3.746104 \n86.904705 44.166402 103.180657 46.484161 2.651258 \n224.523552 240.813495 227.747717 259.653484 4.150995 \n453.820099 125.601499 454.326662 140.584373 3.663383 \n88.113984 128.361835 105.634220 129.176792 2.845787 \n225.624005 119.436211 211.857320 119.212377 3.790147 \n62.346586 107.100223 49.555360 111.189204 9.095736 \n460.641118 66.429978 408.119470 64.527693 3.775131 \n32.114157 430.744113 4.020168 424.802875 4.585097 \n350.302735 475.390486 256.669285 462.071155 4.758341 \n421.966069 28.488462 461.946711 30.192624 3.562382 \n129.453086 33.724215 149.464944 36.125394 2.680877 \n151.960634 231.017630 112.851686 227.111418 5.973570 \n129.400486 308.742368 109.353394 308.470979 6.503234 \n455.578760 141.366846 479.469681 142.855983 4.368216 \n46.205567 172.856451 64.055075 211.444782 8.026495 \n190.646608 58.691412 146.861333 57.307358 2.617230 \n204.454163 133.427836 227.005579 135.312650 4.253856 \n461.866721 27.213980 423.139823 26.268111 2.590818 \n453.212818 40.258461 494.476852 42.500124 3.337642 \n477.426352 192.045034 492.912716 255.676665 5.578110 \n325.794712 120.530377 326.718149 134.385454 3.991082 \n479.313251 125.542906 455.497646 124.283735 4.663039 \n227.407290 134.420386 226.462509 119.480131 3.283906 \n350.883550 136.902162 350.472920 121.913411 2.875615 \n18.257506 99.483626 0.560668 97.429144 2.860092 \n206.372770 464.776399 200.829459 440.578163 4.417480 \n335.694580 62.426596 369.606124 65.805127 3.860078 \n29.371380 73.165177 8.180792 71.255805 3.622693 \n45.217461 105.829286 56.739988 128.816093 6.155979 \n253.340273 59.032997 278.389335 62.420170 3.447383 \n431.848879 169.838449 401.733189 168.141058 6.732485 \n43.425276 330.856826 35.516449 298.456620 5.211139 \n108.044574 129.618110 105.311392 114.660720 3.807439 \n249.350404 175.890149 277.190608 178.472667 6.941395 \n328.075196 136.239263 350.730312 138.076127 4.141806 \n18.525858 0.426184 24.735488 12.946206 2.109492 \n246.244878 155.385837 248.802003 175.378531 4.613629 \n427.869552 277.467253 410.975793 284.028249 2.850720 \n398.134242 14.162867 429.433750 15.526562 3.311167 \n246.683107 455.071997 219.201307 447.505893 3.161658 \n176.089103 422.173534 169.333992 404.390577 3.061713 \n348.324771 216.176420 350.485679 205.596544 4.023717 \n452.900719 262.786265 394.006643 256.674641 6.345640 \n365.238056 262.993972 372.084940 308.093127 4.568109 \n39.495839 138.908754 46.797720 149.428640 6.245781 \n49.039987 74.348059 61.520660 103.277866 6.030799 \n121.888190 438.165016 114.379933 440.639965 3.574687 \n172.835900 403.218180 177.568496 417.901478 3.608527 \n509.618479 503.429353 475.552093 494.658165 5.117568 \n84.327486 114.127195 87.147464 127.811254 3.710026 \n169.405751 24.698438 201.911433 25.777229 3.410785 \n344.833624 206.784228 342.819955 224.340011 3.013360 \n442.766424 450.374071 450.516605 439.299145 2.764964 \n355.565684 315.646191 364.080400 339.480246 7.400663 \n351.934340 25.755969 389.410827 26.694690 3.313029 \n496.897016 40.358524 479.413083 38.914046 3.211959 \n0.633644 54.979879 34.411079 55.432488 3.732915 \n2.996378 327.890956 42.069625 332.837703 5.242619 \n169.371594 423.135859 156.496274 419.097297 5.004187 \n310.586433 266.779905 294.455011 273.322283 3.005284 \n349.301186 121.595710 326.741529 119.880245 4.416939 \n133.136094 148.002892 109.017347 145.811652 6.225144 \n254.109359 461.811652 222.751823 454.792026 4.042093 \n321.406759 191.635844 333.316419 230.566441 6.102425 \n284.366747 251.170112 256.873049 250.753866 5.188652 \n106.764309 317.707257 174.234571 326.680854 6.268572 \n339.395916 223.128232 342.719927 201.619224 3.795886 \n41.911574 60.045301 48.327150 74.283916 3.819817 \n283.365831 254.395714 282.075951 269.392284 3.133518 \n274.352037 158.417102 246.630292 156.237806 6.230776 \n362.659723 205.010923 366.774935 191.843726 3.270234 \n428.134504 12.898968 399.382780 11.689982 2.404228 \n189.109111 494.317848 178.306095 496.515294 3.548069 \n104.359670 114.663314 84.283501 113.595841 5.656649 \n505.126517 264.329538 505.894641 298.147268 4.231573 \n154.999632 418.185211 129.233747 431.728083 8.383531 \n363.171642 61.814501 315.642871 60.122891 3.387637 \n369.258623 351.548726 403.256407 355.831970 4.970567 \n453.182331 15.528699 486.924373 16.965562 2.497736 \n260.627491 143.058544 221.885083 141.606060 3.294365 \n371.707029 370.303144 388.261380 425.956253 8.447790 \n91.135701 291.621692 105.541817 320.666259 7.901443 \n330.678520 18.918829 351.929315 21.412055 3.141831 \n480.302377 141.885188 480.205104 126.869622 3.830896 \n14.421376 23.814010 0.559439 22.668062 3.109408 \n111.601542 336.454741 123.994127 365.250967 5.435410 \n294.514109 11.908291 320.707543 14.903040 2.803800 \n355.890985 471.126964 348.942537 474.808860 3.445598 \n353.104281 259.378507 356.705833 280.653637 3.090843 \n28.151838 237.031055 9.105274 240.306610 5.139521 \n229.410862 17.907237 244.415633 20.378265 2.873009 \n0.529073 282.733113 32.083426 286.260531 5.246790 \n31.876890 494.938226 5.878110 437.324859 4.376474 \n53.538549 136.293396 47.685556 139.914750 6.882713 \n194.205052 431.808907 199.506846 418.176276 3.494999 \n379.315714 339.257530 367.835549 345.051480 2.629580 \n476.264587 492.641817 448.383295 455.735540 8.667141 \n113.153085 230.286277 163.120503 234.429236 1.774722 \n350.648351 467.576580 333.126157 468.159769 2.789681 \n391.843385 20.855660 413.374216 23.806748 2.866553 \n186.933246 265.068811 196.824766 266.104685 3.859797 \n289.491922 24.799089 325.697471 26.838300 3.480139 \n35.637980 304.245860 0.366122 300.700518 5.218557 \n109.015978 17.020879 115.568756 33.147853 1.510761 \n310.756543 34.635246 353.256773 37.131334 4.111947 \n0.498982 245.367514 48.182540 251.421817 6.534643 \n293.317471 274.614391 318.137550 276.727602 4.584824 \n404.168898 355.913241 447.071086 361.661518 4.955715 \n48.198019 255.789970 33.804745 262.160729 5.190490 \n350.687175 18.609567 323.165693 16.374027 2.694199 \n425.678600 154.339246 373.165640 152.150124 3.642618 \n457.111719 453.481045 451.342462 437.062122 6.024261 \n104.793695 321.129168 111.581106 336.315052 5.342785 \n231.812366 268.548562 250.703798 271.342133 5.129068 \n380.808612 35.737165 424.492554 39.096240 3.930178 \n174.720731 435.980263 170.056191 424.107378 4.363006 \n217.866308 445.756404 212.290311 434.779094 6.173892 \n230.388600 267.133638 233.206521 283.328319 3.320128 \n369.077836 308.165540 366.186141 286.968976 3.377657 \n464.384146 333.034037 498.542915 336.468647 11.325434 \n365.660804 9.006347 396.895522 9.697245 2.969314 \n410.680304 285.129987 490.797513 294.080883 5.517407 \n54.298768 120.968611 60.940456 126.495945 5.119999 \n76.806900 190.639141 78.900908 200.723445 2.585209 \n100.729051 43.371690 84.267199 41.664465 3.002437 \n405.286079 456.206813 394.168044 449.730274 4.226042 \n498.938042 295.746609 500.497341 269.293792 6.827612 \n246.936403 46.252785 225.647021 44.151850 2.717071 \n106.834003 257.304408 143.111350 260.767970 5.039857 \n145.702630 358.417446 134.573226 361.371753 6.361500 \n176.051898 332.104632 162.689009 342.884096 4.897013 \n214.112891 261.930165 212.495319 254.244445 3.218727 \n279.230909 281.880272 279.126898 254.375938 3.806697 \n31.413079 51.455653 16.180654 22.829330 3.077676 \n195.775680 265.842891 203.160950 266.330516 3.363915 \n214.361376 45.759253 249.506845 49.325760 4.343453 \n343.205783 305.904576 249.377596 298.093813 4.256879 \n143.365348 266.034667 132.813805 272.225168 5.060305 \n191.006334 467.643444 181.919833 436.861766 4.521074 \n201.961217 257.104000 185.667701 263.238417 2.642619 \n354.051180 255.732329 348.952971 240.350573 4.346109 \n408.444666 483.173604 407.066795 456.799675 5.458901 \n173.116727 349.302592 156.794171 351.167576 4.009558 \n165.628222 346.883108 183.315601 339.854655 3.277040 \n331.936485 467.726497 248.061683 454.785374 2.661372 \n388.125273 24.369915 375.594290 23.696196 2.496395 \n225.653682 25.709473 261.912485 26.601759 2.499243 \n492.988107 298.610783 481.094611 320.194984 4.379177 \n261.918245 32.753103 282.081662 35.097760 3.291759 \n203.089889 436.886455 227.114248 510.520443 7.079713 \n371.597054 295.110636 395.730266 282.069803 4.337326 \n401.294654 265.704109 399.821100 278.177700 2.297679 \n413.190261 280.760462 424.764846 275.184200 2.794783 \n108.388710 441.209350 99.294816 439.957477 4.055902 \n180.002423 453.044933 178.664124 484.344605 6.724879 \n32.901339 286.362607 54.857931 288.833331 8.990514 \n59.207593 171.312232 48.530556 174.488345 3.723241 \n124.548783 365.541942 139.285399 396.375549 10.200036 \n218.883099 500.782806 210.314543 474.073586 4.423880 \n36.822152 10.098900 64.448679 12.115752 3.403495 \n170.495828 241.864766 168.905550 261.936842 2.751025 \n443.645673 393.552335 428.962451 406.569626 5.930475 \n384.232856 452.893358 355.897007 470.281230 8.329501 \n149.159805 269.909158 164.295102 265.359219 3.951101 \n453.651684 369.635090 447.218659 382.661990 3.929678 \n63.964265 236.827441 61.931657 254.381560 2.770963 \n318.206578 276.904753 335.628712 278.069480 5.739288 \n267.343844 277.937340 276.637094 273.835935 6.490976 \n349.428930 13.822995 373.317285 16.156857 3.517771 \n441.516447 461.234669 433.884283 472.394281 4.506623 \n418.151797 9.564748 448.164219 10.323300 2.562368 \n463.127329 1.375566 440.621989 1.270624 1.354902 \n146.897513 32.794033 128.149236 31.518712 3.088068 \n118.941685 293.614150 143.325568 279.727174 4.977953 \n170.651802 509.447295 174.912861 434.193122 5.557321 \n140.671704 133.217255 84.362063 130.945695 3.243106 \n211.079091 27.019807 203.344104 23.841733 5.574951 \n209.392900 76.196683 163.142120 74.976210 2.663999 \n404.585196 509.540784 407.559390 483.344622 5.418223 \n62.368900 198.033277 64.628628 179.405768 2.030198 \n215.721371 434.579943 209.498834 424.300042 8.780049 \n410.644966 20.177699 378.153907 18.727405 2.441773 \n177.860484 233.177731 160.648302 236.980473 4.598440 \n190.420268 295.544370 254.452186 300.962878 6.285525 \n498.168996 495.475703 480.372643 490.231358 2.751380 \n266.930447 18.183389 298.170971 19.637033 2.555399 \n316.213806 160.239035 308.228518 148.057143 3.856534 \n12.817908 281.176980 40.005127 269.216030 4.026984 \n70.728690 21.830672 78.857900 40.846064 1.673748 \n97.442107 229.246313 100.924050 244.590788 4.486875 \n165.880858 28.564290 153.291019 30.471134 5.505185 \n63.205654 55.611932 49.193511 54.717178 7.245784 \n101.788326 244.709598 104.806543 256.766976 5.759396 \n315.637928 8.900524 344.400633 9.684209 2.465027 \n228.141109 106.329982 181.857650 104.962029 2.572766 \n291.477010 255.593173 290.666502 265.728282 3.140197 \n324.369299 24.455054 311.843805 23.563037 2.404889 \n485.630433 14.166560 455.618242 13.384286 2.531722 \n509.605902 231.387679 489.582630 233.684827 4.397536 \n177.374015 265.227144 188.566004 262.326720 6.363719 \n258.110982 82.419033 284.350636 81.898009 2.474692 \n325.652519 107.181775 303.098778 106.523763 2.644751 \n193.533012 453.129350 193.719718 435.618013 1.409850 \n436.025527 474.356065 436.918346 493.241142 7.010412 \n446.878057 7.708756 419.370360 7.506706 1.451954 \n245.190088 297.540927 268.851598 279.922089 4.223222 \n299.319077 109.941028 316.876687 109.433331 3.531654 \n369.046130 359.857277 372.053369 369.702337 3.751628 \n40.206787 263.999841 8.216876 272.232024 6.506427 \n132.355040 273.944583 117.756181 282.495307 6.579474 \n156.484047 347.921369 146.832148 355.845376 4.484692 \n157.316073 365.876551 174.606623 351.868030 5.040571 \n375.842982 258.982877 365.852756 261.521341 6.057509 \n396.604513 293.126585 396.450694 266.870163 3.830486 \n0.642291 25.432741 16.984944 26.902494 2.601916 \n64.372230 105.937496 90.642325 106.170341 3.794169 \n133.684762 110.912555 121.445276 81.533271 2.019499 \n395.400452 450.366648 383.353525 452.160070 7.286226 \n425.540448 114.705578 458.137088 113.435148 3.601112 \n41.899709 265.689507 55.815547 260.359125 7.450898 \n356.056772 280.663738 353.932967 304.335341 3.064793 \n504.293748 263.146998 501.685848 253.514641 4.599686 \n313.114186 63.500374 338.110365 63.191328 3.842434 \n143.382025 278.908471 157.477006 270.754830 3.702096 \n418.588857 492.850270 419.464219 498.311072 5.332669 \n478.861252 321.619429 420.265876 340.840793 5.787624 \n179.328823 108.608772 196.915613 107.548895 2.721059 \n291.552933 272.424170 306.783146 265.425121 2.455386 \n350.689819 34.316003 313.096307 32.454454 3.250839 \n220.852517 251.902123 222.797642 235.585974 5.499280 \n252.721943 275.133310 243.676709 282.548031 5.103210 \n496.897039 8.918239 468.153644 7.531345 3.400748 \n0.603673 18.441574 21.925325 19.878000 2.494346 \n160.488509 414.724145 173.026956 419.625797 5.365886 \n191.736754 255.663334 186.962945 238.447223 3.613649 \n394.375509 6.778142 366.876270 6.633503 2.493391 \n474.352938 19.796494 468.104026 19.714014 3.799166 \n497.324137 267.582530 464.542267 275.104022 5.991520 \n63.136909 63.321740 49.437102 64.150979 3.894196 \n170.673457 430.292158 144.255466 426.446054 2.677638 \n171.890684 310.763021 130.596007 310.180574 5.369713 \n244.343039 17.278542 226.755361 15.885578 2.553985 \n404.251084 68.040527 416.874383 66.868357 2.489291 \n194.221054 211.896162 211.960221 212.979341 8.324091 \n45.699621 147.838403 53.413071 167.257095 7.447854 \n73.381698 234.409931 70.998202 251.925784 3.151340 \n249.212802 285.247642 266.704842 277.729122 3.284049 \n492.479027 256.707372 468.004187 267.859869 3.815802 \n199.805568 440.660404 194.148442 509.459155 4.897281 \n216.883346 144.814064 256.882690 144.976047 2.646778 \n287.456984 283.129778 287.260252 255.622245 3.866120 \n421.914200 340.792559 380.582602 339.295770 5.657811 \n509.588612 496.777316 499.253867 495.139230 2.529650 \n183.988456 423.529841 190.104550 448.253747 6.380027 \n270.632849 11.278323 243.137606 10.916649 1.595156 \n475.514310 89.588544 490.609137 87.976462 2.437605 \n104.477450 286.044143 90.637697 289.426948 3.939557 \n179.041478 236.971134 176.679817 259.485645 3.338328 \n187.496702 509.485770 190.240894 494.083848 5.799526 \n210.029141 254.401493 209.622752 264.435660 2.497952 \n69.345239 261.878159 67.742726 246.782882 4.256879 \n459.318666 268.657519 389.308745 261.251294 2.952583 \n1.712044 417.622982 37.547416 495.219014 6.998872 \n108.734153 295.861122 105.447311 286.940470 3.518750 \n469.396151 10.187029 499.446799 11.638249 3.263272 \n8.200544 12.588943 24.479558 14.883061 2.475539 \n212.970213 236.566603 222.465228 231.800965 3.920794 \n335.670448 278.584791 345.637479 279.158030 5.135297 \n340.712938 206.080090 329.402188 208.265701 5.899330 \n417.957444 408.619875 403.763303 439.666821 5.164391 \n369.375516 13.118761 350.650317 11.569090 1.864316 \n464.433130 274.729547 428.173643 272.375691 5.912969 \n177.717277 494.396204 177.339108 509.418152 3.937560 \n259.385357 24.182050 246.854365 23.509420 1.851205 \n245.656558 244.093205 279.403275 247.872525 2.216065 \n426.048239 498.248398 427.810557 474.351811 5.354198 \n148.284290 424.408576 169.336971 427.165413 3.334662 \n182.192929 306.768192 171.942808 309.618821 3.277963 \n344.385814 264.212324 311.780612 262.044899 5.569363 \n359.787326 299.030384 362.871845 313.909208 4.477882 \n146.883274 245.355067 124.369671 245.438598 3.754612 \n388.951881 426.007689 391.187592 435.782229 4.491732 \n190.893366 484.388011 191.742724 466.868587 6.182138 \n422.874357 272.504836 412.523768 268.385824 5.570030 \n364.357656 84.965510 390.628196 84.726894 3.942851 \n494.364547 85.465843 478.102594 86.533840 3.149960 \n78.430220 284.405600 81.308799 255.693555 1.988746 \n85.008580 238.194837 83.632294 250.680917 2.758855 \n203.306343 232.512283 198.022776 234.015761 3.901202 \n281.907316 7.786447 296.890121 9.216585 2.132363 \n312.922246 248.911399 333.972673 239.705073 2.721052 \n370.090047 310.460149 376.551673 338.487723 3.931416 \n499.133034 337.310127 509.634463 338.818018 5.659896 \n55.642851 237.955959 29.358734 238.390019 2.912457 \n69.185803 205.406076 80.727335 203.919533 3.240236 \n204.774440 509.618693 197.255167 483.374215 3.598275 \n427.713383 405.739338 418.073618 409.233237 4.803401 \n438.077344 53.816471 449.457802 52.845436 2.278409 \n123.302102 245.409587 102.845546 242.937317 5.072704 \n167.238904 241.486863 150.411581 244.386454 7.815603 \n258.169773 249.508801 245.800027 253.648051 9.492347 \n456.945869 457.838037 471.021505 475.072079 3.614101 \n56.844474 161.671589 65.643100 161.486793 3.801669 \n159.436757 236.170838 109.383243 231.781009 2.053604 \n425.637193 263.005574 454.343206 265.936409 1.878350 \n385.668650 81.415191 365.591813 82.524225 2.634083 \n417.230416 471.716206 416.084912 487.186720 7.479525 \n490.527963 88.614531 504.366390 87.946609 2.557355 \n493.134436 331.876406 495.794452 314.027676 5.682398 \n211.898992 204.686007 191.848205 204.173703 3.844559 \n246.622792 253.010402 229.284125 254.682916 6.821223 \n347.599592 309.920764 354.590617 316.651029 7.069791 \n53.123525 73.078849 63.153233 72.758244 2.618533 \n61.499662 199.948347 69.343177 205.083049 4.469057 \n416.875000 0.625000 394.375000 0.625000 1.250000 \n19.426941 16.991567 3.096670 16.243217 2.382934 \n29.855908 40.384423 34.857954 50.383400 2.729331 \n171.453769 399.136975 164.820107 410.876517 2.468039 \n496.943482 208.541196 484.323284 207.504677 2.286970 \n54.722254 222.262780 44.645206 224.399390 7.410432 \n79.051400 255.590775 76.002901 284.414968 2.808918 \n437.492592 494.314565 437.982716 509.460504 5.401673 \n172.804972 260.722558 174.791335 241.787545 3.729535 \n242.030241 243.003330 231.073519 229.023473 3.429902 \n110.625719 435.650677 100.598579 435.931449 3.818506 \n116.890199 1.370490 96.870711 0.767373 1.776408 \n369.318245 155.580181 394.389408 155.021040 3.665456 \n79.610425 231.974131 74.334818 232.894731 4.338815 \n80.616631 134.094030 105.631670 133.348917 3.636687 \n104.639413 258.043296 109.658834 274.287295 1.476142 \n199.320274 244.275623 207.618770 239.705733 3.776827 \n58.622719 261.836277 59.848591 238.020694 4.543591 \n232.751653 242.672543 226.342556 230.254656 2.727252 \n432.407320 494.310621 431.052533 509.413352 2.378319 \n295.627701 16.810691 271.867110 15.812887 3.022262 \n323.690080 190.468042 315.739168 161.843288 2.408804 \n217.916823 264.348239 219.517891 251.893369 1.558549 \n253.437435 115.525471 261.950504 142.249146 3.246459 \n461.859077 478.225234 438.112621 474.452923 2.607312 \n166.063226 271.870235 166.232038 243.113888 5.051279 \n426.966803 509.421083 427.314256 499.304226 3.962313 \n385.671197 426.932377 376.698994 434.156402 2.945998 \n416.949825 35.467103 383.096147 33.667902 3.014982 \n506.875205 1.344615 489.374850 1.349603 3.752494 \n138.167688 397.444448 146.521022 413.311356 5.065173 \n167.039436 233.796337 152.673456 229.714015 5.847654 \n177.826016 259.779973 188.285695 256.079176 2.429238 \n249.606370 247.186812 235.482304 243.703623 2.127978 \n175.035574 421.581812 180.493365 433.878628 2.535471 \n197.982750 107.937095 208.299929 109.318913 5.121684 \n255.627550 287.436402 243.122130 287.493204 3.761317 \n17.596374 490.890457 0.035885 455.920833 4.473096 \n214.270946 187.316346 203.054972 184.672024 4.510454 \n243.129840 12.960800 269.393866 13.734926 1.949179 \n6.640064 280.926151 1.717464 256.653444 3.957979 \n119.473090 83.082742 128.760061 104.639920 2.649659 \n135.706954 274.636471 148.159036 270.733590 2.456780 \n195.619813 244.709714 193.503648 236.774028 2.737665 \n29.452973 0.954034 48.174606 2.539093 2.174727 \n74.458131 199.386983 76.450668 185.563835 1.783380 \n106.904335 56.208724 73.109775 54.720788 2.552563 \n283.126253 79.503014 260.616176 79.723302 2.695595 \n391.342230 436.194474 394.950323 447.489804 4.382549 \n394.391355 1.550158 416.897240 2.683259 1.436981 \n-0.248520 443.546170 23.809101 493.442468 6.092284 \n378.759178 336.983141 373.248742 305.603270 3.495422 \n412.871578 488.097410 410.541294 509.501973 3.998545 \n201.474836 22.051468 191.797914 0.107758 3.061796 \n204.483029 285.642580 206.990027 270.236889 3.500538 \n345.693276 281.863143 345.856182 265.627320 4.987207 \n465.697913 265.760905 483.973291 255.956156 3.224058 \n46.921997 169.350532 28.075583 133.150728 3.583348 \n179.521575 435.618489 180.246940 451.947322 5.327913 \n330.738863 235.813088 320.098128 242.254670 4.080660 \n509.383651 27.201007 490.613698 27.699091 1.746940 \n42.331436 137.258853 26.273530 104.061301 2.684844 \n77.786746 185.585833 78.803047 176.808773 3.868889 \n-1.017931 492.821908 55.054891 505.622377 15.113714 \n204.870715 263.219232 207.065469 251.673590 4.851213 \n363.247960 194.291871 323.910270 190.663598 7.564965 \n415.214637 506.880710 414.970917 489.366707 1.475987 \n150.624834 42.882011 131.874843 42.894802 1.261938 \n196.891135 22.565428 164.379678 23.325195 2.324097 \n216.948461 276.886065 218.633148 265.701541 4.080536 \n43.139919 17.852776 70.694170 19.362867 2.479376 \n54.500439 504.899948 92.007923 507.282114 10.217582 \n439.390016 3.423256 464.383794 3.817583 1.624502 \n125.659163 7.392537 143.179351 8.209704 2.613762 \n225.621919 59.762118 253.126032 59.663909 2.575861 \n197.996882 226.513455 182.309119 232.072608 4.369662 \n143.149516 276.340928 130.578648 276.771400 4.004480 \n232.400961 290.495600 227.547257 270.767139 2.167577 \n34.444759 258.736927 0.553211 255.031638 2.057698 \n49.311032 149.134416 64.251858 145.161862 5.474508 \n190.617635 237.830501 192.433523 245.492633 2.495888 \n88.443410 256.795586 85.877427 286.896518 2.384793 \n78.121460 9.312815 101.874659 9.248727 1.861500 \n131.764034 366.685025 151.935545 368.796636 3.267268 \n218.102409 43.945195 205.571327 44.603842 2.562165 \n240.986370 479.612301 229.944108 496.427880 2.479791 \n314.310736 165.641436 320.918982 191.480127 3.914931 \n20.697483 424.141370 5.245725 419.347489 2.553088 \n278.052957 48.822275 289.435435 47.338672 2.317471 \n17.287331 29.171379 28.670788 52.222761 1.798745 \n358.692989 281.880958 358.876824 264.356661 3.789130 \n376.749297 254.216221 369.718519 245.352517 4.694093 \n490.615544 30.024280 509.380571 29.728900 2.657081 \n71.932595 56.980963 105.722813 58.682078 3.116760 \n226.745906 295.649716 222.457824 273.252736 2.455402 \n316.819659 0.990469 329.594580 2.924915 2.397695 \n410.987995 452.159127 414.125776 461.954832 7.477364 \n66.893967 16.433122 44.381789 15.466842 2.980135 \n106.850590 133.451106 131.897388 135.325898 2.399722 \n433.926168 509.402109 434.519060 491.879874 1.502914 \n26.870479 52.693432 0.610265 52.968557 2.499863 \n81.974765 171.921831 80.545919 136.827327 4.357104 \n344.446768 304.384069 347.129112 283.157111 2.023688 \n351.491639 272.004243 350.387079 258.044917 3.146712 \n437.184643 445.240324 430.949735 440.221574 4.868667 \n88.162071 286.878320 91.523977 249.343560 2.731428 \n249.364557 56.598232 228.097670 57.400665 2.356829 \n81.457615 256.926515 79.596517 241.847659 4.334234 \n464.377050 20.432977 439.366557 20.166035 2.486517 \n68.015436 245.833088 69.902107 235.493098 3.689092 \n99.401555 435.445162 21.748923 423.978824 2.597955 \n81.882830 13.640652 108.143172 13.920637 2.486531 \n349.403585 1.445759 370.725512 2.865660 2.328359 \n24.922470 106.628388 39.412226 138.795160 3.080335 \n113.923185 284.172648 107.590600 259.193584 3.344870 \n203.108476 31.412437 178.095742 32.305952 2.453782 \n314.397133 45.859709 279.386521 45.096486 2.444920 \n33.049730 80.101183 44.421636 105.604205 2.668838 \n200.495338 479.416194 210.298553 510.272964 6.657711 \n476.599453 257.226900 467.109278 260.138590 6.436826 \n61.890042 1.631936 81.967861 2.874433 1.793019 \n100.483780 507.158368 128.094948 509.701304 3.291927 \n191.725361 221.608182 178.598829 228.969877 3.270746 \n478.390870 477.927030 463.460196 457.875409 7.295767 \n98.128854 2.984646 116.899024 3.499997 1.352450 \n135.599710 46.848610 136.489318 88.133311 4.233850 \n15.642237 7.919190 0.642758 6.662967 1.871581 \n438.063859 22.972820 454.391825 22.260851 2.443173 \n251.512312 467.854275 243.435976 478.674075 2.497141 \n354.359373 198.309787 325.603602 195.878040 1.895957 \n146.851175 130.476130 156.991555 128.853311 2.041119 \n215.181070 269.330061 212.901126 291.852337 2.739078 \n49.145863 108.891289 33.819750 76.545810 2.735325 \n73.802769 218.078784 54.884582 222.330413 6.248751 \n92.880535 506.541297 99.469806 507.284892 4.968463 \n195.843903 395.392645 186.975019 408.194292 5.484932 \n208.110989 421.687705 206.999992 414.356059 6.366734 \n215.081436 293.217776 217.060373 278.149345 2.215947 \n238.645445 477.428153 250.890490 465.907175 2.677337 \n125.886292 429.987371 111.998036 435.913349 1.962284 \n156.250987 399.662885 182.408485 382.697538 5.213971 \n213.358454 245.564643 217.228499 260.533607 3.004855 \n335.633936 243.146609 320.617411 249.356649 4.820213 \n509.646196 306.889468 508.246265 333.131469 1.780937 \n379.609699 119.321986 386.689884 150.666814 2.871754 \n130.616060 45.420035 149.384874 44.601369 2.443154 \n75.669187 286.299546 31.889371 282.937845 3.451889 \n104.375755 11.563341 81.875887 11.508831 1.292393 \n126.788004 360.078307 108.220995 320.579875 3.857796 \n504.795826 333.142796 505.958888 305.639119 2.656204 \n389.483639 150.596671 380.301301 115.383454 2.207854 \n478.151673 38.614803 456.883997 37.868577 3.068281 \n204.169062 268.102154 202.647020 281.821974 2.898236 \n374.379554 23.241764 355.609353 23.973765 2.790364 \n487.734453 245.107738 477.353966 257.283349 5.176830 \n355.514487 313.114664 357.622289 290.577983 2.838342 \n197.200289 236.504648 198.723651 242.984257 3.364395 \n244.348775 33.684263 264.362011 33.413821 2.482882 \n218.280509 278.079630 223.377914 295.551211 2.899722 \n445.615410 473.183262 459.403344 475.452804 2.888118 \n230.665479 105.613576 224.741854 84.624242 1.940876 \n222.111645 84.306271 227.954631 104.424481 2.246301 \n376.870531 21.786232 390.648540 21.092540 1.751259 \n385.960425 252.942239 378.125984 245.623946 5.240046 \n21.845994 21.887691 29.477701 39.330065 2.075420 \n406.917985 265.232436 453.161029 270.295961 1.496653 \n29.751528 140.449851 44.848539 172.904724 2.847466 \n116.053806 27.923332 107.955800 10.704575 2.127923 \n175.273688 51.870173 175.411296 41.854889 5.068221 \n344.329038 280.509588 342.311559 303.163878 3.095330 \n243.136021 23.450781 226.904595 23.999861 1.798679 \n271.875366 31.219263 244.374606 31.236224 1.266960 \n218.119733 18.218339 231.896399 18.995807 1.741025 \n429.437199 184.468337 405.621630 183.187670 2.630635 \n145.427530 13.197200 150.304233 26.535251 2.032468 \n175.597522 35.257390 196.915285 33.663942 3.087347 \n339.001021 229.982214 348.645421 224.371016 3.696759 \n141.771478 393.255255 149.412366 399.327985 5.268964 \n193.014210 6.917503 198.832256 22.083214 0.989790 \n280.703476 5.311352 269.323882 6.265076 2.075059 \n405.622508 395.724005 381.856103 395.125902 3.717366 \n494.459293 202.853313 483.078379 203.833906 3.134595 \n254.506291 458.513142 335.588474 470.864774 2.119275 \n44.356550 220.545291 65.899047 215.558970 2.334310 \n271.882878 171.646828 260.603166 171.257359 1.637468 \n499.506555 249.463781 505.128391 241.133435 3.807624 \n346.922747 453.894378 333.184158 452.529521 4.357644 \n221.533595 450.325733 234.196227 454.872842 1.930437 \n464.546398 74.341511 470.657479 105.618654 2.481914 \n63.079694 212.991586 44.745998 219.217493 3.148902 \n72.985402 74.386418 71.859897 60.626235 1.959158 \n150.526733 61.827776 152.323880 105.657848 4.463795 \n183.135132 371.669175 154.393250 370.254272 4.114227 \n472.121948 101.903103 473.120947 93.124539 1.807334 \n55.649919 132.082179 42.095993 133.712387 4.021704 \n150.568268 357.309270 163.179633 358.956801 1.853936 \n182.522431 377.853423 155.343194 395.838171 3.433463 \n207.751870 49.350504 208.450701 74.365901 2.987715 \n268.793362 20.716983 270.173864 29.446345 2.664566 \n475.649150 137.605671 456.881606 136.732935 1.655107 \n131.971927 410.776856 120.255824 418.254998 5.559707 \n412.722670 397.837339 393.960486 424.078628 6.253370 \n111.804929 233.933682 136.833635 236.102385 1.411603 \n425.522384 45.644459 428.855941 63.223431 2.223335 \n18.253278 312.078859 8.099398 310.833793 2.633550 \n216.799712 184.377444 216.872540 149.374995 1.304614 \n403.973322 418.294992 415.556680 400.580326 3.420452 \n149.382313 239.302955 110.650752 235.371309 2.398539 \n96.167759 265.409588 103.188670 283.099730 1.880676 \n117.482784 36.654515 119.273006 51.738753 4.081245 \n322.862184 91.945686 326.563824 105.708693 2.089549 \n180.250278 36.814060 181.561488 55.646828 3.046387 \n493.153764 496.711862 509.555077 499.603661 2.027932 \n441.870766 298.199499 414.317683 296.633422 2.425038 \n224.801459 43.126734 224.862454 28.126982 1.305901 \n277.507984 65.397621 282.056461 78.059816 2.444154 \n492.744526 68.194033 495.459041 83.155111 2.236684 \n30.611571 283.237769 16.907058 281.605792 1.389040 \n73.839870 119.358312 74.598802 151.869776 4.478264 \n145.513832 84.381397 144.286818 63.058145 2.280440 \n216.981275 20.466704 218.310259 31.853378 3.434899 \n31.953778 313.446751 19.437840 312.384551 2.596750 \n151.772195 24.412225 147.191146 11.760527 1.722288 \n329.144267 105.695239 325.343730 93.210623 1.923876 \n500.253667 49.441395 503.579794 68.043682 2.240957 \n76.140426 58.887718 80.109393 73.267315 3.947413 \n224.247919 13.160710 220.718025 0.598860 2.028927 \n31.900434 229.102479 18.153512 227.819500 1.360747 \n69.442058 80.614995 72.625028 101.949592 3.394881 \n119.084192 28.143096 117.994595 10.633115 1.791024 \n348.145999 127.645840 333.120077 126.987339 1.686625 \n110.548286 223.275835 99.589891 217.702479 3.323388 \n429.400356 177.767701 408.080312 176.254710 2.405244 \n478.115372 132.060706 456.793071 130.955198 2.496647 \n480.739645 191.847997 474.487585 165.304062 2.574196 \n4.409934 306.640305 13.152302 307.941575 2.104697 \n211.894676 194.127355 195.549228 192.828692 2.038088 \n271.891380 165.169002 255.617477 164.584440 1.742779 \n366.247951 190.671639 368.495420 160.652733 2.119725 \n469.429091 301.209279 445.633060 299.275800 2.086862 \n1.602069 56.254711 8.281317 66.775763 4.891161 \n70.390036 108.203472 74.146531 119.451303 3.163190 \n231.366519 61.875333 231.347967 103.124763 2.502811 \n369.374379 436.363632 363.922446 445.585449 5.332759 \n224.393459 125.342260 210.620555 124.443092 1.817377 \n473.285143 168.093293 477.951555 191.661849 1.954532 \n141.890153 236.664623 166.850691 238.462496 1.250000 \n468.666007 255.398414 461.254722 259.316236 3.962737 \n130.698192 154.893227 115.599192 153.383030 1.989973 \n158.961018 104.468330 159.661838 79.417995 5.172829 \n210.276462 418.582882 206.683129 406.038007 3.429876 \n438.125000 311.875000 413.125000 311.875000 1.250000 \n69.444049 63.120684 70.071524 73.159595 2.417153 \n166.982640 80.618336 167.228130 130.629402 3.737683 \n228.649420 28.105186 229.171751 41.929907 2.545412 \n30.380280 3.071513 31.448456 23.147695 3.094193 \n291.405380 28.118770 291.206201 43.132710 1.448867 \n191.879497 274.313648 176.777388 273.206604 1.773580 \n172.429308 11.866220 172.587984 21.883506 1.388428 \n235.485522 455.258918 254.357357 458.236812 2.014058 \n256.728403 114.369592 257.741534 86.906968 1.756060 \n219.877532 148.128788 219.500630 198.125947 1.476112 \n187.291479 113.142854 186.836193 155.637977 3.897092 \n318.692874 65.636505 318.414422 79.380864 2.550125 \n36.287081 24.414050 35.366815 10.559122 3.074414 \n83.375141 136.852369 87.331590 180.583692 2.151942 \n225.628900 176.874542 228.591872 202.113681 5.548874 \n371.816999 432.116211 357.947644 356.907707 3.374729 \n84.565941 15.615590 85.739608 39.430954 2.250859 \n221.893187 190.625270 222.486208 150.634063 1.564939 \n197.246527 376.869664 196.151458 300.617439 1.303720 \n213.443352 74.263814 211.761799 50.544408 3.740612 \n466.262593 109.449997 463.341674 85.598466 3.241177 \n91.488082 146.812183 94.319894 185.719989 4.738228 \n180.632441 209.048127 171.330952 173.266426 3.170427 \n428.115051 313.695394 438.133806 313.870145 1.424207 \n74.592940 152.027082 76.268617 163.398553 5.857730 \n297.104687 143.138152 298.749664 114.410769 2.138611 \n388.539228 414.948884 401.924025 398.403445 6.889920 \n421.931288 149.381592 425.592386 118.121180 2.113923 \n88.700756 166.824258 86.167239 138.077212 1.941653 \n319.314049 209.389274 313.161486 183.116456 2.796178 \n500.187726 71.813791 499.057349 56.804782 1.929686 \n121.931328 9.373745 122.377393 29.391659 1.500315 \n226.015459 151.827493 227.832104 166.758550 4.477412 \n355.084869 331.399897 343.128783 313.535865 2.764717 \n491.616231 83.168851 489.075489 68.175755 2.067823 \n45.413561 20.628073 45.777149 45.640958 2.463400 \n282.972269 51.872038 282.632966 69.365456 1.443689 \n51.643669 200.711172 40.868229 171.784396 2.342737 \n361.048778 106.926735 363.340887 88.151356 1.695216 \n156.884664 390.639342 179.310046 375.528604 2.455887 \n103.055209 15.635955 105.413178 30.658249 2.397875 \n191.516858 301.834883 195.115637 381.841685 2.117301 \n210.285291 306.665265 217.227063 336.793883 2.907776 \n289.073204 234.946104 297.001444 239.135723 2.731510 \n336.839650 450.670381 327.757983 443.596166 2.958382 \n217.725166 338.199835 211.681623 406.857978 2.310680 \n255.742512 227.370295 283.351677 231.669190 2.825011 \n202.842126 66.868771 203.227281 49.377252 1.304732 \n214.505890 411.895896 219.300547 381.863114 2.074610 \n371.267082 160.584582 369.187544 191.862537 1.416480 \n13.186861 206.587476 30.940785 210.407269 2.784755 \n122.468853 383.345787 110.240335 347.004436 2.335792 \n230.562913 203.367587 227.767312 217.057222 3.173962 \n262.990764 109.376577 263.269915 133.137983 2.631984 \n96.075888 151.795361 98.506669 165.557587 1.809638 \n186.393053 49.408557 185.514828 36.795635 2.841266 \n93.348249 186.872709 93.340701 194.375217 4.996224 \n156.104923 78.262386 155.247196 65.650695 4.564391 \n232.253199 149.345564 233.324489 163.109473 1.634224 \n77.634320 100.820004 75.928257 85.591027 3.855607 \n119.478633 214.810967 150.700022 218.785705 2.299226 \n381.161055 149.520637 378.857980 138.230466 1.949871 \n377.491610 176.948983 374.499120 201.889892 2.333286 \n476.442492 223.198581 474.098735 209.422000 1.651585 \n"
  },
  {
    "path": "thirdparty/LSD/chairs.pgm",
    "content": "P2\n512 512\n255\n 45  45  42  41  42  41  40  40  50  56  67 105 160  88  39  34 \n 34  34  34  67  75  69  72  74  63  45  29  33  52  67  73  79 \n 80  81  80  80  75  73  74  73  73  71  58  59  80  96  75  74 \n 67 103  99 132 228 227  88  25  32  32  28  31  41  48  47  43 \n 44  48  47  47  47  47  50  48  46  45  42  37  59  82  59  38 \n 34  33  31  27  29  46  31  27  27  25  26  39  31  28  34  42 \n 40  38  35  37  36  36  38  37  37  35  36  36  38  37  30  36 \n 65  72  53  46  33  33  44  51  29  29  31  41  36  28  26  35 \n 40  43  44  38  38  41  53  59  61  62  65  68  70  78  97 145 \n128  89  74  72  78  79  83  80  71  70  60  48  41  36  35  32 \n 30  36  44  45  42  39  39  37  38  38  40  41  43  47  53  57 \n 53  56  72 105 101  69  59  58  58  57  53  61  61  56  46  39 \n 35  33  34  35  34  34  38  41  39  38  38  39  44  44  46  46 \n 47  47  45  43  43  47  53  54  51  49  55  55  45  43  35  35 \n 36  36  39  38  38  36  35  36  37  35  40  45  47  47  53  70 \n 31  33  29  33  30  40  39  37  36  37  39  40  41  39  40  41 \n 41  47  51  53  54  54  50  45  39  50  53  35  34  36  36  35 \n 35  36  35  37  46  48  42  37  29  50  62  35  36  34  32  33 \n 32  30  32  34  37  41  49  47  39  33  29  89  47  37  37  37 \n 37  37  46  56  66  74  81  79  76  69  88  84  70  72  76  72 \n 78  78  72  71  68  66  64  52  47  53  62  59  59  55  54  53 \n 49  43  37  35  34  32  34  32  32  32  34  33  34  37  33  43 \n 72  68  62  60  57  53  55  53  48  45  44  43  44  41  36  35 \n 35  33  37  48  51  44  34  30  30  29  29  29  31  29  27  29 \n 30  29  30  29  27  26  21  25  52  75  72  43  44  45  47  47 \n 48  53  52  56  57  55  54  50  47  51  50  45  41  43  42  41 \n 38  38  39  35  33  30  30  30  29  29  30  29  29  26  22  22 \n 32  55  81  78  37  33  31  32  31  33  33  34  34  31  32  30 \n 29  32  36  34  38  42  41  35  34  34  33  34  34  35  36  35 \n 35  33  31  28  28  29  29  29  28  24  26  51  90 103  97  62 \n 32  28  31  32  34  33  31  33  35  35  35  38  35  32  35  37 \n 37  34  34  37  33  34  32  31  29  29  31  30  29  31  33  33 \n 77  78  78  78  75  74  74  73  73  73  75  73  75  78  56  39 \n 34  35  32  45  91  74  75  77  73  51  30  32  63  72  71  71 \n 67  66  65  63  63  65  67  76  80  84  89 100 113 122 146 145 \n 84  91 129 185 213 213  96  27  32  27  27  29  44  49  58  78 \n 88  88  84  81  77  76  80  81  78  79  84  89  97 112 120 101 \n 90  81  39  26  33  43  31  28  28  25  24  40  34  28  33  40 \n 40  40  38  41  43  45  52  53  52  54  53  52  49  47  48  45 \n 45  57  54  45  39  40  49  53  29  27  33  41  30  25  25  34 \n 43  42  38  35  36  48  76  67  64  63  59  57  56  59  58  57 \n 58  60  63  66  70  75  81  91 101 147 161  90  40  36  32  30 \n 33  38  44  43  38  38  37  39  39  43  77  96 100  98  95  88 \n 79  76  79  81  85  80  81  87  93 101 108 116 125 128 152 113 \n 41  35  34  35  35  32  35  42  39  37  39  41  45  49  50  52 \n 54  55  53  46  43  46  53  53  51  50  50  56  49  44  37  35 \n 36  36  37  37  38  37  36  37  38  36  39  44  47  47  44  73 \n 40  33  32  31  30  38  38  37  36  36  40  40  42  42  42  43 \n 42  47  52  55  54  53  50  46  39  42  63  36  36  36  36  33 \n 35  37  36  38  45  47  41  37  30  37  77  40  37  36  34  32 \n 34  32  33  34  35  40  49  46  40  37  26  69  71  39  38  36 \n 39  49  90 104 100  96  91  87  83  78  76  73  65  65  69  69 \n 78  85  94 108 117 127 141 137 140  92  63  62  59  57  55  55 \n 48  46  38  36  35  32  33  32  34  34  35  46  74  89  96  98 \n 95  94  89  89  89  84  84  88  83  85  92  98 105 108 106 104 \n 97  88  75  56  53  43  36  30  30  30  29  30  30  29  27  28 \n 29  29  29  28  27  27  29  32  31  56  92 100 104 104  98  94 \n 93  93  85  88  90  91  95  93  96 103 105 110 110 111 111 109 \n101  85  47  37  32  29  30  29  27  28  29  29  29  29  29  30 \n 31  27  27  33  37  33  30  32  34  37  40  36  37  35  36  36 \n 32  36  39  39  34  34  35  34  37  38  37  37  37  39  41  42 \n 43  38  33  31  29  29  29  29  30  30  30  31  26  27  32  42 \n 33  31  30  32  34  33  36  38  38  40  42  47  49  48  53  52 \n 51  54  54  52  52  52  48  45  43  43  42  40  38  41  43  45 \n 64  63  64  62  68  71  69  71  81  92 106 115 136 185 121  50 \n 35  33  33  30  88  86  82  89  87  66  29  34  31  33  42  50 \n 59  57  55  53  51  53  53  53  52  50  50  50  51  54  81 125 \n118  88 128 185 207 205  90  26  34  31  28  29  41  48  50  46 \n 44  47  53  53  54  53  51  52  50  52  52  54  55  60  67  78 \n101 159 141  63  28  39  32  28  30  25  25  42  35  29  33  42 \n 41  58  95 101 103  99  88  85  85  83  87  87  90  94 103 108 \n109 114 121 121 110 131  96  56  27  27  33  42  35  27  26  34 \n 42  40  33  34  34  31  26  31  44  53  54  54  54  54  57  57 \n 58  54  51  49  50  51  50  48  45  45  58  85  57  40  36  31 \n 31  38  45  42  38  36  40  43  44  52  67  55  46  47  51  54 \n 58  58  58  59  61  61  56  55  55  54  52  52  52  56 102 115 \n 89  47  35  33  34  30  35  45  42  40  37  88 166 167 169 171 \n177 185 160  57  45  47  54  55  52  51  50  51  59  44  38  38 \n 34  35  36  37  35  36  39  38  38  38  39  44  49  48  41  63 \n 58  32  32  29  29  37  38  38  36  37  38  39  40  41  43  45 \n 45  48  51  55  54  53  50  47  36  32  69  43  36  35  35  35 \n 35  36  36  38  43  46  44  39  29  26  77  49  37  37  38  35 \n 34  35  36  36  36  41  50  48  43  40  27  39  93  44  38  38 \n 41  46  48  54  63  62  60  61  59  58  59  57  55  57  53  53 \n 52  51  50  49  48  49  55  71 125 135 108  63  60  56  56  54 \n 50  45  41  38  36  33  33  32  33  35  40  60  70  68  59  53 \n 49  47  50  52  51  49  49  48  49  46  47  49  53  54  61  78 \n 97 118 165 144  79  44  34  29  31  30  29  31  27  28  28  29 \n 26  26  27  27  28  27  28  29  45  64  62  58  53  51  50  50 \n 47  47  49  47  45  44  44  46  47  51  53  56  60  71  88 107 \n142 175 125  65  35  31  30  30  29  29  29  29  30  29  29  31 \n 31  29  28  28  34  35  35  44  59  70  78  81  85  89  91  88 \n 86  90  89  86  92  93  89  92  97  94  91  92  92  94 101 113 \n 93  59  39  32  30  28  28  29  30  29  29  30  30  28  29  30 \n 33  30  31  34  32  39  63  80  93  93  97  97  93  89  85  82 \n 79  76  76  73  82  84  90  96 101 105 111 117 128 137 146 126 \n 56  56  55  54  54  56  55  55  52  52  57  57  62  88  97  78 \n 37  35  31  33  67 105  94 123 144 114  25  31  33  34  41  52 \n 61  57  54  52  50  49  50  51  50  50  50  51  50  47  43  47 \n 70  84 110 154 202 206 105  26  35  34  28  29  38  44  30  32 \n 40  51  58  59  55  54  52  52  51  52  50  50  50  50  48  46 \n 45  52  72  83  44  41  33  27  30  25  24  41  36  30  32  42 \n 43  50  52  53  54  54  54  55  53  54  53  53  54  53  54  57 \n 61  62  66  73  87 170 158  97  26  30  35  44  35  28  27  32 \n 43  41  33  34  32  29  31  32  48  54  54  52  54  56  72  79 \n 74  64  47  45  45  44  43  39  42  45  49  51  62  46  37  33 \n 32  36  46  44  40  40  45  50  55  47  46  40  48  53  56  59 \n 59  58  59  58  58  58  59  59  56  56  53  54  54  56  53  57 \n 69  62  35  37  35  31  36  45  43  41  37  95 179 173 173 176 \n180 191 185  66  45  45  53  55  54  53  50  48  63  48  38  35 \n 34  34  35  36  36  37  40  39  39  40  41  44  50  47  42  49 \n 73  39  30  29  33  39  40  39  38  40  41  42  41  41  44  45 \n 46  48  53  55  56  54  50  46  37  31  62  55  35  37  35  37 \n 37  36  35  37  43  43  44  40  33  23  66  64  33  36  37  36 \n 35  35  38  37  37  41  49  52  47  42  31  25  95  56  42  41 \n 39  33  39  47  64  64  59  58  58  57  54  55  55  54  53  53 \n 52  51  51  51  50  50  50  47  47  48  79  70  58  56  57  54 \n 51  48  44  41  38  36  35  34  34  35  35  33  39  56  60  58 \n 57  58  57  56  54  54  51  50  51  50  50  50  51  52  50  48 \n 45  46  55  63  84  51  31  30  32  31  31  30  29  29  29  29 \n 29  28  28  28  28  30  27  31  33  35  39  47  49  52  54  52 \n 49  51  49  50  49  49  48  49  49  51  51  48  48  45  42  42 \n 45  50  61  73  37  32  29  30  29  28  29  27  30  31  31  32 \n 29  29  29  29  33  37  49  85 104  96  91  85  80  73  66  61 \n 62  58  58  58  60  62  64  70  72  75  77  82  91 105 148 200 \n179 117  45  33  33  30  29  28  29  29  29  31  29  29  29  27 \n 31  31  34  36  37  49  67  65  58  55  56  54  50  48  49  51 \n 50  49  52  51  53  53  50  50  54  55  61  65  78  94 139 150 \n 58  53  52  53  53  52  51  52  52  51  51  53  52  53  54  73 \n 58  39  38  35  45 115 182 193 179 120  28  32  33  35  41  55 \n 58  58  56  55  50  46  48  47  50  48  49  49  47  44  45  47 \n 53  64  98 125 175 195 130  32  36  36  29  29  36  44  31  33 \n 39  51  56  56  51  51  51  49  49  49  47  46  45  46  47  45 \n 46  48  51  59  62  49  37  28  31  23  27  38  33  29  32  41 \n 41  35  38  41  53  56  58  57  54  53  54  54  54  52  53  53 \n 53  54  53  56  50  45  53  78  52  31  38  46  37  27  26  30 \n 43  42  36  36  35  32  32  31  53  57  56  54  50  54  85  97 \n 70  55  44  40  38  38  37  35  36  42  47  49  55  52  35  32 \n 30  33  45  46  42  39  82 163 154  68  44  38  46  51  58  60 \n 60  59  61  60  60  60  61  60  57  55  55  53  54  55  57  55 \n 55  65  47  37  34  34  35  43  42  43  38  74 184 186 187 191 \n201 201 198  91  46  48  52  53  53  51  50  48  62  55  39  37 \n 35  34  35  36  37  37  37  38  39  40  43  44  48  49  43  41 \n 76  52  34  28  29  39  41  40  40  44  43  44  41  43  45  45 \n 48  48  51  54  55  55  49  45  41  33  48  66  36  39  38  37 \n 38  37  38  39  43  46  43  41  35  26  46  80  35  37  36  36 \n 37  39  39  39  40  43  50  54  51  46  37  23  74  88  43  42 \n 40  33  36  38  61  61  57  55  57  54  56  56  54  52  51  52 \n 51  48  50  47  47  46  46  47  49  48  47  59  59  58  58  55 \n 50  48  43  42  40  37  36  35  34  35  32  29  35  55  61  58 \n 59  59  58  57  54  51  49  48  47  49  49  51  50  50  48  47 \n 49  48  49  50  48  52  36  33  33  32  30  30  30  30  30  30 \n 29  28  28  30  32  29  29  31  31  36  44  51  54  55  55  52 \n 50  49  47  48  47  47  48  48  48  50  50  50  49  49  46  48 \n 48  46  43  38  40  33  31  31  31  30  30  31  33  33  30  31 \n 30  29  29  27  32  36  41  42  37  40  44  46  51  50  49  50 \n 50  50  50  49  48  50  50  50  49  48  48  47  43  40  36  39 \n 48  61  55  37  29  28  28  29  31  31  30  29  30  30  28  27 \n 32  32  34  33  35  33  32  33  39  42  46  46  44  44  43  45 \n 47  54  83  89  77  54  46  44  46  47  47  47  44  41  37  35 \n 58  53  53  52  51  51  50  49  51  51  51  52  52  51  50  54 \n 73  42  38  35  35  86 179 180 171 129  32  28  32  34  39  53 \n 59  59  54  51  50  47  45  45  46  47  47  47  46  46  48  50 \n 51  54  91 114 158 189 155  41  35  39  29  31  35  45  32  31 \n 35  51  58  56  51  51  51  50  49  48  47  44  43  43  45  43 \n 46  45  50  51  65  56  37  30  31  25  26  39  33  29  30  40 \n 43  36  37  40  52  58  55  56  52  55  56  61  59  55  53  53 \n 53  54  54  54  54  54  53  53  66  39  38  48  42  31  31  31 \n 46  44  39  38  40  36  37  31  53  61  60  56  55  58  65  64 \n 48  41  41  37  35  36  35  34  35  41  47  51  51  57  37  31 \n 30  32  44  44  40  38  73 158 139  70  43  37  44  54  61  61 \n 62  63  63  62  65  67  63  61  57  56  55  55  55  56  56  56 \n 54  64  59  38  32  32  35  44  44  45  41  61 176 184 188 193 \n200 203 203 107  42  48  50  55  54  52  48  45  58  60  39  37 \n 35  35  35  39  40  38  36  37  39  40  43  44  48  48  42  37 \n 69  62  30  29  31  40  42  41  41  43  42  44  43  43  44  45 \n 48  48  50  53  55  57  49  47  43  33  40  74  39  39  39  42 \n 40  40  40  41  45  50  44  42  40  33  33  83  42  39  41  41 \n 41  40  42  42  44  49  53  55  55  51  44  29  51 116  49  43 \n 41  35  36  35  52  60  56  55  55  55  57  56  52  51  50  51 \n 50  48  48  48  46  47  46  47  48  46  47  54  64  60  58  56 \n 52  48  44  44  42  38  37  34  35  36  34  33  33  52  64  58 \n 58  57  57  57  54  50  49  47  46  46  48  48  47  47  46  45 \n 46  49  48  51  49  54  43  33  36  35  34  31  33  31  29  32 \n 31  31  31  33  34  32  31  34  34  37  48  54  57  57  55  52 \n 50  49  49  47  44  45  45  46  46  48  49  49  48  46  47  47 \n 47  46  44  43  43  34  31  31  31  30  29  33  34  35  34  34 \n 31  30  30  28  31  35  31  34  42  50  53  52  54  53  51  51 \n 50  49  49  46  47  48  49  48  48  50  47  49  47  48  48  46 \n 44  42  39  39  29  29  30  30  30  32  32  32  31  29  26  27 \n 31  33  37  36  33  30  33  36  44  46  46  46  46  46  44  42 \n 42  61 150 148 116  52  45  44  44  44  46  46  44  44  45  45 \n 59  56  54  52  54  53  49  48  49  50  52  53  51  52  50  48 \n 72  59  36  36  34  44 146 179 179 167  33  29  31  34  38  49 \n 62  59  54  51  47  45  44  44  44  44  44  44  47  45  48  48 \n 48  47  78 106 117 159 170  48  35  44  28  31  36  48  34  34 \n 33  48  57  56  53  52  50  47  47  48  47  42  39  40  45  44 \n 43  45  45  48  63  69  42  30  33  26  29  38  35  28  33  42 \n 47  40  43  44  55  60  61  56  56  61  66  66  61  56  54  53 \n 53  53  54  55  57  55  52  50  64  59  57  66  67  63  64  67 \n 72  76  72  73  76  75  76  73  87  91  87  83  77  72  68  55 \n 45  45  43  36  32  34  35  33  35  42  46  48  50  57  42  29 \n 30  31  43  44  41  40  54 159 142  84  38  36  42  53  60  62 \n 63  75 111 122 134 148 164 145  69  54  56  56  56  56  54  55 \n 53  55  68  42  31  32  35  44  43  46  43  43 176 195 197 198 \n200 202 199 125  38  49  53  54  53  53  48  45  51  69  40  38 \n 36  34  35  36  38  38  39  37  38  40  41  43  47  47  42  36 \n 48  82  29  30  33  40  42  42  42  42  42  43  43  44  43  45 \n 49  50  51  54  55  55  52  48  44  38  31  66  48  42  42  43 \n 49  53  53  55  60  65  64  63  59  57  49  85  80  57  53  50 \n 49  49  45  44  48  50  56  62  61  58  52  35  34 119 109  73 \n 55  38  39  35  51  59  57  54  55  55  54  54  54  52  53  52 \n 49  48  46  48  48  47  49  47  48  47  45  51  68  60  57  55 \n 53  51  46  44  44  43  40  38  39  39  34  35  32  44  61  59 \n 58  57  55  54  51  48  48  46  45  44  44  45  45  46  45  44 \n 45  47  47  49  50  53  51  37  36  36  35  33  32  31  30  31 \n 32  35  35  37  40  38  36  39  40  41  49  58  59  57  55  55 \n 53  49  48  46  45  47  46  44  42  43  46  47  47  46  47  48 \n 48  47  44  43  44  39  35  33  31  32  33  33  34  34  34  34 \n 32  30  29  30  28  35  35  41  43  51  55  57  55  55  53  53 \n 50  48  46  45  47  47  48  48  49  50  48  49  48  50  48  48 \n 47  44  37  37  30  29  30  31  33  33  33  33  32  32  29  27 \n 32  35  38  37  33  33  36  40  46  47  47  47  47  46  45  43 \n 40  55 161 149 119  46  45  42  43  45  45  45  44  47  46  44 \n 60  56  56  56  56  55  53  52  51  54  53  54  55  54  51  51 \n 65  75  38  34  35  32 107 175 183 172  29  28  30  32  35  48 \n 62  59  54  50  48  47  45  44  44  45  44  45  45  46  47  47 \n 48  48  65 100 109 115 111  42  39  46  32  32  37  52  37  34 \n 33  48  57  57  53  52  49  48  46  46  46  42  38  39  42  44 \n 44  43  43  47  55  78  53  40  44  40  41  49  45  43  46  52 \n 51  45  48  46  53  61  61  59  55  57  59  56  54  52  53  53 \n 54  53  53  55  55  55  55  60  98 100  93  88  77  71  67  67 \n 70  68  67  65  65  68  75  76  86  91 100 113 125 129 173 139 \n 58  43  43  35  33  35  37  34  36  41  47  47  48  55  49  30 \n 30  32  42  46  42  41  47 147 152  92  37  36  43  56  62  63 \n 63 139 200 200 211 212 209 206 130  52  55  54  55  55  56  56 \n 51  52  70  50  32  31  37  46  46  46  44  41 116 137 136 132 \n125 118 107  80  41  49  53  53  53  53  50  44  47  73  48  39 \n 37  35  37  37  38  39  39  39  40  41  41  42  47  49  43  38 \n 38  81  40  29  36  43  42  43  43  43  43  45  46  45  46  45 \n 47  48  51  54  54  56  54  49  46  41  28  49  65  56  91 103 \n112 111 106 105 106 103 101  98  88  90  95 103 108 106 105 111 \n116 117 115 114 109 102  89  73  60  60  60  54  45  91 150 156 \n109  36  37  35  50  59  58  54  55  55  55  55  56  54  55  54 \n 51  50  48  46  47  47  57  57  60  58  55  56  77  69  59  56 \n 53  49  43  42  45  48  47  44  42  41  35  36  32  41  60  60 \n 58  57  55  53  50  50  50  49  46  44  42  40  44  45  46  43 \n 44  47  49  46  50  54  62  54  52  55  55  56  60  57  56  53 \n 53  52  44  43  42  39  40  43  43  43  57  64  61  58  55  54 \n 51  49  47  45  46  47  46  44  44  43  43  45  49  48  47  46 \n 49  48  45  44  45  42  35  34  36  34  35  38  38  38  36  35 \n 34  34  34  31  33  38  39  44  49  55  58  59  58  59  54  55 \n 51  49  46  45  44  46  48  47  46  47  47  49  48  48  48  48 \n 45  45  41  39  29  28  32  34  35  35  33  33  34  34  32  28 \n 32  38  39  39  36  34  37  43  49  51  48  47  46  45  45  44 \n 42  48 104 101  81  43  44  43  41  41  42  43  42  44  46  44 \n 77  76  76  73  74  75  75  75  74  75  76  75  78  76  70  68 \n 72  90  52  38  34  33  59 152 177 171  43  27  30  30  34  46 \n 61  57  55  51  49  53  54  56  60  64  65  65  66  66  64  65 \n 64  64  71 101 110 103 136  66  45  52  39  38  40  55  38  33 \n 31  45  56  56  52  52  50  49  47  45  43  41  40  41  53  65 \n 70  77  85  91  90  95  89  83  75  71  78  83  87  93  99 108 \n114 116 125 135 135 155 126  73  54  55  56  56  53  52  52  53 \n 52  51  52  52  50  52  48  48  39  33  37  42  43  42  41  42 \n 43  41  39  38  39  37  37  42  42  47  48  47  45  46  79  95 \n105  60  42  39  36  35  37  35  36  41  48  48  49  49  60  31 \n 29  30  43  45  40  39  41 110 140  80  37  37  41  54  62  63 \n 70 168 184 194 201 200 211 207 178  66  57  54  55  55  54  55 \n 51  50  63  67  29  32  39  45  46  46  43  41  36  37  39  39 \n 39  41  44  46  47  49  51  54  55  53  52  46  40  61  64  40 \n 37  38  40  42  42  40  39  38  39  40  42  43  47  49  45  40 \n 31  66  62  29  38  44  43  41  41  43  45  44  44  45  43  44 \n 47  49  52  53  54  58  57  52  48  46  31  35  75  76  76  68 \n 66  62  56  58  58  56  54  53  49  45  40  38  35  35  38  40 \n 49  53  64  81 107 134 182 183 111  72  67  66  74 102 131 154 \n114  34  38  34  50  59  58  54  54  56  56  55  59  72  87  95 \n100 104 107 106 102  99  93  92  87  86  91  93  97 101 106 106 \n110 113 113 116 120 122 115 111  73  46  36  34  32  38  57  61 \n 58  58  56  54  52  51  48  49  46  43  41  40  41  40  52  69 \n 87  95 104 109 112 110 111 107 102 103  99  95  95 100 103 109 \n117 122 128 129 136 143 153 157 168 158 128  92  67  60  53  50 \n 48  46  44  44  44  43  44  44  46  44  43  44  47  48  49  48 \n 48  46  47  49  58  66  59  60  67  69  73  72  74  75  78  78 \n 79  77  79  77  71  74  76  73  77  81  80  80  78  82  75  65 \n 57  51  46  44  44  45  46  45  45  45  48  47  47  48  47  48 \n 47  44  41  40  34  34  35  38  40  37  38  40  41  42  40  39 \n 40  47  46  48  46  43  44  51  53  52  53  50  47  48  50  49 \n 47  45  42  44  42  40  39  42  39  39  41  41  41  44  44  44 \n 85  79  74  71  71  73  74  77  74  76  85  90  99 109 118 126 \n138 169  92  37  33  32  41 106 151 165  46  25  31  29  32  43 \n 61  58  53  51  53  71 101 101 101  99  93  87  85  83  79  82 \n 85  89  98 111 126 127 187 140 117 120 107  98  59  53  39  33 \n 33  43  56  56  53  52  50  48  46  44  41  41  41  43  72  81 \n 71  66  57  50  49  51  47  46  45  41  39  40  41  43  46  48 \n 48  50  57  61  67  87 111 101  63  59  56  56  53  52  52  53 \n 51  49  51  52  50  51  41  34  30  32  43  47  42  37  36  37 \n 36  36  36  37  36  35  38  37  38  42  46  50  55  56  51  53 \n 68  74  41  38  36  35  37  36  39  44  46  48  49  46  61  38 \n 30  31  43  45  40  40  38  44  49  44  40  37  41  54  62  63 \n 62 153 202 206 188 186 206 211 200  84  54  56  56  54  56  55 \n 51  48  55  76  33  32  39  45  47  46  43  39  41  43  47  45 \n 44  43  44  46  47  48  50  55  55  55  55  48  38  50  74  43 \n 37  39  41  43  41  41  41  39  40  41  41  43  46  47  46  41 \n 32  46  83  35  37  44  44  43  43  44  45  44  43  42  42  42 \n 46  49  53  55  57  61  59  55  51  50  38  31  46  44  48  52 \n 57  58  57  56  57  57  53  55  50  43  39  35  36  35  34  34 \n 35  36  33  34  35  38  53  70 101 100  68  78 115 133 113 124 \n 88  32  36  33  51  59  59  56  55  55  56  54  70  93  94  85 \n 74  69  63  56  52  49  45  45  43  40  41  41  42  44  47  48 \n 54  56  63  69  84 110 147 187 164 100  30  31  30  36  52  60 \n 59  58  55  55  52  51  48  50  47  46  44  43  39  41  72  83 \n 77  69  60  57  54  51  43  41  41  40  41  41  41  44  41  40 \n 42  45  49  51  56  58  69  82 110 136 153 139  91  58  55  54 \n 49  47  45  45  45  44  43  43  45  45  46  45  45  45  48  46 \n 45  47  65  93 108 112 110 108 102  99  89  87  80  78  79  79 \n 79  79  86  89  90  98 104 114 130 136 147 162 170 183 181 136 \n 76  54  48  44  44  45  42  42  43  44  46  46  46  46  47  47 \n 46  45  41  39  40  49  69  80  86  89  91  96  98  96  89  88 \n 90  89  89  94  92  88  93  98 100  93  84  76  68  59  55  58 \n 56  56  48  44  40  41  38  39  36  38  38  38  39  41  44  44 \n 53  51  48  48  46  44  40  39  39  36  35  35  36  37  38  44 \n 61 122 118  87  38  35  33  68 122 120  45  27  30  27  33  42 \n 58  57  54  50  47  45  40  46  52  58  65  69  72  71  72  74 \n 77  76  75  77  76  77  80  87 103 112 132 179 181 120  51  40 \n 35  45  58  57  53  51  49  47  46  43  39  40  39  39  31  31 \n 39  43  40  38  37  34  32  33  37  38  34  34  35  37  38  37 \n 36  37  37  40  46  51  50  58  66  60  57  56  55  55  54  53 \n 51  51  49  49  48  46  42  33  32  30  41  45  40  36  36  36 \n 37  35  35  37  36  35  37  39  38  39  41  46  53  55  57  56 \n 52  66  54  37  37  35  38  37  40  46  46  47  49  48  55  53 \n 30  30  42  45  41  41  40  41  43  41  39  37  42  54  62  62 \n 57 125 201 208 197 183 201 213 211 110  49  56  56  57  56  56 \n 53  50  47  73  50  34  41  46  45  45  43  41  41  44  44  44 \n 42  42  43  45  48  49  50  54  54  56  55  50  39  37  75  52 \n 42  41  42  42  40  42  41  40  40  40  42  42  43  47  46  43 \n 33  31  83  55  37  47  44  43  45  44  45  45  43  42  41  41 \n 46  48  55  55  59  63  61  61  57  53  46  37  37  38  42  50 \n 54  56  57  57  56  54  53  50  47  41  36  36  33  33  31  31 \n 31  31  34  33  35  34  38  39  43  69 106 116 117 126 141 189 \n136  30  35  36  50  62  59  55  54  54  56  56  45  36  40  49 \n 55  51  43  42  40  39  38  37  39  36  36  35  37  36  36  37 \n 37  37  35  37  37  36  33  34  43  84  57  32  29  39  53  59 \n 58  57  58  57  54  52  49  49  47  47  45  42  40  42  38  35 \n 39  40  38  36  35  36  36  35  34  34  47  88  96  79  35  36 \n 34  32  33  35  37  37  38  38  35  33  31  35  70  64  52  52 \n 49  47  46  46  45  47  45  44  45  43  43  42  43  44  46  43 \n 44  48  59  58  48  44  39  38  40  41  38  40  40  39  40  39 \n 40  40  41  40  41  37  36  34  36  36  38  45  68  95 137 127 \n126  85  47  45  44  45  41  41  42  42  44  45  45  45  47  48 \n 45  43  36  43  77  94  94  87  81  76  69  68  65  65  57  56 \n 54  54  51  52  58  59  69  82  95 105 123 126 132 146 162 172 \n153 113  71  51  42  39  38  39  35  36  37  37  37  40  41  43 \n 57  54  51  51  54  53  51  49  44  45  43  41  37  36  35  38 \n 36  34  58  84  60  41  35  40 114 130  53  25  29  26  34  43 \n 58  58  53  50  37  27  30  49  86  92  82  78  70  64  60  59 \n 60  61  64  63  64  69  73  75  82  88 104 120 140 159 136 138 \n 71  44  61  58  54  52  49  47  48  45  42  42  40  34  31  30 \n 43  46  37  33  35  33  36  37  38  40  37  37  37  38  37  38 \n 39  40  38  42  48  51  54  50  62  63  61  58  57  54  54  54 \n 52  49  49  49  47  47  41  33  33  30  42  47  41  35  34  34 \n 36  36  35  35  37  36  37  38  37  38  40  44  53  56  55  53 \n 53  58  61  39  35  35  38  38  43  46  45  48  51  47  50  63 \n 31  32  43  45  41  41  41  43  44  42  38  38  40  52  64  61 \n 56  93 207 214 205 195 206 198 186 108  50  56  57  58  57  55 \n 51  49  45  60  75  36  40  47  46  46  45  42  42  43  43  44 \n 43  44  44  44  47  49  52  54  56  56  55  51  44  33  66  62 \n 40  41  43  42  42  41  40  40  41  41  43  42  46  48  49  46 \n 38  27  77  80  38  47  47  45  51  53  56  57  58  59  58  56 \n 56  53  53  59  62  62  60  59  58  57  51  47  42  41  42  49 \n 54  55  55  55  56  55  52  51  48  43  37  36  35  33  32  32 \n 31  32  32  34  33  35  33  32  40  54 118 151 186 198 187 201 \n126  35  37  36  53  61  58  55  53  55  56  56  39  37  43  55 \n 57  53  45  40  38  38  36  36  35  36  37  35  39  37  36  35 \n 37  37  35  36  37  38  39  38  39  41  54  40  30  38  56  60 \n 57  58  58  56  56  52  50  49  46  45  44  43  40  36  32  37 \n 42  42  38  35  35  36  34  35  33  34  52 129 132 118  32  34 \n 33  33  32  32  33  34  33  35  35  36  39  39  40  58  55  53 \n 48  47  45  45  44  45  45  45  47  45  42  43  43  43  45  42 \n 41  41  39  41  44  42  41  39  37  38  38  41  41  38  38  38 \n 37  37  37  38  37  37  37  38  39  39  41  40  39  40  41  41 \n 48  75  53  45  43  44  43  44  41  41  43  44  45  41  44  45 \n 45  43  35  40  42  40  40  40  41  41  40  42  46  46  43  40 \n 41  39  36  34  36  37  36  39  41  43  45  48  51  57  69  94 \n130 135 121  63  45  41  38  37  37  37  36  37  35  39  38  43 \n 87  92  89  89  87  86  79  75  78  83  87  86  86  88  91  86 \n 85  89  80  85  95  73  53  30  85 134  65  23  28  25  32  42 \n 57  57  51  50  37  26  28  35  32  32  38  41  42  42  40  37 \n 37  35  35  37  36  33  34  33  32  33  35  36  38  42  75 148 \n140  97  66  59  55  52  50  47  46  44  41  40  41  35  31  28 \n 41  49  43  40  43  49  61  64  71  72  70  72  79  85  90  89 \n 88  78  82  85  87  91  94  92  86  92  87  73  53  53  52  53 \n 52  50  49  46  45  46  42  32  32  27  40  50  40  36  35  35 \n 36  37  35  36  38  38  38  38  38  39  41  44  52  56  53  52 \n 53  48  66  47  37  36  39  40  43  44  44  46  46  41  35  58 \n 43  31  43  44  41  40  40  43  43  41  38  37  39  54  61  59 \n 58  63 112 109 121 144 122  67  52  51  52  55  58  56  56  55 \n 54  48  44  43  93  47  41  47  47  47  44  44  45  43  43  44 \n 46  47  47  44  45  47  50  52  56  57  56  54  46  33  48  82 \n 39  42  43  43  41  42  42  41  40  41  43  45  47  48  49  46 \n 45  45  87 119  99 108 111 111 110 105 105 101  95  92  91  93 \n 97 106 112 115 118 121 125 129 130 132 124 109 104  64  42  50 \n 53  54  53  54  57  55  50  49  47  43  37  35  35  33  31  29 \n 29  30  33  34  64  98 110 112 111 111 118 132 135 142 141 148 \n110  87  94  92  99  94  93  92  87  80  74  67  53  47  48  61 \n 61  54  50  42  37  37  36  36  36  36  36  35  36  36  35  36 \n 37  35  36  35  35  36  36  37  38  41  47  46  31  40  59  60 \n 59  58  57  58  56  52  48  49  45  45  47  46  41  36  34  37 \n 45  46  40  38  35  35  34  35  35  35  46 120 130 120  34  33 \n 34  33  34  34  32  34  35  34  34  34  36  37  35  52  57  52 \n 48  49  47  50  49  50  50  52  51  53  55  53  50  52  49  46 \n 44  38  42  43  45  45  40  42  40  41  44  44  41  40  38  35 \n 35  35  36  36  36  35  36  35  35  34  34  34  35  38  40  43 \n 44  39  48  43  44  43  42  41  42  40  43  43  42  43  46  46 \n 47  45  37  31  31  32  36  40  41  40  36  36  35  35  33  34 \n 36  35  37  35  32  32  30  31  35  33  29  31  33  31  35  34 \n 30  29  53  69  47  40  37  36  38  38  37  35  34  36  38  43 \n 42  43  47  49  51  51  47  44  42  42  43  44  47  48  56  59 \n 71  82  93 109 137 164 164  71  54 125  72  21  31  26  32  43 \n 56  56  50  50  39  29  25  25  30  33  40  46  44  39  35  34 \n 34  35  36  34  33  34  34  33  32  33  31  34  34  34  33  39 \n 56  87  75  59  54  53  50  48  47  44  42  42  41  36  30  29 \n 39  55  76  99  98  96  90  75  70  66  64  66  66  64  64  63 \n 62  62  68  73  80  87  95 105 128 141 181 169  85  54  54  52 \n 50  50  50  48  46  47  43  33  33  26  38  53  39  37  37  35 \n 37  36  36  37  38  40  41  39  40  39  41  43  51  55  55  53 \n 54  49  66  60  39  35  39  42  43  45  45  46  43  40  30  47 \n 58  35  43  44  41  42  41  41  43  42  37  38  38  52  60  59 \n 59  60  58  59  58  63  60  59  57  56  54  56  57  56  56  56 \n 54  50  45  36  87  64  40  46  47  47  45  47  47  45  44  45 \n 47  47  47  46  47  49  50  51  54  57  56  54  49  38  35  86 \n 49  40  44  41  38  40  42  42  41  41  44  45  48  50  51  49 \n 55  78  92  88  83  78  71  67  65  62  60  59  56  53  50  49 \n 49  46  47  46  48  54  59  62  72  78  97 131 194 158  81  47 \n 53  53  53  55  58  55  52  51  49  44  38  36  36  33  32  31 \n 30  31  33  40  58  60  65  65  62  55  51  46  47  45  48  50 \n 50  52  53  54  56  64  71  81  93 105 120 133 140 141 128 121 \n 84  60  51  42  39  37  36  37  38  37  37  36  36  36  35  36 \n 36  38  39  37  38  38  40  42  49  54  68  80  75  85  92  91 \n 89  88  90  93  98  97  91  88  85  81  76  69  62  50  39  37 \n 48  46  45  45  39  36  33  35  34  34  39  69  79  72  37  34 \n 33  34  36  36  36  36  35  34  33  33  34  33  33  47  68  80 \n 93  97 104 107 113 115 110 110 107 107 108 108 108 109 111 109 \n102  97  93  92  86  75  60  54  48  49  54  51  50  45  40  38 \n 36  35  37  36  37  34  35  34  34  35  33  33  33  35  39  43 \n 46  38  45  44  44  44  43  45  45  43  44  44  48  46  47  49 \n 52  47  40  32  38  35  41  44  42  39  35  37  36  36  34  35 \n 37  38  37  36  37  36  33  35  35  31  29  29  29  28  31  31 \n 32  35  37  41  50  40  40  39  38  37  38  36  35  35  38  43 \n 27  33  45  50  47  45  37  37  33  33  32  32  34  32  30  32 \n 30  30  34  36  34  74 128 123  71 101  77  21  30  26  31  38 \n 59  56  48  47  40  28  27  27  30  32  38  47  44  37  35  33 \n 34  32  34  32  33  35  33  32  32  34  32  33  35  35  34  37 \n 38  42  68  64  54  52  50  49  48  45  43  41  42  35  32  28 \n 36  56  56  41  35  35  38  39  36  39  40  40  38  39  38  35 \n 36  36  35  38  41  45  48  47  46  45  74  85 116  88  52  52 \n 51  49  48  48  49  45  42  31  35  29  34  50  43  38  37  36 \n 34  35  37  38  38  40  40  38  38  38  38  42  51  54  55  52 \n 51  47  56  68  42  37  40  43  41  41  44  44  42  37  29  31 \n 72  44  45  45  44  43  42  42  45  43  35  37  38  51  59  59 \n 61  60  59  59  61  60  60  59  55  55  55  55  57  57  57  57 \n 56  51  45  37  62  91  37  45  47  47  46  47  48  50  49  48 \n 47  47  47  48  49  50  51  51  55  56  56  56  49  41  28  75 \n 77  42  42  41  39  38  41  43  42  41  44  46  49  52  53  52 \n 50  41  45  57  61  62  58  58  58  57  57  57  54  52  50  47 \n 44  40  40  39  38  37  39  41  40  40  37  35  37  53 100  69 \n 53  51  54  55  57  55  52  51  51  45  35  35  38  35  33  31 \n 31  32  35  34  25  33  50  59  58  57  52  50  45  42  37  35 \n 36  36  36  35  33  33  29  30  30  31  30  32  54  77 113 178 \n177 115  56  44  39  38  36  38  38  36  35  37  37  36  36  36 \n 35  37  37  37  39  46  84 109 110 104  91  87  76  67  60  58 \n 52  49  48  44  47  51  55  61  72  82  92  99 117 123 131 139 \n145 139 145  99  50  39  34  35  35  34  34  35  34  34  34  35 \n 35  34  35  35  36  36  35  34  33  33  34  33  32  54 114 106 \n 90  84  73  64  54  55  53  51  48  46  46  46  47  46  49  49 \n 56  63  81  87  96 109 126 137 158 179 195 181 138  83  44  38 \n 36  34  35  35  35  35  35  34  35  35  35  31  31  35  37  39 \n 42  42  43  45  43  42  48  56  66  71  74  75  78  83  84  87 \n 88  87  78  75  75  73  77  82  76  68  62  60  60  57  49  47 \n 46  44  48  47  48  46  41  39  36  33  30  29  32  31  29  27 \n 28  31  36  34  43  40  40  37  38  36  36  36  35  35  38  42 \n 30  30  45  54  47  40  37  33  33  32  33  33  34  33  33  33 \n 31  31  32  33  32  31  32  58  80  90  75  21  30  26  31  41 \n 58  57  49  47  40  26  28  26  30  29  38  49  46  38  36  35 \n 33  34  35  34  37  36  35  34  34  34  35  34  37  37  38  37 \n 38  37  57  66  57  53  52  50  48  46  43  42  40  35  31  30 \n 31  33  27  26  37  43  44  39  34  35  34  35  33  34  33  33 \n 32  33  33  35  36  40  43  47  54  56  55  54  63  77  61  53 \n 52  49  49  48  48  47  42  32  36  29  34  51  42  38  37  37 \n 35  36  38  39  39  40  39  40  39  39  40  43  50  54  55  55 \n 48  45  50  69  49  38  41  44  41  39  44  44  40  36  30  22 \n 65  56  46  47  46  45  42  43  47  42  34  37  40  53  60  59 \n 60  59  60  57  57  60  59  57  56  55  54  54  58  58  58  57 \n 58  53  47  40  44 100  46  46  47  49  49  47  49  52  50  49 \n 49  49  49  50  49  52  53  52  54  56  57  57  52  46  30  52 \n102  50  47  46  44  43  44  45  45  45  46  48  53  57  59  58 \n 42  35  44  52  65  63  59  58  59  57  57  57  55  52  52  47 \n 44  40  36  36  37  36  37  37  37  36  39  39  40  40  50  65 \n 53  49  54  58  58  56  55  55  50  45  40  40  44  41  36  32 \n 31  35  37  30  27  31  45  62  60  58  53  45  40  38  34  33 \n 50  58  56  44  33  30  27  28  28  29  30  30  34  32  32  48 \n 67  99  85  47  42  40  39  39  39  39  38  38  36  38  37  36 \n 38  38  37  37  41  46  55  49  43  44  43  41  36  35  37  37 \n 36  34  36  36  36  35  33  32  32  34  36  38  45  49  56  58 \n 70  79 161 167 115  49  35  36  35  36  35  35  36  33  33  34 \n 35  36  35  36  35  36  36  36  34  33  34  30  32  42  43  37 \n 34  35  33  34  37  38  38  37  38  37  37  39  36  36  36  36 \n 36  36  38  38  37  40  44  47  57  74 116 152 180 144  82  41 \n 37  36  35  35  34  34  34  35  35  34  35  32  31  33  36  37 \n 41  41  38  45  44  46  91 118 127 125 120 117 112 107 103  94 \n 91  89  84  83  82  80  82  92  97 100 111 115 118 122 122 125 \n129 128 126 123  98  73  54  46  39  33  33  32  31  32  30  28 \n 29  30  34  35  40  40  40  38  39  36  37  36  36  35  37  42 \n 32  30  46  59  50  42  39  36  36  35  36  37  37  36  36  35 \n 34  34  34  33  34  33  32  33  52  71  60  21  27  26  32  42 \n 59  57  48  46  38  27  29  29  29  29  35  49  52  46  44  46 \n 44  45  44  45  52  55  50  51  53  49  45  44  41  40  43  42 \n 40  39  47  71  61  52  46  44  47  46  44  43  40  35  31  30 \n 29  28  31  25  33  45  43  37  31  32  32  34  34  33  34  34 \n 33  33  33  34  37  37  39  45  54  56  57  58  55  57  71  56 \n 51  49  50  49  48  47  43  33  32  29  35  47  46  40  36  38 \n 35  37  39  40  40  38  39  40  39  38  40  43  50  53  55  53 \n 49  44  45  59  65  41  39  41  42  40  45  46  41  36  33  25 \n 48  66  47  45  44  43  46  45  45  45  34  36  41  51  59  60 \n 59  60  59  59  58  58  56  56  55  55  53  54  54  56  57  59 \n 56  53  47  42  34  78  72  47  45  46  48  48  49  52  51  49 \n 50  50  50  49  52  53  54  54  54  55  58  55  54  51  38  32 \n110  73  55  52  50  49  46  44  46  47  49  51  57  59  65  66 \n 44  38  44  50  61  64  63  61  59  59  57  55  56  55  51  47 \n 44  42  39  38  37  33  33  34  34  34  38  36  36  38  42  52 \n 59  49  51  55  58  59  59  58  53  49  45  45  45  40  37  33 \n 32  36  39  32  32  33  46  63  62  58  51  44  38  36  36  28 \n102 140 137  78  31  32  28  28  27  26  26  26  28  28  27  28 \n 34  35  61  59  43  43  40  42  40  41  39  39  38  39  38  39 \n 39  39  41  39  39  31  26  27  37  42  45  45  36  33  34  31 \n 29  32  34  33  33  32  30  29  30  31  33  33  32  35  34  32 \n 34  36  32  32  66  83  35  35  37  35  36  36  34  33  33  35 \n 36  35  38  38  38  35  36  35  33  34  35  31  30  27  32  32 \n 34  37  38  35  35  34  33  30  31  31  31  33  34  34  34  33 \n 33  33  34  35  34  33  35  35  36  36  36  32  32  35  69  52 \n 35  35  33  35  36  36  35  36  34  35  33  33  32  34  35  39 \n 38  38  37  44  44  49  63  51  41  37  33  32  37  39  42  44 \n 43  40  41  43  41  41  38  37  36  38  39  43  47  48  59  68 \n 86 103 134 171 195 186 148  88  41  37  33  31  33  32  30  29 \n 29  29  28  32  37  39  38  36  37  36  36  37  36  36  38  44 \n 45  48  64  75  76  67  67  65  63  58  59  62  58  56  55  50 \n 45  41  37  36  35  35  34  34  39  64  48  21  26  27  31  41 \n 59  59  48  46  39  27  27  27  28  30  43  74  98  98 106 109 \n 98  92  90  89  97  96  87  90  96 100 105 106 104 106 104  98 \n 94  87  76  84  67  49  48  46  43  45  42  42  43  38  30  29 \n 28  30  35  27  30  41  44  38  35  32  32  31  33  35  34  34 \n 34  34  34  31  35  36  38  42  55  58  56  58  55  52  72  62 \n 51  50  49  47  49  46  43  30  32  28  33  46  46  39  36  38 \n 35  38  39  39  40  40  39  38  38  38  41  43  49  53  54  54 \n 49  45  41  48  77  43  40  41  41  41  45  44  41  38  36  29 \n 36  72  52  46  44  44  45  45  45  45  33  36  41  54  59  59 \n 58  56  56  57  59  59  55  54  54  55  55  56  54  56  57  59 \n 56  54  48  44  33  51  94  53  46  45  46  49  49  51  49  49 \n 50  50  50  51  53  53  59  71  81  93 100 106 108 108 106 101 \n136 128 112 114 108 101  97  93  90  86  81  77  75  70  67  67 \n 53  45  48  54  61  65  61  62  59  58  59  54  54  54  51  50 \n 48  45  42  37  35  34  35  34  35  36  40  37  39  42  52  69 \n 92  91  94  99 104 106 107 107 105 104 103  98  93  89  84  76 \n 69  62  58  42  35  34  47  61  64  59  52  44  38  38  34  26 \n 99 144 142  91  30  32  29  27  27  26  25  24  26  27  26  28 \n 32  34  46  60  40  40  38  40  37  38  37  37  36  36  34  38 \n 40  40  43  43  41  30  30  29  47  48  47  45  35  35  36  35 \n 34  33  32  31  33  31  31  31  29  29  34  33  32  34  30  27 \n 29  30  32  39  40  56  48  35  37  35  34  35  35  33  33  34 \n 38  36  38  38  38  36  36  38  35  34  35  33  32  28  32  32 \n 38  39  39  36  35  32  32  33  34  34  32  34  33  33  32  33 \n 34  34  33  35  32  30  33  34  34  34  35  35  38  37  40  45 \n 38  34  34  36  36  35  35  34  34  34  34  34  32  34  35  38 \n 38  36  36  45  44  34  32  33  35  36  39  38  37  36  35  37 \n 38  39  37  41  40  40  38  38  39  38  38  40  38  35  38  37 \n 37  38  41  50  69  73  87 106  55  36  32  32  33  32  32  31 \n 30  30  27  29  36  40  38  36  38  37  36  36  37  36  39  43 \n 92  86  86  84  83  81  84  84  85  83  88  93 100 106 114 123 \n125 130 138 157 116  51  36  34  31  52  67  27  26  26  31  42 \n 60  57  50  46  40  26  27  28  29  36  57  76  64  53  50  47 \n 41  41  39  38  41  43  41  44  44  43  48  53  57  63  77  89 \n103 113 132 150 169 160  86  50  42  44  42  41  40  38  29  29 \n 31  32  35  30  28  40  43  38  34  31  33  32  32  33  33  34 \n 33  34  33  31  35  38  37  41  54  57  57  54  54  53  64  69 \n 53  49  50  50  50  48  45  31  32  27  32  44  45  39  36  37 \n 38  37  38  40  40  40  39  38  39  39  40  42  47  53  54  53 \n 49  44  40  37  75  61  40  41  41  41  44  47  43  39  37  31 \n 23  62  66  49  44  43  43  44  47  45  31  34  41  53  61  59 \n 57  55  55  56  56  56  56  54  53  54  52  54  54  54  57  58 \n 58  54  51  48  38  30  97  72  46  44  47  50  48  49  49  50 \n 51  51  50  49  50  61 101 112 112 111 103  93  86  83  77  75 \n 71  70  71  71  67  65  72  80  88  96 105 119 132 141 155 165 \n164 169 158 101  61  61  58  59  60  60  59  56  56  55  53  52 \n 53  46  42  41  40  36  34  35  35  35  51  86 114 117 109  98 \n 90  81  71  66  61  60  56  55  54  53  55  57  64  75  84  91 \n 99 111 123 132 140 145 147 144 137 111  59  45  42  36  34  31 \n 73 122 129  86  32  32  29  29  27  26  25  26  27  27  29  30 \n 39  70 103 121 122 117 117 116 114 112 107 106 107 106 104 100 \n 91  89  89  82  71  59  55  49  59  60  54  50  43  39  43  44 \n 39  38  34  32  31  32  32  30  31  32  32  31  30  30  28  28 \n 28  29  30  28  35  36  49  38  35  35  34  34  35  34  37  38 \n 38  39  39  40  39  38  37  38  39  39  37  37  36  31  29  31 \n 39  39  38  37  38  37  36  35  32  33  34  35  32  30  31  32 \n 33  33  34  35  33  32  33  34  34  35  33  32  34  33  35  39 \n 41  35  34  34  34  35  35  34  34  34  36  36  35  36  38  39 \n 36  31  37  45  40  29  33  34  35  38  38  36  38  37  33  33 \n 35  37  38  39  42  41  40  40  40  38  40  40  38  35  35  33 \n 34  34  34  36  36  37  36  35  54  38  34  35  33  33  30  30 \n 28  28  28  29  34  39  38  39  38  38  38  36  36  40  51  90 \n 44  42  40  40  38  40  40  42  36  35  35  37  39  41  45  50 \n 54  58  66 122 156 131  53  33  33  32  73  31  26  27  28  42 \n 56  58  54  48  42  25  27  27  28  34  33  33  29  35  42  43 \n 40  38  39  36  37  36  38  38  38  39  40  40  40  42  47  50 \n 53  55  61  67  82 111 135  90  44  43  41  39  40  38  27  28 \n 28  33  31  32  27  41  44  39  31  29  33  34  32  32  32  32 \n 35  34  34  32  35  37  38  42  53  56  56  54  52  52  57  77 \n 56  51  50  51  49  48  47  33  30  28  32  44  44  40  38  38 \n 38  38  37  39  39  41  41  39  42  42  42  43  46  52  54  54 \n 49  45  39  33  65  77  37  39  41  38  44  47  43  39  39  35 \n 23  46  78  54  44  42  42  42  45  44  32  34  41  51  62  61 \n 58  56  53  52  55  55  56  55  53  52  49  52  51  55  59  59 \n 58  56  52  49  40  29  74  93  46  48  46  48  48  49  50  50 \n 51  51  48  47  50  53  49  52  62  75  74  71  70  68  65  65 \n 62  62  59  59  57  55  51  46  42  40  41  45  49  57  62  67 \n 81 115 185 185 114  63  56  60  60  60  59  57  58  57  56  52 \n 52  48  43  41  39  36  32  32  34  38  49  53  51  53  53  51 \n 49  47  47  45  47  45  42  40  38  38  36  35  34  35  35  34 \n 38  41  44  47  51  56  68  79 134 167 131  65  39  36  36  36 \n 41  49  51  48  35  31  29  29  28  27  26  27  27  27  29  30 \n 51  81  76  66  65  61  59  55  55  55  52  54  55  60  63  64 \n 69  74  81  86  96 105 119 123 132 134 135 125 105  83  69  58 \n 41  39  35  33  32  34  34  32  30  31  30  30  29  29  28  29 \n 29  29  28  26  29  32  46  43  34  37  35  37  37  35  37  37 \n 38  36  40  40  38  40  36  39  36  36  38  38  37  33  30  33 \n 42  41  39  39  39  39  39  38  35  36  35  36  34  32  32  35 \n 33  34  35  35  35  35  33  34  36  36  34  32  33  34  34  36 \n 38  35  35  35  36  35  34  35  36  36  37  35  36  37  38  39 \n 39  31  37  42  40  30  34  34  37  38  39  38  37  36  35  32 \n 35  37  40  46  74  65  60  58  58  57  56  48  38  36  34  33 \n 34  34  36  32  33  34  37  36  40  38  32  34  35  33  32  31 \n 29  31  30  28  34  39  36  36  37  38  38  37  39  42  59  62 \n 40  37  34  34  31  32  33  34  33  33  34  32  31  32  31  34 \n 35  36  36  29  36  73  91  48  32  28  64  53  26  27  28  41 \n 58  59  52  49  43  27  26  26  26  32  32  36  30  36  45  42 \n 36  37  35  36  35  35  36  37  36  35  37  38  39  40  45  47 \n 50  55  58  59  59  56  63  83  62  47  44  40  41  39  27  28 \n 29  35  31  32  23  37  47  38  31  32  32  31  30  32  33  32 \n 34  34  34  35  35  36  38  41  50  56  56  54  51  49  52  75 \n 67  53  51  49  50  51  47  33  29  29  31  43  42  41  40  40 \n 40  40  40  40  39  41  41  39  41  44  42  43  47  51  56  55 \n 51  46  40  34  48  88  47  41  42  40  42  46  46  40  39  38 \n 27  27  76  63  48  46  44  44  44  43  32  33  42  51  61  59 \n 56  56  55  56  55  56  57  55  57  54  52  50  52  54  57  58 \n 57  54  52  50  43  36  46  99  60  51  48  48  48  49  49  48 \n 49  50  48  47  47  32  31  34  42  63  69  67  65  65  65  61 \n 60  58  56  57  53  52  47  41  36  33  33  34  38  38  34  34 \n 36  37  40  51 107  98  55  59  60  58  56  57  58  59  56  51 \n 49  46  43  40  37  35  33  32  34  35  29  28  37  47  55  56 \n 54  53  53  49  44  41  38  37  35  34  32  32  29  30  31  29 \n 32  33  33  32  32  35  35  35  31  33  60  86  43  36  38  39 \n 37  38  39  38  35  33  31  31  30  28  25  26  26  28  32  33 \n 31  26  31  39  48  48  48  49  51  49  45  41  41  40  38  38 \n 37  36  34  33  30  30  27  30  39  54  77 104 137 162 218 200 \n 88  45  34  34  32  33  32  32  32  32  32  30  28  28  28  30 \n 31  32  28  27  29  31  39  45  36  42  64  79  90  95  97 104 \n107 108 107 105 106 104 105 104 100 100  98  88  84  81  76  69 \n 70  66  58  57  54  50  49  46  44  45  45  42  38  35  34  34 \n 32  32  34  34  35  35  33  35  36  34  33  33  30  31  33  35 \n 38  37  35  36  35  37  35  38  38  37  37  37  37  38  42  43 \n 43  33  38  43  44  35  38  35  41  40  41  41  40  39  37  38 \n 38  40  51 101 120 130 129 131 125 121 117  84  38  36  34  34 \n 35  34  35  33  33  32  33  37  35  37  34  32  36  33  32  30 \n 29  30  31  26  32  38  39  36  37  38  40  39  39  38  34  33 \n 36  34  33  33  33  33  34  34  34  34  36  35  32  32  32  32 \n 35  33  34  36  39  41  69  70  33  33  49  68  35  28  26  39 \n 57  59  54  50  44  28  25  26  24  31  33  37  28  38  46  44 \n 38  34  33  34  35  37  36  36  37  37  38  38  40  41  42  45 \n 49  52  57  58  57  58  56  61  74  54  47  44  39  37  26  28 \n 27  36  30  35  23  38  51  39  34  32  31  31  29  31  32  32 \n 32  32  34  34  35  34  37  41  50  54  56  56  51  49  48  59 \n 83  54  51  49  50  50  46  34  26  27  30  41  41  42  40  41 \n 40  41  41  42  41  42  42  40  42  44  43  44  47  50  56  55 \n 51  47  41  34  36  84  61  41  44  44  44  47  47  44  39  39 \n 30  21  60  69  51  49  47  46  47  44  32  33  42  51  62  60 \n 57  57  56  57  56  57  56  56  57  56  54  52  51  55  55  57 \n 59  56  53  51  47  40  32  89  85  51  53  55  53  51  49  47 \n 48  47  49  50  48  30  31  32  35  54  68  68  67  64  63  62 \n 61  57  54  54  54  52  48  41  37  35  33  33  35  34  31  30 \n 31  33  39  39  52  76  63  58  57  56  57  56  59  58  58  54 \n 50  46  42  41  39  36  34  31  33  36  25  27  32  45  60  59 \n 58  56  53  51  47  41  36  35  35  34  32  31  30  30  30  30 \n 30  31  31  30  30  30  32  32  32  34  36  50  58  39  42  47 \n 46  44  42  42  42  38  32  31  31  29  26  25  26  29  33  34 \n 26  27  31  39  57  57  51  51  52  48  43  39  37  35  34  33 \n 32  31  33  31  28  29  29  29  28  28  28  32  35  39  85 124 \n139 102  28  33  32  32  31  30  30  31  33  31  29  28  29  30 \n 32  34  28  28  27  28  36  52  41  71  99  98  92  84  73  71 \n 65  62  59  61  63  64  62  59  55  59  64  66  72  81  91  99 \n112 124 130 140 147 149 149 135 115 101  64  45  39  36  34  34 \n 32  33  34  33  33  34  34  35  36  34  32  32  32  30  29  34 \n 36  36  36  38  36  37  38  47  67  86  96 100  99 100 102 102 \n101  93  93  96  95  90  91  89  88  85  78  69  63  57  50  43 \n 42  43  81 144 130 134 134 141 138 132 139 106  37  38  36  35 \n 35  34  34  33  32  32  35  35  35  37  34  33  35  34  30  29 \n 30  29  31  26  29  36  41  38  38  38  41  39  39  39  33  37 \n 41  36  36  36  36  35  36  37  38  37  35  36  37  35  35  35 \n 33  33  34  36  38  39  41  82  45  32  37  73  54  34  23  35 \n 51  58  56  54  47  28  26  26  25  32  33  39  30  36  47  44 \n 37  34  34  36  36  36  36  36  36  35  35  38  40  40  41  42 \n 47  52  55  57  56  56  55  50  77  70  50  49  46  39  25  26 \n 28  36  28  35  23  36  49  42  33  31  31  31  32  33  33  34 \n 34  33  34  33  34  34  38  41  48  53  56  55  52  47  44  47 \n 87  65  52  50  51  51  50  35  28  28  31  40  43  42  43  42 \n 43  44  43  42  42  43  43  42  43  44  45  46  46  50  55  55 \n 52  46  40  35  27  58  82  41  37  43  42  45  47  47  45  45 \n 34  22  38  71  56  46  48  50  45  44  33  33  40  50  63  63 \n 61  59  57  59  61  58  60  60  58  58  56  53  51  54  56  59 \n 60  60  59  56  54  46  35  63 108  64  56  55  52  48  49  47 \n 47  47  48  48  49  33  30  33  31  45  61  65  66  64  63  62 \n 59  58  52  51  50  50  46  44  39  36  33  33  34  32  30  30 \n 31  34  37  36  40  54  69  60  58  57  58  57  57  59  56  56 \n 53  50  47  44  41  40  36  35  35  35  25  27  31  40  61  62 \n 59  58  53  50  46  41  36  36  36  35  34  32  31  30  30  30 \n 27  27  29  30  31  30  31  32  32  29  31  36  51  43  65 118 \n132 133 126 111 100  67  36  32  32  31  30  27  28  30  33  35 \n 26  28  33  38  61  61  56  53  49  44  39  36  36  34  32  33 \n 32  30  31  32  30  27  27  27  25  25  27  29  27  28  29  28 \n 36  80  67  34  33  33  32  32  32  34  32  31  31  30  31  31 \n 35  35  30  29  28  28  34  55  43  37  32  30  34  41  44  45 \n 42  40  41  40  39  36  37  35  29  28  27  27  27  27  24  24 \n 23  23  25  28  47  66  98 118 153 212 174 117  49  36  33  33 \n 32  33  33  32  33  33  35  37  38  34  30  32  30  28  26  31 \n 34  35  38  42  36  36  56 102 118 110 103  99  92  89  82  77 \n 70  68  68  71  74  75  74  75  79  83  90  91 104 113 119 123 \n127 130 153 164 168 173 178 177 167 154 147 110  36  39  34  36 \n 34  34  34  33  33  33  32  31  33  36  32  32  35  34  32  30 \n 30  32  34  26  26  36  40  39  38  39  41  46  54  58  58  63 \n 45  41  41  41  41  39  39  40  42  42  42  46  43  42  41  39 \n 35  34  37  38  37  38  36  60  72  37  34  64  76  39  29  35 \n 48  54  56  56  49  29  28  29  24  30  32  38  29  34  47  45 \n 39  36  35  35  36  36  34  35  35  34  35  37  39  41  42  45 \n 47  53  56  59  57  55  54  56  64  83  54  53  51  45  24  24 \n 26  35  26  35  25  33  49  45  35  32  32  32  33  33  32  32 \n 33  32  34  34  35  36  38  40  46  51  56  54  53  49  45  44 \n 76  79  56  52  52  52  53  35  27  28  33  39  43  45  43  44 \n 43  44  44  42  43  44  42  43  43  43  47  47  46  49  54  55 \n 51  46  41  37  31  39  90  53  42  43  45  44  48  50  50  50 \n 40  26  29  69  76  55  49  49  46  44  33  32  36  47  65  70 \n 73  74  79  84  89  87  88  86  85  82  78  74  67  67  65  61 \n 56  56  56  54  56  53  39  49 116  98  63  61  55  53  50  52 \n 51  49  49  50  49  35  28  32  29  41  55  62  64  63  63  61 \n 59  56  53  52  50  51  47  45  41  38  38  37  38  35  34  34 \n 35  38  38  35  39  48  71  67  59  58  58  59  56  59  60  58 \n 56  54  50  47  45  42  36  35  35  37  26  27  29  38  61  62 \n 61  58  54  49  45  42  38  38  38  37  35  34  34  33  32  31 \n 28  29  31  33  34  33  34  33  33  30  30  35  47  48  74 154 \n154 159 157 147 140  95  32  37  34  33  31  31  31  32  36  39 \n 29  33  34  37  64  64  60  55  50  45  38  36  34  34  33  33 \n 32  32  33  31  30  27  27  27  26  26  26  28  26  26  28  28 \n 29  37  79  47  36  35  34  34  34  36  36  36  34  33  32  34 \n 39  38  33  32  30  30  33  53  40  28  31  34  41  46  51  51 \n 42  42  39  37  35  33  34  31  30  30  28  29  27  27  25  24 \n 26  28  29  28  28  25  26  27  34  64  68 104 100  43  35  33 \n 33  34  32  32  32  32  34  37  38  35  32  31  31  30  26  30 \n 34  37  36  37  35  38  51  48  40  35  35  35  33  33  31  31 \n 31  31  30  33  33  30  29  29  28  27  29  30  34  39  42  47 \n 52  58  73  86 121 158 205 226 231 212 168 112  38  40  36  35 \n 35  35  36  34  33  32  31  30  32  36  35  34  36  35  33  31 \n 30  34  38  30  27  36  42  40  38  40  72 104 122 118 119 120 \n101  98  95  89  89  89  90  89  90  88  90  86  83  78  74  59 \n 36  38  40  40  36  36  37  35  88  49  37  41 118 104  30  36 \n 56  55  50  48  46  28  24  28  24  27  29  36  30  30  44  44 \n 36  37  35  32  35  37  39  39  36  37  38  38  39  39  42  44 \n 46  51  56  58  56  53  54  54  53  80  61  51  50  48  24  24 \n 25  33  26  32  24  30  52  47  35  33  32  31  33  32  32  33 \n 32  34  35  35  35  35  35  39  45  52  57  57  53  51  43  39 \n 57  94  60  55  53  53  52  36  23  27  33  39  44  44  44  43 \n 42  43  42  42  43  42  43  44  45  47  45  45  45  45  50  53 \n 50  47  43  41  34  24  80  80  57  56  53  51  52  51  54  54 \n 50  35  26  54  90  90  79  68  59  79  95 104 112 115 118 116 \n107 103  98  95  92  90  87  87  89  89  89  94 104 110 116 121 \n125 126 131 133 130 126 112 102 127 131 103  79  69  61  58  57 \n 58  56  54  53  52  37  28  33  29  41  52  59  61  63  62  60 \n 57  54  53  53  55  56  58  58  60  58  61  64  66  69  69  71 \n 71  75  76  71  69  72  88  88  77  75  74  71  70  70  67  68 \n 63  56  54  52  50  45  36  35  35  37  28  29  28  32  66  65 \n 62  59  57  53  45  43  39  38  37  38  38  35  33  32  32  32 \n 29  32  38  50  60  65  69  78  79  82  81  85  94  99 110 162 \n146 141 143 150 171 133  79  78  68  63  58  55  50  49  48  47 \n 39  40  39  42  68  69  62  59  52  45  38  35  34  35  32  32 \n 31  31  33  32  30  28  27  27  26  25  27  29  27  27  26  27 \n 29  34  61  65  42  45  49  50  56  58  64  67  69  70  71  74 \n 79  82  77  76  71  67  68  70  64  56  54  54  61  62  61  60 \n 52  47  46  42  40  40  34  33  30  29  30  28  26  27  27  26 \n 27  26  27  28  26  26  25  26  28  30  32  26  59  58  35  34 \n 33  31  32  34  33  32  33  37  37  33  33  32  31  33  27  29 \n 35  39  37  38  39  37  29  28  30  32  37  36  35  34  32  29 \n 28  31  30  31  33  32  32  31  30  31  32  32  34  33  32  29 \n 29  30  30  29  24  24  33  56  88 114 123 130  49  38  37  36 \n 34  33  32  33  34  34  30  30  31  32  38  35  36  35  33  34 \n 35  37  40  34  25  32  44  40  39  55  73  65  51  47  43  42 \n 70  69  76  79  79  83  91  97 110 122 132 146 156 165 200 168 \n 62  37  43  40  37  37  38  35  74  68  40  35 100 122  50  41 \n 81  76  48  43  42  28  23  29  24  25  31  35  30  29  44  47 \n 37  38  36  33  34  37  40  42  41  43  40  36  38  39  40  43 \n 47  52  57  57  57  54  53  51  52  67  71  46  44  42  24  26 \n 27  36  28  31  27  31  52  48  36  34  33  33  35  33  33  33 \n 33  34  34  35  35  35  36  39  43  50  55  55  53  50  43  38 \n 42  91  70  55  53  54  52  37  23  26  33  41  43  43  42  43 \n 43  44  43  42  42  42  41  42  45  45  45  44  45  45  49  53 \n 52  49  44  45  37  27  60  91  55  57  56  50  44  45  48  49 \n 49  45  32  46  83 101 118 124  90  83  78  79  71  67  63  59 \n 58  58  56  55  52  51  49  45  42  43  42  41  45  46  47  52 \n 55  57  64  72  82  96 120 153 207 182 149 151 148 135 119 102 \n 76  64  59  59  57  39  29  36  27  39  49  57  60  63  62  59 \n 57  55  62  88 113 120 123 116 116 114 107 100  94  93  88  86 \n 86  86  88  88  86  88  94 101 108 115 120 127 137 140 147 150 \n149 142 129 120  71  41  41  37  37  37  27  28  29  30  66  67 \n 64  60  56  54  46  42  38  38  38  38  38  36  35  34  33  33 \n 31  52 101 109 108 102  91  89  82  76  69  68  65  64  61  63 \n 61  57  56  60  68  70  77  84  94 104 115 122 131 136 139 141 \n142 135 120  98  85  71  67  62  53  45  38  34  34  34  30  31 \n 31  29  32  33  32  31  29  28  27  26  26  28  27  25  29  29 \n 33  58  99 122 116 116 110 108 110 105  95  92  86  81  81  84 \n 85  85  81  83  85  86  89  99 110 115 116 121 132 136 142 148 \n152 146 133 111  71  43  37  33  31  30  29  29  26  26  28  27 \n 28  27  27  29  27  27  27  26  28  27  28  29  33  49  39  35 \n 34  33  33  34  32  32  34  35  34  32  34  33  34  34  28  26 \n 37  42  38  38  40  34  27  29  30  34  37  36  37  37  33  30 \n 29  32  33  35  35  34  33  33  34  33  34  36  35  34  32  29 \n 27  30  30  29  32  33  36  33  31  29  34  55  74  42  36  35 \n 33  34  33  33  33  33  33  28  28  34  38  37  37  36  35  34 \n 34  38  41  35  23  30  47  45  41  39  32  29  28  28  28  29 \n 43  43  43  42  43  42  42  41  39  41  43  43  47  57 148 173 \n160  94  41  42  39  37  38  39  51  88  45  35  61 122  91  65 \n 84  90  65  51  45  28  23  27  26  25  29  34  31  29  45  48 \n 38  38  36  36  35  37  39  43  41  41  37  37  38  38  41  44 \n 47  52  57  57  57  57  52  52  52  52  77  43  35  34  24  26 \n 27  35  29  28  25  30  47  45  37  36  34  34  36  34  35  35 \n 35  34  34  35  35  37  37  39  41  47  54  55  54  47  43  39 \n 32  66  95  52  52  50  49  36  22  26  34  42  43  43  43  44 \n 43  42  43  42  42  41  42  41  41  42  43  43  44  44  48  52 \n 53  49  45  45  38  30  38  95  55  47  53  45  36  34  28  33 \n 42  51  45  45  72  93  90  80  42  39  47  61  63  57  54  55 \n 54  51  56  55  51  47  46  43  40  38  36  36  35  34  35  36 \n 36  35  35  36  35  37  35  32  55  82 129 131 138 146 150 152 \n151 128 110 110 102  48  29  36  26  37  48  55  62  62  61  60 \n 58  56  74  84  64  55  51  47  41  38  40  41  43  45  46  44 \n 43  41  38  38  38  39  36  36  36  31  32  33  34  38  50  64 \n 82 105 137 191 168 118  49  37  38  36  26  28  28  28  59  67 \n 63  59  56  55  47  42  38  36  36  36  36  35  33  32  33  32 \n 37  49  42  35  35  37  40  40  39  41  44  45  45  44  42  39 \n 39  38  35  35  37  37  37  39  42  39  38  38  37  38  52  68 \n 97 120 153 176 195 154  85  60  57  48  38  34  31  32  31  31 \n 30  32  32  32  30  28  28  27  28  28  25  25  28  28  29  33 \n 78  93  77  63  52  47  40  38  36  41  42  40  38  37  36  37 \n 36  36  34  36  37  35  38  34  35  37  36  34  37  43  55  76 \n107 135 172 198 186 140  67  37  34  31  31  30  30  30  30  28 \n 27  26  27  26  29  28  28  28  27  28  28  28  29  37  41  32 \n 32  33  33  33  32  33  35  37  36  37  36  35  35  35  30  28 \n 35  44  40  39  38  33  30  30  33  39  38  38  38  39  36  35 \n 33  38  42  39  39  37  38  39  39  41  44  45  41  38  34  31 \n 31  33  32  31  33  34  35  34  30  30  29  31  42  47  36  37 \n 35  35  34  32  34  35  33  29  28  33  40  38  37  37  34  35 \n 37  39  42  39  23  30  50  49  38  29  28  30  31  33  32  32 \n 38  37  37  38  41  41  41  41  41  43  43  46  50  51  55  61 \n 96 138  64  44  39  36  38  39  42  86  59  38  42 100  72  65 \n 96 115  69  64  48  31  24  28  28  23  30  33  31  28  44  48 \n 39  38  37  37  36  38  42  49  45  41  37  36  38  38  40  43 \n 47  52  58  59  55  55  55  52  49  49  73  56  37  36  25  25 \n 27  37  29  26  26  27  48  46  37  37  36  36  37  36  35  36 \n 35  34  34  34  35  37  38  38  41  47  53  55  52  46  43  41 \n 33  38 106  57  46  47  46  36  23  26  34  43  45  43  44  44 \n 44  43  42  43  42  41  42  42  41  42  43  42  42  43  48  53 \n 54  51  47  48  43  33  27  82  69  34  40  44  42  35  31  36 \n 49  49  41  47  74  96  98  65  28  37  40  53  59  55  55  56 \n 57  54  58  55  51  49  45  41  39  38  37  36  33  32  30  32 \n 34  33  31  31  31  33  34  35  38  42  62 105 147 140 126 122 \n117 126 144 147 130  56  27  37  25  37  48  55  62  64  62  59 \n 56  51  37  36  40  47  49  50  46  44  43  43  41  41  39  40 \n 37  35  34  35  35  36  34  34  37  37  36  35  34  33  34  34 \n 33  36  41  55  57  86  95  45  37  35  25  27  27  29  51  66 \n 64  61  59  57  48  43  40  38  37  37  36  36  34  33  32  33 \n 33  30  29  33  40  43  47  45  41  37  37  35  36  37  36  35 \n 36  36  34  33  34  34  33  34  35  32  34  36  35  37  38  38 \n 36  39  47  54  74  86 123  76  55  51  39  32  31  30  31  33 \n 31  32  33  33  31  29  28  29  29  27  26  26  29  30  31  37 \n 42  36  32  35  35  37  36  37  37  38  38  40  37  34  34  34 \n 33  33  31  32  32  33  36  35  33  34  33  34  36  37  36  34 \n 36  38  47  56  68  75 102  56  34  31  31  30  32  31  32  30 \n 28  27  27  27  30  31  29  28  29  28  28  27  28  33  44  34 \n 33  33  34  32  33  33  37  36  38  44  50  53  54  60  67  68 \n 74  83  87  86  85  84  83  82  82  83  82  77  65  59  52  44 \n 39  42  42  39  39  41  44  46  53  61  57  56  50  43  39  36 \n 33  34  32  33  35  34  35  34  30  28  29  30  29  41  37  37 \n 36  35  35  33  35  33  33  30  25  32  41  40  40  40  42  43 \n 43  43  44  42  30  32  52  55  37  30  30  32  34  37  36  38 \n 38  36  35  37  36  36  37  38  39  40  42  44  44  48  53  56 \n 51  74 107  58  41  40  36  37  40  58  86  46  33  76 112 131 \n188 142 101 107  49  34  23  31  30  23  32  35  33  27  43  48 \n 40  36  35  35  39  40  38  39  40  38  38  36  37  41  42  43 \n 48  53  57  57  56  56  55  52  49  50  62  76  45  40  27  26 \n 30  37  30  26  27  27  46  45  36  36  36  37  37  36  33  35 \n 36  34  36  35  36  37  39  39  41  46  52  53  51  47  42  39 \n 33  24  91  87  54  51  48  39  22  26  36  44  44  43  42  42 \n 44  44  43  43  42  42  42  42  40  42  42  42  42  43  46  52 \n 53  51  48  48  45  37  23  46 101  44  34  37  41  43  45  57 \n 65  65  74  83 100 113 132 106  19  37  35  43  53  56  58  59 \n 59  57  58  56  53  49  44  41  39  37  36  33  33  35  34  33 \n 31  33  32  32  33  33  33  33  33  38  44  58 119 151 150 122 \n115 137 164 209 124  56  27  37  26  37  46  54  60  61  61  57 \n 56  39  27  32  36  46  53  54  49  46  43  41  39  36  36  36 \n 34  36  35  34  34  33  32  32  33  34  34  32  31  31  32  34 \n 34  35  37  35  38  37  53  56  39  37  24  27  27  30  44  61 \n 65  62  58  55  47  43  40  38  37  38  35  36  36  35  32  31 \n 30  28  31  34  44  46  47  44  37  33  32  32  34  33  33  37 \n 34  35  34  32  34  33  33  33  32  29  30  32  32  31  32  34 \n 36  37  37  39  38  39  48  71  60  52  41  34  32  31  30  32 \n 30  30  31  32  32  30  28  28  29  29  27  27  31  32  33  31 \n 31  33  32  34  37  38  36  36  34  33  34  33  33  32  30  30 \n 29  31  29  30  31  32  32  32  33  30  32  32  34  32  34  34 \n 36  36  37  35  37  35  38  53  37  34  30  31  34  31  32  30 \n 29  28  26  26  30  32  32  31  30  28  26  25  27  29  49  38 \n 34  35  34  33  34  35  58  94 119 128 130 127 124 122 117 113 \n104  99  93  92  89  91  95  92  92  94  96 103 109 112 122 129 \n137 139 140 139 136 133 131 135 153 157 145 121  87  76  73  47 \n 37  35  33  35  35  34  34  34  29  27  28  27  28  35  39  36 \n 35  33  35  34  34  34  32  32  25  32  51  64  71  77  80  85 \n 92  95  98 104  95  99 112 115 107 106 107 104 109 113 114 109 \n 39  37  35  38  36  38  38  39  40  39  42  44  46  48  50  52 \n 53  51  92  85  43  41  39  40  43  46  94  58  32  52 109 142 \n190 145 138 147 120  54  21  29  29  22  33  32  33  27  41  48 \n 40  37  36  35  37  39  38  39  41  39  39  37  38  41  42  42 \n 45  50  56  57  57  57  55  51  48  49  53  87  79  64  28  26 \n 30  37  31  23  26  28  44  43  38  37  37  38  37  37  36  36 \n 37  36  38  36  36  37  38  38  42  45  52  54  53  48  43  40 \n 33  26  63 109  68  65  63  47  22  25  37  44  44  44  44  45 \n 44  44  44  42  42  42  40  41  41  44  43  43  44  44  46  51 \n 55  55  51  49  47  41  29  28 106  72  54  50  40  41  64  78 \n 89 103 122 136 138 138 148 102  22  35  34  41  50  54  58  60 \n 59  58  59  57  54  51  47  44  39  38  36  34  35  35  34  33 \n 34  33  33  33  35  33  34  34  33  35  40  40 144 228 242 232 \n208 207 173 203 125  49  27  35  28  37  47  54  58  61  59  58 \n 53  36  26  31  36  46  55  54  51  48  44  43  38  37  34  36 \n 34  34  33  35  34  34  34  33  33  34  35  33  30  32  33  34 \n 36  35  33  33  35  37  41  51  45  37  24  28  28  29  43  57 \n 63  61  57  53  48  45  43  41  38  37  36  36  37  38  36  35 \n 30  27  31  31  45  48  44  42  38  33  33  32  33  32  33  36 \n 36  36  34  38  38  34  33  33  33  34  33  31  32  30  30  34 \n 34  34  32  34  36  38  37  49  58  51  42  36  33  32  31  33 \n 32  30  33  33  33  31  28  27  28  29  27  27  35  33  33  29 \n 31  32  33  37  38  40  38  38  35  33  33  32  32  32  32  30 \n 30  30  30  31  30  32  32  33  34  33  32  33  32  31  33  33 \n 34  32  36  34  35  35  35  39  41  33  32  32  31  29  29  29 \n 29  29  28  28  32  34  34  32  31  28  28  27  26  29  43  43 \n 36  35  34  34  35  43  76  78  62  54  51  53  48  49  44  46 \n 43  42  39  39  37  39  39  37  39  41  41  41  41  43  47  49 \n 52  59  65  74  86 112 143 170 228 249 245 226 168 136 105  51 \n 36  36  36  36  34  34  33  34  30  28  28  27  28  33  36  37 \n 35  34  36  35  37  36  33  33  33  70 124 137 140 139 136 134 \n126 122 112 108 101  99  95  91  88  86  87  87  91  93 100 104 \n 39  40  40  39  39  40  39  40  41  38  38  40  43  44  50  54 \n 54  54  57 111  61  40  39  41  44  44  72  87  33  32  86 133 \n160 135 126 181 170  50  20  29  28  23  31  30  34  30  42  50 \n 41  37  35  36  38  38  40  41  42  40  40  38  39  42  43  44 \n 44  49  54  57  57  56  54  52  49  45  46  77 120 110  27  21 \n 27  36  34  21  25  25  44  44  38  37  37  38  39  37  37  37 \n 38  38  37  37  38  38  38  37  40  43  49  54  51  48  43  41 \n 35  30  36 106  98  93  90  60  21  25  35  43  47  45  45  44 \n 43  45  44  41  40  40  42  42  40  42  43  44  46  47  51  54 \n 57  58  54  51  49  45  34  25  78 110  99 105 100  92 116 140 \n157 144 138 157 176 185 176 109  22  33  34  39  50  53  56  59 \n 60  58  57  55  55  52  47  44  40  39  39  38  36  35  35  36 \n 35  34  34  35  34  35  35  34  34  33  37  43  68 177 245 234 \n201 199 161 197 174  56  24  36  25  40  51  55  59  58  58  58 \n 55  39  23  32  33  45  54  54  51  48  45  43  38  37  33  34 \n 34  35  37  37  36  36  37  35  34  34  35  34  35  36  34  35 \n 37  36  35  34  36  36  40  44  49  42  28  29  30  32  43  54 \n 61  60  58  56  49  46  43  42  37  37  38  37  37  37  35  37 \n 31  29  29  29  47  51  45  41  38  36  34  33  33  33  36  36 \n 34  34  34  38  37  33  33  35  35  35  35  33  30  31  31  32 \n 34  31  32  33  36  35  37  39  49  50  42  37  34  33  32  33 \n 32  32  32  32  34  35  32  30  28  30  29  27  32  34  35  28 \n 32  32  34  39  41  39  38  37  34  34  35  33  32  31  32  31 \n 33  31  31  30  31  31  31  33  32  33  32  32  31  32  33  33 \n 33  34  33  33  37  35  34  37  38  34  33  33  30  30  28  28 \n 27  27  25  25  31  33  33  32  32  30  29  27  26  28  40  48 \n 37  36  36  36  37  37  36  35  36  37  39  40  39  40  38  38 \n 38  38  36  37  36  36  35  35  36  37  37  37  36  35  36  38 \n 39  38  40  40  40  36  35  37  51  89 117 123 103 119 128  56 \n 29  31  35  34  36  36  34  34  32  30  28  27  26  29  37  36 \n 36  35  35  35  35  35  36  38  62  84  77  63  45  40  40  46 \n 47  47  47  45  46  46  46  45  46  44  43  42  42  46  43  45 \n 42  39  42  40  39  39  40  40  40  39  40  40  44  46  49  52 \n 55  52  51  88  97  46  41  42  44  46  55 101  45  27  65 125 \n142 148 139 199 171  47  23  30  29  22  31  29  34  31  40  48 \n 41  37  37  37  39  40  40  42  42  41  42  40  40  41  42  43 \n 46  50  53  56  58  57  55  53  49  46  43  54 150 159  22  21 \n 27  33  35  23  27  28  43  41  36  37  38  39  40  39  38  37 \n 39  40  38  38  39  39  40  38  40  43  49  52  51  48  43  43 \n 37  31  30  84 137 135 136  83  20  27  34  42  49  45  47  44 \n 44  45  42  40  42  41  41  43  45  45  45  46  48  51  55  56 \n 60  60  58  56  53  48  36  31  53 115 139 146 147 155 155 146 \n170 162 136 198 203 214 198 117  22  34  33  37  49  54  55  61 \n 61  59  57  55  55  52  49  46  43  42  42  41  39  38  37  36 \n 35  35  37  35  35  38  35  36  35  36  36  42  54 119 199 183 \n184 149 138 156 139  67  26  36  29  39  50  52  57  58  57  57 \n 54  38  24  29  32  45  54  55  53  49  47  44  39  38  35  33 \n 32  35  40  38  36  37  37  35  30  30  32  32  31  34  36  35 \n 36  38  37  37  37  34  35  42  52  42  24  28  29  34  45  55 \n 62  62  60  58  52  51  47  45  40  39  40  39  38  37  34  38 \n 30  29  28  29  49  53  45  40  36  36  35  35  34  33  37  37 \n 34  34  35  34  41  36  34  36  35  36  34  34  33  33  32  33 \n 33  31  33  34  36  38  36  37  45  50  43  37  35  34  34  34 \n 34  34  35  33  33  35  34  32  30  31  30  30  32  35  35  28 \n 29  29  36  42  42  39  37  35  34  35  34  33  31  31  30  30 \n 32  30  31  29  32  32  32  32  32  31  33  33  32  33  34  33 \n 33  34  33  34  35  35  35  35  38  33  35  33  31  29  28  28 \n 28  27  26  28  32  33  34  33  33  32  30  28  26  27  37  50 \n 35  37  38  38  38  31  33  37  38  39  40  40  37  36  34  35 \n 37  36  34  35  33  35  35  34  35  34  34  35  35  34  33  32 \n 34  36  37  38  40  42  43  44  48  48  47  45  38  38  63  58 \n 28  30  34  34  35  35  33  34  34  31  29  28  27  28  39  37 \n 36  35  35  36  35  35  36  40  47  45  51  48  44  42  45  45 \n 45  45  43  44  46  43  45  45  41  41  40  41  41  44  45  45 \n 40  40  39  38  38  39  40  38  39  38  41  41  44  46  49  53 \n 53  51  50  54 118  68  43  44  43  46  43  87  88  32  39 111 \n125 141 146 180 173  57  26  29  29  21  30  29  33  30  39  47 \n 43  39  37  37  39  40  42  41  42  42  42  41  42  43  44  43 \n 47  50  54  55  57  56  56  54  50  46  41  34 137 161  25  21 \n 27  35  38  22  24  30  41  44  38  37  38  40  41  40  39  37 \n 41  39  37  39  40  40  40  39  41  43  47  50  52  49  45  44 \n 40  37  28  44 148 203 170 114  28  40  45  51  56  54  53  52 \n 54  53  52  52  51  48  48  49  50  45  44  42  47  49  54  57 \n 61  65  65  65  62  57  46  37  40  90 161 222 168 207 176 193 \n166 216 167 203 202 206 195 113  24  35  32  34  47  52  52  58 \n 60  58  58  57  57  54  52  48  47  44  48  50  46  46  46  49 \n 51  52  54  55  56  51  52  50  48  47  50  48  53  91 171 168 \n184 153 156 152 161  77  32  41  30  39  47  50  53  57  57  58 \n 54  37  24  28  28  40  52  55  54  52  50  46  40  37  36  33 \n 30  31  32  33  41  55  80  91  99 101 108 114 115 114 112 110 \n106 105 108 107 108 108 105 108 110 107 103 101  94  90  94  94 \n 93  90  84  79  71  67  62  54  50  45  46  40  37  35  35  36 \n 29  30  24  30  51  52  48  42  37  35  32  33  33  33  34  34 \n 35  35  35  36  49  42  35  42  39  37  36  37  37  37  35  36 \n 36  35  33  34  37  38  38  38  43  50  45  40  37  35  37  37 \n 37  36  40  37  34  34  34  33  33  34  33  33  35  35  38  29 \n 31  28  37  43  43  38  36  34  33  34  34  33  31  36  33  30 \n 29  30  30  29  30  30  34  32  30  30  33  34  33  33  32  33 \n 32  32  35  34  35  35  34  36  37  33  34  32  31  30  27  28 \n 29  27  29  29  31  33  34  32  34  33  31  28  26  26  28  51 \n 37  36  38  40  39  29  34  37  38  42  40  38  37  38  35  36 \n 35  36  37  36  33  35  37  36  36  35  34  34  33  34  32  33 \n 31  33  35  36  36  38  40  40  42  44  46  44  40  38  34  40 \n 35  34  34  32  34  34  32  31  30  31  30  28  24  30  44  38 \n 35  34  35  37  36  36  39  41  35  44  49  51  49  45  42  38 \n 35  35  35  37  39  36  36  37  37  37  37  37  38  39  39  38 \n 39  39  39  39  39  39  40  38  40  40  41  41  43  43  48  52 \n 53  53  50  48  94 102  44  43  42  43  41  58 121  47  30  78 \n119 130 144 168 182  74  25  31  32  21  28  26  31  31  39  46 \n 42  41  37  37  39  40  43  43  43  42  42  41  42  43  43  45 \n 46  48  53  55  57  56  55  54  52  47  41  36  84 114  32  25 \n 30  34  38  20  24  31  43  45  38  38  37  39  41  40  39  38 \n 41  40  40  41  41  42  40  41  43  44  47  50  53  50  46  44 \n 42  40  38  59 150 204 183 153 107 113 108 107 104 106 111 108 \n106 109 117 125 121 118 119 119 116 108 104 101  97  93  89  84 \n 75  72  79  75  70  63  53  45  42  74 136 186 169 195 187 218 \n171 215 165 172 207 220 197 127  19  35  33  35  47  52  53  60 \n 62  62  59  61  67  77  88  96 103 109 112 112 108 105 102 102 \n 98 101 102 106 107 106 104 104 113 122 131 129 125 136 181 183 \n195 205 205 183 218 130  47  42  31  40  49  51  53  56  57  56 \n 54  37  24  29  28  41  52  55  55  55  51  48  41  38  34  34 \n 32  30  29  36  80 104  95  86  73  69  62  59  58  53  52  50 \n 49  50  46  48  48  45  45  48  51  53  56  60  70  75  85  96 \n108 121 134 143 159 164 163 154 134 116  66  40  40  37  35  34 \n 28  31  24  31  51  52  49  43  39  36  33  33  34  35  34  36 \n 37  36  36  34  38  36  36  43  42  40  34  32  33  35  35  37 \n 37  38  41  39  42  40  36  41  44  50  45  39  35  35  37  37 \n 37  37  41  39  37  37  36  36  36  37  37  37  38  38  37  32 \n 33  30  35  43  43  38  36  35  33  33  34  34  34  36  32  29 \n 30  30  30  30  31  31  35  33  30  31  33  34  33  32  33  34 \n 33  33  36  35  36  36  36  37  35  34  34  32  31  30  29  30 \n 30  29  29  29  31  34  36  32  32  33  31  28  27  24  27  48 \n 46  34  36  38  37  31  37  36  39  42  41  39  37  36  34  35 \n 35  36  37  38  34  36  36  36  37  35  35  34  32  33  33  33 \n 31  32  35  35  34  36  37  39  42  43  45  43  42  39  36  37 \n 36  31  35  33  34  32  32  31  30  31  28  25  26  30  44  39 \n 35  33  36  37  37  37  41  37  35  46  48  50  48  44  38  34 \n 33  32  33  33  37  36  36  36  35  36  37  35  36  38  38  36 \n 38  39  39  39  40  40  39  39  40  40  41  42  44  42  45  50 \n 52  54  50  50  62 124  63  44  41  39  40  34 109  81  26  49 \n127 170 174 180 207 108  27  39  35  24  27  24  31  31  38  44 \n 40  40  36  37  40  42  43  42  43  41  41  41  41  42  42  43 \n 45  47  52  55  57  59  57  54  50  48  41  37  51 123  46  30 \n 43  38  36  22  25  33  42  44  38  36  35  39  41  41  40  40 \n 43  40  40  41  42  42  43  43  41  45  48  49  53  53  49  46 \n 49  59  99 107 102  93  82  79  77  71  69  66  62  63  61  58 \n 55  56  56  52  53  56  52  53  59  67  79  87 103 112 130 142 \n151 163 194 200  98  68  61  55  53  61 113 131 147 160 167 171 \n171 162 129 150 158 155 168 102  23  35  33  35  47  53  51  58 \n 63  67 106 118 115 102  94  86  69  57  51  48  49  48  44  39 \n 35  35  31  31  32  33  32  34  38  38  42  48  54  58  67  75 \n 89 105 123 141 165 186 208 143  58  42  49  51  51  54  57  56 \n 53  37  24  30  28  40  55  57  54  52  49  49  43  39  34  34 \n 32  31  32  45  46  38  34  41  41  41  41  39  40  40  39  39 \n 38  36  35  37  37  37  34  33  32  33  34  34  34  33  35  37 \n 37  37  36  38  45  61  91 115 154 198 191 135  49  37  36  36 \n 25  31  24  32  52  53  49  43  38  35  35  34  34  35  34  34 \n 36  38  35  35  35  33  32  38  65  90 108 119 122 124 124 123 \n125 126 124 122 120 116 116 117 114 116 113 110 113 110 104  99 \n 96  91  84  80  73  66  57  53  52  50  43  41  40  41  43  38 \n 35  29  37  43  41  38  37  37  35  33  34  34  33  31  32  30 \n 32  32  32  31  30  30  31  32  31  31  35  34  35  34  34  34 \n 33  35  38  40  40  40  38  39  40  42  37  36  35  33  34  33 \n 30  30  30  30  34  37  36  35  37  37  33  31  29  25  28  42 \n 52  36  37  39  36  32  37  36  38  40  39  39  37  36  34  36 \n 34  34  35  36  36  34  34  35  36  34  32  33  33  34  33  30 \n 28  30  33  34  33  32  34  37  42  43  44  42  41  39  37  36 \n 38  34  37  32  32  32  33  32  31  30  31  26  22  28  47  43 \n 34  33  35  37  38  39  43  36  38  47  45  45  49  44  36  35 \n 34  34  34  34  36  37  35  34  34  35  36  35  36  36  36  34 \n 40  38  39  40  41  42  40  40  40  39  40  40  42  43  45  49 \n 54  54  50  50  51  96 100  45  39  39  38  32  69 102  33  32 \n107 152 171 177 184  98  32  41  35  24  28  24  30  33  39  45 \n 43  40  38  38  41  44  41  42  43  41  42  41  40  41  42  45 \n 46  48  52  53  58  58  56  55  50  48  42  36  36 107  59  34 \n 46  42  45  23  23  30  40  44  38  38  38  39  41  41  40  39 \n 40  40  39  39  41  43  41  43  44  47  48  50  55  54  52  49 \n 53  58  44  44  54  75  75  70  67  65  62  64  60  59  59  56 \n 55  56  54  54  51  48  43  38  33  35  39  38  39  43  49  52 \n 60  64 144 193 164 134  67  62  61  66 101 127 132 133 136 137 \n143 152 143 158 163 161 161 103  18  37  32  35  50  53  50  54 \n 61  62  60  48  44  45  43  42  43  44  43  44  47  45  43  42 \n 41  40  39  35  34  34  35  33  33  33  34  38  40  40  39  35 \n 36  38  40  46  52  64  99 113 141  78  51  51  50  52  57  56 \n 52  36  23  29  28  40  56  58  55  51  48  48  43  40  35  35 \n 33  31  35  36  34  35  36  40  41  41  40  40  39  38  38  36 \n 34  35  33  33  33  33  32  32  30  27  28  27  30  32  33  35 \n 35  36  36  36  36  36  36  39  47  61  77 107 116  48  36  35 \n 25  30  22  31  52  55  48  43  38  36  34  32  34  36  36  35 \n 36  40  36  34  32  31  32  48  90  89  72  65  61  58  52  49 \n 49  48  47  52  54  52  50  48  46  47  50  51  54  55  60  64 \n 74  86  94 107 122 127 135 140 146 145 141 128 109  87  63  42 \n 39  32  37  43  41  38  37  37  35  33  33  33  34  33  35  32 \n 35  33  32  33  32  32  31  32  31  30  35  34  36  35  50  76 \n 94 102 104 108 112 110 110 110 109 110 103 102  98  96  90  87 \n 83  78  74  62  54  52  46  41  37  34  32  31  33  30  31  41 \n 61  43  41  41  38  37  37  37  37  40  38  39  38  36  35  36 \n 34  35  35  34  35  34  34  35  35  34  32  35  34  35  34  33 \n 30  31  33  34  32  33  35  37  41  43  44  44  42  39  37  35 \n 38  36  37  32  31  33  33  34  33  31  30  27  22  26  44  47 \n 36  35  35  36  36  39  43  34  41  45  44  46  48  42  41  37 \n 34  35  34  34  35  35  34  35  33  33  35  35  35  36  35  34 \n 40  40  38  37  40  40  39  39  40  40  41  41  42  43  46  50 \n 55  54  51  50  49  54 123  67  39  40  41  33  35  97  59  28 \n 72 116 136 134 129  93  48  46  39  26  27  22  29  31  38  47 \n 44  44  39  38  39  42  43  41  42  43  41  42  42  41  42  44 \n 47  47  51  54  58  58  56  56  50  49  43  35  30  71  89  46 \n 38  47  71  24  22  27  39  46  39  39  38  37  39  40  39  40 \n 41  40  40  40  42  41  40  42  44  46  49  51  55  54  51  48 \n 50  27  29  35  36  57  70  70  67  64  63  60  58  57  56  55 \n 56  52  51  50  49  48  41  37  33  32  30  31  33  32  35  37 \n 37  36  32  37  56 109 104  66  68  90 108 118 129 139 137 124 \n115 113 109 129 218 228 189 175  14  34  34  36  49  52  47  53 \n 52  31  25  31  50  56  58  57  54  50  41  36  32  33  33  36 \n 34  36  34  32  32  31  32  30  28  28  28  31  34  32  30  31 \n 32  29  31  33  35  41  45  36  56  86  58  52  50  52  56  57 \n 54  34  24  29  28  39  55  59  54  52  50  46  40  39  36  34 \n 31  31  34  28  29  31  33  40  43  41  41  39  37  34  35  34 \n 32  29  33  31  32  30  31  32  31  28  28  27  30  33  32  30 \n 32  31  30  34  33  33  33  35  37  40  41  37  65  67  38  33 \n 25  29  21  30  54  55  48  42  38  34  32  33  33  36  35  35 \n 34  35  34  36  33  32  38  43  32  31  34  34  36  38  40  40 \n 38  37  37  39  41  42  42  44  41  39  39  40  37  38  37  39 \n 38  38  40  40  40  39  38  42  57  73 104 126 152 175 207 167 \n 80  37  38  42  41  38  36  35  33  32  32  32  33  33  35  34 \n 33  33  34  34  34  32  31  31  31  32  33  34  35  60  99  99 \n 90  84  79  72  67  64  61  62  58  59  63  63  67  70  72  77 \n 80  84  90  97 104 111 116 120 119 120 112 103  93  80  68  69 \n 83  66  58  54  48  45  43  39  41  41  39  37  36  34  33  34 \n 32  33  32  33  34  35  33  33  35  37  35  35  34  35  34  33 \n 31  31  31  33  32  33  35  38  40  45  46  44  40  38  37  34 \n 41  38  37  36  32  35  36  35  33  34  30  28  23  24  41  53 \n 38  36  38  38  34  38  43  35  41  42  45  49  46  37  41  38 \n 34  34  34  34  35  35  34  35  34  32  34  35  36  37  35  34 \n 40  40  38  38  39  37  38  39  39  41  42  43  42  44  46  50 \n 53  53  53  51  48  47 103 104  38  40  37  34  28  66  88  31 \n 49  98 121 115 107  78  60  51  45  30  30  23  29  31  43  49 \n 45  44  42  38  39  42  42  42  40  40  40  41  43  41  43  42 \n 47  48  51  54  57  58  57  56  51  49  43  38  30  46 102  59 \n 47  56  72  26  22  27  38  47  41  39  36  36  38  39  39  40 \n 42  41  40  41  41  43  42  42  44  46  50  52  54  56  53  48 \n 48  23  26  32  30  46  69  72  69  65  63  61  58  55  57  57 \n 53  51  51  48  48  45  42  38  34  33  32  32  33  33  34  33 \n 32  31  32  33  38  49  87  94 102 108  97  95 111 152 139 136 \n 80  68  82 109 223 234 203 186  14  34  34  36  48  51  48  53 \n 45  22  28  26  44  59  59  59  55  51  44  38  32  33  36  36 \n 35  37  36  33  32  31  30  31  30  28  29  30  32  31  32  30 \n 28  27  28  30  33  35  39  42  39  46  59  52  51  53  57  60 \n 55  35  23  27  27  39  53  56  53  52  50  46  41  39  36  35 \n 32  32  35  28  27  31  34  41  43  41  41  40  38  36  34  35 \n 31  29  32  32  32  31  32  33  31  30  30  29  31  32  32  31 \n 32  32  31  32  33  32  34  35  32  34  37  41  42  53  46  34 \n 25  28  21  32  52  53  48  43  38  34  33  35  33  36  33  34 \n 35  33  34  34  33  33  35  29  28  31  33  35  39  40  41  40 \n 37  34  34  36  35  34  36  37  36  37  36  36  33  32  31  31 \n 33  32  32  34  39  40  39  35  36  34  38  38  43  54  84  97 \n142 101  33  41  40  38  36  35  34  33  33  33  33  34  33  33 \n 32  33  33  33  30  29  30  32  31  31  34  35  37  40  39  34 \n 29  30  34  36  38  37  38  36  39  41  40  42  40  41  41  41 \n 41  40  39  36  40  42  46  52  59  64  72  85 101 117 136 146 \n169 174 172 156 134 100  49  42  42  42  39  36  35  35  34  34 \n 34  33  31  32  35  34  33  34  35  36  34  34  34  34  33  34 \n 33  33  32  34  33  33  33  36  40  46  46  44  42  39  39  36 \n 41  40  41  38  33  34  37  38  35  36  33  30  23  25  41  66 \n 40  38  40  39  35  39  43  36  41  38  49  49  46  39  39  37 \n 34  34  35  35  35  34  33  35  34  34  35  37  36  38  37  36 \n 42  39  40  40  39  38  38  37  38  39  41  41  43  44  45  49 \n 51  52  54  50  49  46  67 126  58  39  39  37  27  35 101  50 \n 33  76 109 176 219 187 177 161 130  31  32  23  30  34  45  52 \n 47  45  41  39  41  41  42  41  38  39  41  41  42  43  43  44 \n 45  47  50  52  57  59  56  55  53  50  48  42  34  30  88 104 \n117 118  70  25  21  26  35  46  42  40  38  37  39  38  40  43 \n 44  45  45  45  43  41  42  43  47  49  48  53  55  57  57  54 \n 51  27  26  34  27  37  59  67  67  66  62  58  56  55  56  55 \n 51  48  49  50  50  46  40  37  37  33  31  32  31  32  32  31 \n 33  29  28  28  31  37  54  99 103 101 112 110 124 185 226 248 \n183 131 132 110 168 165 150 123  16  32  33  36  46  49  50  52 \n 44  21  29  27  37  58  60  59  56  52  44  39  34  36  38  37 \n 36  35  35  34  31  30  30  29  30  30  30  29  31  31  31  29 \n 29  28  29  30  31  31  31  33  34  36  49  55  49  51  57  58 \n 56  36  22  26  26  38  51  53  52  51  49  47  43  42  38  36 \n 33  31  36  27  28  32  32  40  43  43  42  41  39  35  33  33 \n 32  29  29  31  33  32  31  33  32  32  28  28  29  30  31  31 \n 33  33  32  31  32  30  34  33  31  32  33  37  40  42  52  37 \n 24  26  21  31  50  52  47  42  36  35  32  34  33  34  33  33 \n 33  33  34  34  34  36  34  25  32  30  31  38  42  43  42  37 \n 33  34  32  35  32  31  33  32  33  34  34  34  34  32  28  29 \n 29  30  31  33  34  33  31  29  32  30  30  32  36  40  40  38 \n 35  70  56  44  40  38  36  35  34  34  35  35  35  35  33  34 \n 33  33  34  33  31  30  32  33  32  32  33  35  30  22  27  28 \n 31  33  35  37  41  40  39  39  39  38  38  38  35  36  34  34 \n 36  36  37  34  30  28  30  30  33  35  35  38  37  36  34  34 \n 45  66 113 139 188 206 164 103  48  43  37  36  35  36  34  34 \n 36  33  31  31  33  33  34  34  35  35  35  34  34  34  33  34 \n 34  34  33  33  32  31  35  35  38  43  44  43  44  38  37  39 \n 40  41  42  39  36  37  40  41  41  42  37  33  29  28  37  78 \n 39  42  39  40  38  41  41  39  41  36  48  49  46  40  38  38 \n 37  36  33  36  35  35  34  36  36  37  36  36  36  39  39  37 \n 42  40  41  42  41  41  40  40  40  40  42  42  42  44  47  49 \n 51  54  54  50  49  48  48 103  94  42  40  39  31  27  87  78 \n 29  62 110 189 252 228 209 198 152  33  33  23  30  33  46  50 \n 48  47  43  40  41  42  42  40  40  40  41  41  42  43  42  43 \n 46  49  52  53  57  57  57  57  54  50  46  45  36  30  67 127 \n155 141  82  29  19  28  35  45  44  41  39  37  39  38  40  42 \n 47  47  47  48  46  44  43  42  45  48  48  53  54  59  58  56 \n 53  32  24  32  26  34  54  64  66  64  60  58  58  56  56  55 \n 51  47  49  51  50  50  42  38  36  33  31  33  31  30  30  30 \n 33  31  31  30  31  32  41  75 145 146 123 120 127 142 183 245 \n220 137 141 133 137 139 131  92  22  31  31  35  51  50  50  51 \n 47  22  30  27  33  56  62  61  55  52  43  37  35  37  36  34 \n 34  33  34  33  31  30  30  30  31  30  30  30  30  31  32  32 \n 30  29  30  32  30  26  28  31  32  34  44  59  49  52  57  59 \n 53  34  23  28  26  38  52  54  52  51  48  48  43  41  40  37 \n 35  33  37  29  30  30  28  40  43  46  48  44  39  36  33  33 \n 31  29  31  33  32  31  33  33  33  32  30  28  29  30  31  32 \n 32  32  31  31  32  31  31  32  32  31  33  33  38  39  53  38 \n 24  27  21  31  48  51  47  44  38  36  33  33  34  35  34  34 \n 35  35  35  34  35  36  33  23  32  28  30  37  45  45  43  36 \n 31  32  32  33  32  31  31  31  32  33  34  34  35  32  31  31 \n 30  32  32  32  34  32  30  30  31  28  27  29  32  32  37  39 \n 36  37  49  43  41  39  37  36  34  34  35  35  34  34  33  35 \n 33  33  35  35  33  33  34  33  33  34  34  35  28  22  31  27 \n 31  35  37  38  39  39  37  36  35  34  35  34  32  33  31  29 \n 30  32  33  31  29  27  27  28  29  30  29  32  34  35  34  33 \n 32  30  32  36  50  69  84 123  93  42  37  37  36  37  35  35 \n 36  33  31  31  32  32  33  33  32  33  34  34  35  34  32  34 \n 35  35  33  32  31  32  37  47  74  89  95  96  98  94  94  97 \n 97 100  96  93  89  89  91  89  83  81  71  62  53  43  45  77 \n 46  42  41  42  45  48  46  45  39  38  50  51  49  42  43  44 \n 39  40  36  36  36  35  35  37  38  37  36  37  38  40  40  38 \n 41  41  41  41  41  41  41  42  43  42  41  40  42  44  46  48 \n 51  53  52  50  48  44  43  64 125  66  40  40  36  29  54 106 \n 46  46  93 122 194 184 216 198 123  51  38  26  28  34  44  51 \n 50  50  46  42  42  44  42  40  39  39  40  39  43  43  44  45 \n 46  48  53  55  57  58  56  56  53  51  50  47  40  30  41 106 \n160 149 114  34  24  28  36  42  46  45  44  40  41  43  46  46 \n 52  51  51  50  48  49  49  46  43  44  47  52  53  59  60  60 \n 57  38  22  32  29  32  46  56  65  61  59  60  60  56  57  56 \n 53  53  52  51  51  49  45  41  38  34  33  33  33  32  32  33 \n 33  32  29  32  32  33  35  46 150 186 190 173 182 172 168 177 \n210 152 145 156 133 149 147  96  22  32  33  35  50  52  51  51 \n 44  22  28  24  31  54  61  61  56  52  44  38  35  35  35  35 \n 32  34  33  31  32  31  31  32  32  29  29  31  30  31  32  32 \n 31  30  30  32  30  28  27  27  29  31  39  58  50  51  56  58 \n 57  35  21  26  27  38  50  55  53  51  50  48  44  43  42  39 \n 38  36  40  31  29  30  25  36  43  47  48  44  39  36  32  31 \n 32  29  29  30  32  31  31  33  33  31  29  30  30  29  28  28 \n 29  30  30  30  32  31  31  32  31  30  32  30  32  35  47  38 \n 25  26  21  32  46  49  45  42  39  35  35  35  35  36  35  35 \n 38  37  36  36  35  35  34  24  31  26  29  37  48  47  42  36 \n 34  32  31  31  32  33  31  30  30  31  32  33  34  32  33  32 \n 32  31  31  31  32  32  32  31  30  29  29  31  32  31  30  30 \n 36  38  39  43  40  38  36  34  35  34  34  33  33  35  34  34 \n 35  35  34  34  33  33  34  34  33  34  36  36  27  23  31  26 \n 29  33  37  39  36  35  34  33  32  33  33  33  31  31  31  30 \n 31  29  31  31  28  28  27  28  28  28  30  31  31  30  28  29 \n 30  29  28  29  33  34  32  26  66  54  37  36  35  36  34  35 \n 33  32  31  31  31  32  33  33  32  33  34  35  35  34  34  32 \n 32  34  34  33  32  40  77 108 107 100  95  93  89  85  85  83 \n 78  79  82  87  82  81  81  83  84  88  93  97 108 120 123 131 \n130 128 119 116 105 102  85  79  69  64  70  63  56  52  58  60 \n 56  48  41  38  37  37  36  38  38  37  37  35  38  38  38  39 \n 41  41  40  40  41  42  41  40  41  42  42  42  44  45  45  48 \n 52  53  53  51  50  45  42  44 115 102  40  42  39  32  35  99 \n 78  42  78 103 110 120 138 141 138  86  45  30  30  34  41  49 \n 48  48  44  43  46  48  43  40  40  40  40  40  43  43  43  43 \n 46  47  53  55  58  59  59  58  55  54  52  49  43  35  32  84 \n124 121 106  41  29  33  40  45  45  48  47  45  47  51  52  51 \n 52  50  48  49  49  50  51  50  47  47  47  53  54  58  60  61 \n 58  41  22  30  31  32  44  52  61  58  59  61  60  58  59  58 \n 56  55  52  52  51  50  47  43  38  36  35  35  35  33  31  32 \n 34  33  32  35  33  32  33  39 105 182 189 180 184 183 181 153 \n198 191 149 186 157 176 204 137  17  32  31  35  49  52  50  54 \n 45  23  29  25  28  53  62  62  56  53  45  40  35  34  36  34 \n 31  32  32  32  32  32  31  33  32  30  30  30  29  29  32  33 \n 31  31  32  34  30  29  28  28  28  29  36  53  54  52  57  60 \n 56  34  22  26  25  37  48  53  54  51  51  47  45  43  41  41 \n 39  38  40  31  30  32  26  33  43  47  45  43  38  35  33  33 \n 30  29  28  30  32  31  31  32  34  31  29  29  29  28  28  29 \n 30  31  31  32  32  31  32  31  30  31  30  31  31  32  42  39 \n 24  25  21  32  46  48  46  42  38  36  35  36  35  36  36  37 \n 39  38  39  38  35  35  31  24  33  27  28  37  46  48  41  36 \n 34  33  30  30  32  32  31  31  31  31  34  32  33  32  32  34 \n 32  34  32  32  32  32  31  30  29  29  30  32  32  30  28  28 \n 34  37  36  40  41  38  36  34  35  34  34  33  34  35  32  31 \n 33  34  33  33  33  33  35  35  34  34  36  36  27  24  29  24 \n 29  35  39  40  37  37  35  33  32  32  32  34  32  31  30  29 \n 30  29  30  30  29  29  29  27  28  29  28  29  31  30  28  30 \n 28  26  27  28  30  30  31  32  35  45  37  37  34  36  34  34 \n 34  34  32  32  32  32  32  32  32  34  34  33  34  33  33  33 \n 31  33  32  31  32  43  49  39  35  32  34  35  35  32  32  33 \n 32  34  39  41  43  40  38  36  36  37  36  36  40  42  46  48 \n 57  67  76  91  97 113 134 143 145 152 160 158 151 140 144 140 \n 91  59  48  40  38  36  36  36  35  37  37  36  38  37  36  36 \n 42  41  40  41  41  42  41  40  41  42  42  41  40  45  46  46 \n 49  51  52  52  51  48  43  40  71 128  59  44  39  34  26  65 \n108  57  59  90 101 107 109 110 115 107  75  38  29  33  40  51 \n 47  48  44  42  43  43  42  41  40  40  41  41  42  44  43  44 \n 48  50  53  55  59  63  62  62  62  61  61  61  56  50  43  68 \n119 114 101  59  47  44  47  58  48  44  40  44  51  52  50  50 \n 49  49  46  49  46  46  48  50  50  49  52  57  57  57  59  62 \n 59  42  20  30  31  29  41  49  58  59  58  62  61  58  57  58 \n 58  57  56  54  51  50  46  45  41  38  37  37  37  36  34  35 \n 35  35  35  35  35  33  31  38  68 182 201 185 185 195 185 166 \n188 206 161 196 175 180 226 147  17  33  33  37  47  51  50  51 \n 47  22  28  26  26  53  61  60  56  53  44  41  35  34  35  32 \n 32  34  34  35  34  32  32  31  31  29  29  28  30  31  31  31 \n 30  31  34  35  31  28  27  30  28  27  33  44  57  54  59  60 \n 57  34  21  23  27  35  46  53  53  50  50  49  46  43  40  41 \n 39  37  38  25  28  31  29  37  47  48  47  44  40  35  33  31 \n 30  29  29  30  33  31  34  34  30  28  29  29  30  29  30  29 \n 31  30  32  32  33  33  32  32  30  29  29  29  31  32  37  42 \n 25  24  22  33  44  46  42  42  38  35  37  37  38  39  37  38 \n 39  38  39  38  36  36  31  26  34  26  27  40  44  48  40  37 \n 34  32  32  29  31  34  32  32  30  31  34  33  32  32  29  29 \n 31  32  31  32  33  32  30  30  29  30  32  32  31  29  28  28 \n 31  33  35  38  39  37  36  36  35  34  36  35  36  35  34  34 \n 34  36  35  35  34  35  33  33  34  35  37  37  23  24  30  27 \n 31  36  36  38  38  36  34  34  33  32  33  33  32  32  31  31 \n 31  31  31  30  30  31  29  27  29  29  29  29  29  25  26  28 \n 27  28  28  29  29  27  28  29  33  35  39  38  36  38  36  35 \n 35  34  32  31  32  32  32  31  32  34  34  32  31  31  30  30 \n 32  33  32  31  31  27  20  25  27  28  31  38  43  42  39  36 \n 36  34  37  36  36  37  37  35  36  36  37  35  34  33  32  33 \n 34  36  34  34  34  32  32  33  37  44  66  83 113 141 200 242 \n186 145  78  50  39  36  37  36  33  35  35  35  38  37  34  35 \n 42  41  40  39  41  41  40  40  43  44  41  41  42  44  46  47 \n 49  51  53  53  51  50  46  43  48 116  91  46  42  36  29  37 \n113  85  60  77  97 108 115 119 123 110  75  41  30  34  40  49 \n 49  45  43  41  44  43  42  42  43  43  42  42  43  42  44  44 \n 51  63  92 103 114 120 126 129 132 129 128 130 123 117 116 120 \n138 140 136 123 120 117 112 117 104  95  90  85  83  74  65  61 \n 51  47  45  50  52  52  47  45  45  45  48  52  56  58  60  61 \n 59  46  22  29  31  29  39  46  56  61  59  61  59  59  58  56 \n 57  56  56  55  49  47  49  49  43  41  43  45  45  46  45  44 \n 46  47  41  42  39  39  32  35  45 109 143 176 180 140 172 185 \n190 164 133 154 145 152 216 139  22  34  34  38  48  50  49  49 \n 44  20  27  25  27  50  60  61  57  54  46  41  34  34  33  33 \n 32  34  36  37  36  34  35  33  32  31  29  29  29  31  32  32 \n 33  34  37  37  33  30  27  28  29  28  30  38  64  58  59  60 \n 55  34  23  25  26  36  45  50  53  52  50  48  44  43  41  41 \n 41  40  37  25  31  30  29  40  52  48  49  45  40  36  33  32 \n 31  31  31  31  31  31  33  34  31  30  29  30  30  30  30  30 \n 32  30  32  33  33  33  32  32  31  30  30  31  32  32  36  48 \n 32  25  24  33  42  46  45  41  38  37  37  37  37  39  38  38 \n 38  39  40  38  39  38  31  26  35  26  30  45  48  50  42  37 \n 32  32  32  32  32  33  31  31  32  32  32  33  33  31  30  31 \n 31  32  32  32  32  33  32  31  31  31  32  31  29  27  26  28 \n 29  31  36  39  38  37  35  35  34  35  34  35  35  35  35  36 \n 35  35  35  36  35  36  35  35  35  35  37  37  22  25  29  28 \n 32  36  39  39  37  36  35  35  35  34  32  33  33  33  34  33 \n 33  33  32  30  31  31  31  29  31  31  29  28  29  27  27  28 \n 28  30  31  30  27  28  26  28  32  35  39  39  38  37  36  36 \n 37  34  33  32  32  32  30  31  33  35  35  33  32  33  32  33 \n 34  33  33  33  30  22  23  27  25  29  32  37  45  44  40  35 \n 33  33  32  31  28  28  29  28  30  31  32  31  32  31  30  30 \n 29  30  29  29  29  31  34  36  33  31  28  29  33  38  59  97 \n 87 111 138  78  38  36  36  36  34  34  36  36  39  38  35  36 \n 42  42  40  38  41  41  41  41  41  39  43  41  41  44  45  45 \n 49  50  52  53  52  49  46  43  36  74 122  67  44  40  31  26 \n 86 115  85  75  81  92 138 141 136 198 129  48  29  34  38  49 \n 47  43  43  42  44  42  41  40  42  42  42  40  42  43  45  48 \n106 139 127 115 109 104  93  86  80  78  75  72  64  60  62  64 \n 59  61  60  63  63  62  67  73  80  91  99 104 115 125 138 147 \n159 159 161 162 168 131  64  45  40  40  40  39  43  48  53  57 \n 56  47  22  28  31  29  36  46  54  60  58  59  58  58  58  58 \n 58  56  59  78 116 126 129 128 128 127 122 119 116 117 116 114 \n117 114 114 114 114 117 109 107 116 133 150 175 177 148 176 190 \n192 194 196 168 215 169 202 124  32  41  38  40  50  52  52  52 \n 43  20  27  24  27  49  61  61  58  54  47  40  35  35  33  33 \n 34  34  37  38  40  39  36  35  30  29  29  30  31  32  34  34 \n 34  35  37  37  33  32  32  30  32  31  32  34  61  64  60  60 \n 56  34  26  27  30  40  48  52  56  56  54  49  48  46  43  43 \n 42  43  39  29  32  33  31  41  51  47  47  46  42  37  34  31 \n 29  31  30  29  31  30  33  33  31  30  29  28  28  29  28  31 \n 31  31  32  32  32  33  34  35  32  30  32  31  32  32  37  44 \n 45  26  26  34  43  46  45  42  39  38  38  41  41  39  41  40 \n 41  41  41  39  40  39  31  27  34  26  33  50  53  51  41  37 \n 35  36  34  34  32  33  34  32  32  34  33  34  31  29  30  31 \n 31  31  33  33  31  32  33  32  30  30  32  32  30  29  29  29 \n 28  29  33  37  39  36  35  34  34  36  35  33  35  37  36  36 \n 36  36  36  36  36  36  37  37  38  38  37  35  22  26  29  27 \n 31  38  41  40  39  36  35  35  34  33  32  33  33  33  37  36 \n 33  32  32  32  32  32  30  30  30  31  30  28  28  29  28  28 \n 28  30  33  32  27  27  26  28  30  32  38  38  36  37  36  37 \n 37  35  32  30  30  29  30  31  35  36  35  33  31  31  31  33 \n 33  33  33  32  28  19  27  28  25  34  37  40  42  42  37  31 \n 28  31  29  27  26  26  27  26  28  30  31  31  32  34  32  30 \n 28  28  28  28  27  30  30  29  26  26  26  27  29  34  38  44 \n 36  27  40  79  44  35  36  37  37  36  36  36  38  38  35  35 \n 42  41  40  40  41  40  38  39  41  40  40  42  42  43  44  46 \n 49  49  52  54  52  50  46  42  37  49 118  96  51  45  36  28 \n 57 113 106 109 116 113 179 226 201 246 212  73  31  35  39  49 \n 49  45  43  42  44  42  40  40  39  40  40  40  40  43  42  60 \n 76  58  54  54  69  74  75  74  74  72  70  68  63  62  64  61 \n 56  54  56  58  50  43  38  39  36  39  37  38  39  41  47  53 \n 62  71  83 120 224 231 160  85  41  42  41  41  41  42  47  49 \n 52  47  22  26  30  30  35  43  51  57  58  58  57  59  57  57 \n 58  58  66  76  70  60  56  58  61  59  54  51  50  49  44  42 \n 44  44  46  46  50  51  51  53  56  61  65  75  85  93 111 129 \n146 162 186 185 209 194 189 152 100  77  37  40  53  51  50  51 \n 42  20  27  25  26  48  58  60  57  55  48  43  37  36  33  32 \n 35  33  37  38  40  40  38  35  31  28  29  31  35  32  46  61 \n 75  80  89  95  99  99 101 102 103 100  96  98 104 108 107 105 \n102  88  77  71  65  62  64  61  56  51  50  49  45  43  46  47 \n 47  46  43  32  35  36  33  42  53  49  48  47  43  39  35  31 \n 31  31  30  29  30  31  31  31  31  30  30  30  29  29  31  32 \n 31  30  33  34  34  36  36  35  33  31  33  35  35  34  36  43 \n 54  29  27  38  44  48  47  44  41  40  40  40  43  43  45  44 \n 44  42  43  44  42  40  31  30  34  28  36  52  57  52  42  41 \n 38  36  38  38  34  34  33  31  31  32  32  32  32  32  31  30 \n 30  30  31  31  31  32  34  34  33  32  32  34  31  29  29  29 \n 27  28  33  37  41  37  35  33  33  36  36  36  36  37  36  38 \n 37  37  37  37  37  37  37  37  38  38  38  35  24  31  30  27 \n 33  38  42  40  38  36  36  34  31  32  35  33  33  36  38  39 \n 35  34  33  33  33  33  31  31  29  28  28  28  27  28  29  29 \n 31  33  33  32  28  26  27  27  28  32  37  38  37  38  37  37 \n 36  34  32  31  30  30  30  31  35  36  34  33  31  31  30  32 \n 34  33  33  32  28  19  30  27  23  36  41  40  40  39  35  31 \n 29  30  29  28  27  30  32  31  33  35  34  33  35  35  32  32 \n 29  29  29  29  28  30  28  27  26  27  25  25  27  27  32  37 \n 40  37  31  37  50  38  36  37  36  35  34  35  39  39  36  35 \n 43  40  40  41  41  41  39  39  40  42  42  42  43  43  45  47 \n 48  48  51  53  52  52  48  46  43  40  81 124  67  53  44  33 \n 36  92 125 148 145 142 123 150 195 242 202  55  35  39  39  45 \n 49  48  43  40  41  40  37  39  40  42  39  40  40  40  41  59 \n 31  38  42  41  59  71  76  72  72  69  69  65  64  63  59  57 \n 56  54  54  53  45  40  38  36  34  35  36  36  36  34  38  38 \n 37  38  41  36  43  63 107 150  87  49  50  51  57  51  40  38 \n 56  57  23  25  33  30  37  44  51  53  55  57  56  56  55  57 \n 57  57  47  27  29  30  40  56  61  60  55  53  51  50  48  47 \n 44  42  40  40  39  37  37  38  39  38  36  37  36  37  34  37 \n 37  39  45  51  70  89 119 145 212 230 151  75  53  52  52  51 \n 42  19  27  25  26  47  58  59  57  55  47  42  39  34  32  33 \n 33  32  36  38  40  40  38  33  31  29  28  33  62 110 126 120 \n109 101  95  91  87  84  77  73  64  65  62  65  62  63  62  60 \n 70  79  88  92  98 108 123 131 136 139 140 138 135 128 119 106 \n 93  88  77  57  56  52  45  45  52  52  48  45  42  39  33  31 \n 31  31  31  30  30  31  31  32  31  30  30  30  28  28  31  31 \n 32  32  33  35  35  36  35  34  38  48  61  65  70  74  81  89 \n 97  90  92  96  96  99  96  95  95  92  92  91  88  88  78  75 \n 69  67  66  61  55  52  42  41  40  32  41  55  58  56  49  46 \n 47  45  42  42  39  37  34  32  31  30  32  32  31  31  30  30 \n 29  30  31  31  33  33  32  33  33  32  32  33  31  28  28  27 \n 25  25  31  34  42  39  36  34  33  35  36  38  39  39  37  38 \n 39  37  38  38  38  39  38  38  38  37  38  33  24  33  29  27 \n 35  39  42  41  38  38  35  34  33  32  32  34  34  36  39  38 \n 36  36  35  35  33  33  32  34  31  28  28  28  30  28  28  30 \n 30  32  33  31  29  29  26  24  27  29  35  39  36  37  37  38 \n 37  35  31  31  31  31  32  34  35  34  33  32  30  31  33  34 \n 34  33  33  34  28  22  30  23  24  33  42  43  40  35  31  29 \n 27  29  30  28  29  31  31  31  30  32  31  32  32  32  31  31 \n 29  30  29  29  29  30  31  32  30  28  26  25  25  26  31  35 \n 38  35  36  28  45  40  34  35  34  35  35  36  39  39  35  34 \n 44  41  42  43  41  41  40  39  41  42  42  43  44  44  44  46 \n 48  48  51  53  53  52  50  48  42  40  55 119  94  59  48  37 \n 31  71 120 132 153 168 162 155 157 226 183  47  37  39  40  42 \n 50  51  45  43  42  40  40  42  42  43  41  42  41  43  42  49 \n 26  31  41  40  53  67  77  76  70  69  69  66  65  63  60  57 \n 55  53  53  51  42  38  35  36  35  35  35  36  36  36  37  35 \n 35  36  36  36  37  38  38  67 120 100  96  99 106 106 101  64 \n 53  54  24  25  31  31  36  44  51  53  53  55  57  56  56  57 \n 56  55  38  21  29  30  35  56  64  61  56  54  53  54  50  49 \n 47  42  37  36  36  35  33  35  37  35  36  34  34  33  33  34 \n 36  36  37  39  38  38  40  43  77 112 145 162  84  51  53  53 \n 41  19  28  24  25  42  57  58  57  54  47  42  36  34  34  34 \n 34  34  36  36  36  37  37  34  30  31  29  42  61  55  41  37 \n 37  37  37  35  32  31  31  34  35  39  44  44  43  44  40  38 \n 35  32  31  33  35  33  37  44  50  53  61  70  78  92 114 127 \n148 163 176 175 171 172 115  57  49  51  47  47  42  38  33  32 \n 31  32  31  31  32  31  32  34  32  31  31  31  30  30  32  33 \n 33  31  31  32  35  36  36  45  99 121 125 124 116 112 102  95 \n 89  88  84  79  77  74  70  71  74  75  80  82  85  90  97  98 \n 99 108 120 123 129 136 136 133 128 119 113 110 104  94  77  67 \n 57  53  54  54  44  38  35  33  32  32  32  32  32  33  31  30 \n 31  30  32  31  32  33  33  33  32  32  33  33  32  30  29  28 \n 25  25  28  32  43  40  36  36  37  38  39  40  41  41  40  40 \n 41  40  40  41  41  41  40  40  41  42  41  35  28  36  29  29 \n 37  41  43  44  40  39  37  36  35  33  34  35  37  38  42  41 \n 41  40  39  37  36  36  34  33  32  30  32  29  27  28  29  31 \n 32  33  34  32  29  29  27  25  25  27  35  41  38  38  37  37 \n 37  34  32  31  31  31  33  35  34  34  35  35  33  33  34  34 \n 32  33  34  34  25  22  32  25  25  31  41  45  40  36  30  29 \n 28  29  30  28  28  31  29  31  29  28  30  30  31  31  30  29 \n 30  30  29  31  32  33  34  34  33  30  27  24  26  28  30  30 \n 31  32  36  31  38  43  33  34  33  35  36  36  40  40  35  33 \n 44  43  43  43  40  41  43  43  43  43  43  43  45  44  44  46 \n 48  47  50  51  54  54  49  48  46  42  41  86 125  74  52  46 \n 39  46 111 127 126 144 156 160 160 173 163  57  42  42  45  50 \n 51  49  47  45  46  46  45  47  45  43  43  45  44  46  45  50 \n 26  28  38  38  46  59  73  74  70  65  68  67  67  63  59  58 \n 58  54  52  51  43  37  37  36  35  34  35  34  33  34  33  33 \n 33  34  33  34  33  34  37  38  67 119 130 126 129 142 150 120 \n133 132  20  22  31  27  35  42  48  50  51  54  54  57  56  56 \n 57  55  35  22  29  28  30  50  69  66  60  56  53  54  50  48 \n 44  40  36  35  33  34  34  33  34  34  35  32  31  31  32  34 \n 34  34  34  34  34  35  34  35  35  38  34  64 121  73  51  53 \n 40  21  26  24  24  41  57  57  58  54  46  42  38  35  34  33 \n 33  33  32  32  31  32  33  33  30  30  31  34  21  22  25  27 \n 35  37  44  47  40  40  37  35  35  35  35  34  35  34  35  35 \n 31  31  29  29  29  28  31  33  34  37  39  42  44  43  40  37 \n 36  37  51  69 113 184 188 173  99  53  49  49  44  40  33  30 \n 31  31  29  30  31  32  33  33  32  30  30  29  30  29  31  31 \n 29  29  30  33  37  37  41  56  58  43  32  29  33  31  34  36 \n 35  35  35  34  37  39  42  41  41  39  40  40  35  34  33  34 \n 33  33  32  34  36  38  48  58  70  82 103 121 150 167 192 204 \n200 190 178 132  66  41  37  36  33  33  32  32  32  32  30  30 \n 29  31  30  30  31  31  33  32  32  32  34  33  30  29  29  27 \n 26  25  26  31  40  42  37  37  38  40  45  49  53  55  54  55 \n 55  55  59  61  58  61  59  63  58  58  56  50  45  50  44  46 \n 52  54  49  46  45  44  41  39  38  36  38  39  40  43  46  47 \n 47  43  44  43  44  41  38  34  34  33  34  29  26  27  30  30 \n 31  33  32  31  30  30  29  27  27  27  31  43  40  38  38  37 \n 38  35  32  31  32  33  33  35  37  37  37  34  33  35  34  33 \n 33  34  35  32  23  24  31  22  25  30  39  46  42  36  29  30 \n 30  29  30  27  28  29  31  32  29  30  31  30  31  31  30  30 \n 30  31  32  31  32  34  35  35  32  32  27  24  26  28  28  28 \n 30  31  33  33  33  45  35  35  35  35  37  36  40  41  36  35 \n 44  45  43  41  42  43  42  41  42  43  43  44  45  43  44  45 \n 48  47  51  52  52  53  51  49  47  42  39  54 129  99  51  50 \n 47  45  87 123 122 121 121 125 130 130 122  74  48  49  50  63 \n 58  48  45  45  48  50  48  46  45  44  43  45  44  44  43  50 \n 27  25  37  38  42  53  67  72  70  67  66  68  69  65  61  59 \n 59  55  54  53  46  42  38  36  36  36  36  34  34  34  34  34 \n 33  32  33  34  34  34  36  37  46  83 125 120 124 127 129 140 \n156 144  24  22  30  29  33  43  51  51  50  53  52  57  57  57 \n 61  56  38  21  31  27  27  41  70  68  58  56  55  53  51  48 \n 44  42  36  33  34  35  35  35  35  34  33  32  32  33  33  32 \n 33  32  32  32  33  33  33  33  32  35  35  35  67  90  55  53 \n 43  20  24  23  22  39  55  56  55  52  49  43  38  35  34  33 \n 33  33  33  32  31  29  30  30  29  30  32  27  18  24  23  25 \n 39  39  43  44  38  36  35  33  30  30  29  28  31  29  31  31 \n 29  29  28  27  28  28  27  28  27  30  32  33  33  31  32  34 \n 34  35  38  38  40  52  58  82 139  96  46  47  45  39  34  31 \n 32  32  31  31  32  33  34  34  32  30  30  29  29  30  31  30 \n 29  29  32  34  36  36  40  32  29  32  30  30  34  36  39  39 \n 37  35  33  33  33  34  35  35  37  35  37  36  33  32  32  33 \n 33  33  35  34  36  38  39  39  36  33  36  38  43  48  66  84 \n111 149 229 211 160 102  36  37  34  32  32  34  33  32  32  30 \n 31  30  31  32  32  32  33  33  34  34  35  34  32  30  31  30 \n 27  26  25  29  39  45  36  40  56  91 120 130 137 139 138 139 \n138 139 135 132 132 131 133 134 134 137 136 136 134 135 134 135 \n142 143 130 125 120 117 109  99  88  78  73  64  56  52  45  47 \n 47  46  47  47  51  48  44  40  36  31  32  29  28  29  30  31 \n 32  33  33  31  29  30  29  27  27  27  30  43  42  40  37  36 \n 39  36  34  34  33  34  34  33  38  38  36  36  36  36  35  35 \n 36  35  36  32  21  25  33  24  27  34  39  44  40  36  30  31 \n 30  30  29  28  29  31  30  30  31  32  32  31  32  31  31  32 \n 34  34  33  34  36  37  38  38  35  31  29  25  27  27  25  25 \n 28  31  30  33  30  45  34  35  35  35  37  39  40  40  38  36 \n 45  44  42  43  42  43  45  45  43  42  43  43  44  45  44  46 \n 46  48  51  54  56  55  52  51  48  46  41  38  95 134  72  50 \n 46  47  56  92 119 122 123 132 143 137 120  84  55  55  59  76 \n 77  56  48  46  49  49  48  44  45  44  43  43  44  45  43  47 \n 33  23  36  37  41  48  61  71  69  66  62  64  69  66  63  60 \n 58  56  54  54  45  42  37  34  35  36  35  34  34  35  35  35 \n 36  34  34  32  32  33  33  36  39  52 127 150 146 146 146 144 \n145 131  34  20  31  29  35  45  47  47  48  50  52  53  57  57 \n 59  54  39  22  27  27  24  37  63  70  61  55  56  54  52  50 \n 44  39  35  34  33  33  33  32  33  34  33  32  30  31  31  33 \n 31  31  31  30  32  30  31  31  30  29  32  32  39  64  68  54 \n 40  21  25  22  22  38  51  52  56  53  48  44  41  37  35  35 \n 33  34  33  32  31  31  30  29  28  28  32  25  16  26  21  23 \n 50  47  44  44  35  32  32  33  30  29  31  29  28  30  30  31 \n 29  29  29  29  28  27  26  29  27  29  31  30  29  28  27  25 \n 26  28  31  30  36  40  41  40  46  99  65  45  45  42  35  32 \n 30  31  32  32  33  35  34  34  32  31  31  30  31  32  31  30 \n 30  30  30  31  35  38  30  25  30  28  28  30  33  37  40  40 \n 35  34  31  30  31  31  29  29  29  28  32  32  31  30  29  30 \n 29  29  30  30  30  31  32  31  32  32  32  32  33  34  36  38 \n 37  32  41  44  62 117  95  39  33  32  32  33  32  31  32  31 \n 30  30  30  29  32  32  32  34  34  34  34  34  33  32  29  27 \n 27  26  24  27  36  49  40  52  99  97  73  62  52  50  47  46 \n 45  44  49  51  55  56  49  46  39  37  37  38  41  45  47  54 \n 59  69  75  85 102 112 127 137 143 154 171 182 187 189 188 187 \n183 175 162 150 125 108  78  55  40  36  32  29  30  30  30  33 \n 33  34  33  30  29  27  27  28  26  24  29  42  44  40  38  36 \n 38  36  37  37  33  33  34  36  38  40  38  38  38  39  37  37 \n 37  38  36  32  21  30  31  24  32  38  40  43  40  36  31  32 \n 31  32  32  30  32  34  37  36  35  37  36  36  37  34  37  37 \n 38  39  40  41  42  43  45  42  39  35  29  26  26  26  24  25 \n 26  27  27  30  29  41  39  35  35  34  38  41  42  43  39  37 \n 45  45  43  43  44  45  46  45  43  42  43  45  46  46  45  47 \n 47  49  52  53  57  56  55  52  50  49  45  37  64 126 104  56 \n 51  55  65  76  96 107 108 103  97 116 109  63  54  54  61  77 \n 89  68  56  52  52  53  48  46  47  46  45  44  41  44  45  45 \n 36  22  34  37  38  45  58  67  71  67  59  60  66  65  63  61 \n 59  57  56  53  47  42  37  35  34  35  36  35  35  36  36  36 \n 37  35  34  32  33  32  35  36  38  43  96 158 160 161 162 160 \n158 149  43  21  30  29  34  44  46  48  48  48  52  53  54  55 \n 55  52  40  19  27  26  25  35  59  66  62  58  57  55  50  49 \n 43  40  37  34  35  34  33  33  34  34  32  32  31  29  31  31 \n 31  31  31  30  32  30  29  30  31  31  32  31  34  44  73  59 \n 42  19  24  22  22  36  50  52  54  52  48  45  41  38  34  35 \n 33  33  34  31  31  32  29  27  28  30  33  26  17  27  21  21 \n 50  57  48  43  35  31  29  30  30  29  31  31  30  29  29  30 \n 31  30  30  30  28  28  28  28  28  29  30  30  32  31  27  25 \n 26  27  28  28  33  35  38  36  37  54  74  51  45  39  36  32 \n 31  32  32  34  35  37  35  35  33  31  32  31  31  31  31  30 \n 30  31  32  32  36  37  29  23  31  27  25  33  34  36  39  39 \n 33  31  30  30  29  28  28  29  28  28  30  30  32  30  28  28 \n 29  29  30  30  29  30  32  31  28  29  30  31  30  32  31  32 \n 35  35  37  38  35  44  82  55  34  32  32  33  32  31  31  32 \n 32  32  32  30  32  32  32  34  35  36  37  36  34  31  31  28 \n 26  27  25  24  34  49  44  46  38  32  34  36  38  37  34  34 \n 38  40  47  50  52  54  48  46  45  44  41  40  38  41  40  39 \n 37  38  38  36  39  40  42  44  45  49  56  65  72  83 103 125 \n151 176 205 220 227 230 205 145  57  36  35  30  30  31  31  31 \n 33  33  33  30  30  28  27  29  27  24  29  38  45  40  38  37 \n 38  37  36  37  34  33  34  36  41  44  53  57  61  63  65  71 \n 75  81  85  84  81  87  87  84  90  95  95  95  92  90  86  86 \n 80  73  63  56  51  45  42  38  37  38  36  36  36  39  42  44 \n 46  48  51  53  55  54  53  52  44  39  28  26  26  26  23  25 \n 26  28  26  29  30  40  41  36  33  33  35  38  40  42  39  37 \n 47  46  45  46  47  46  47  46  45  45  44  45  47  46  46  46 \n 47  49  53  53  57  59  58  56  52  53  51  47  46  91 135 101 \n 72  71  72  73  80  96 144 191 132 201 225 135 111  94 139 147 \n 79  66  79  63  55  54  53  51  54  51  49  50  50  51  51  48 \n 41  24  34  39  36  44  55  61  71  67  56  58  67  66  63  61 \n 59  59  55  54  49  41  37  36  34  34  36  36  37  35  35  35 \n 35  35  37  36  33  34  35  36  36  39  61 179 239 236 237 236 \n236 234  75  18  29  29  33  43  49  50  45  48  50  53  52  53 \n 53  52  45  21  25  26  26  33  54  64  65  63  60  55  50  48 \n 44  42  39  38  35  35  34  34  34  34  34  34  32  31  31  31 \n 30  31  32  31  32  31  29  29  29  31  32  31  32  32  68  66 \n 41  20  23  23  22  35  48  52  54  52  47  44  41  39  36  35 \n 33  35  35  33  33  32  28  28  30  31  33  29  18  27  22  20 \n 48  59  52  47  38  33  30  29  30  30  30  30  28  28  28  30 \n 29  28  28  28  28  28  30  29  29  28  30  29  31  31  28  28 \n 28  28  26  29  31  30  33  34  37  34  62  61  47  42  34  30 \n 33  32  32  32  35  37  36  36  33  31  30  29  30  31  31  30 \n 30  31  33  34  35  37  29  22  29  24  24  35  36  36  39  36 \n 32  30  29  29  30  30  30  29  28  30  29  27  31  30  30  29 \n 28  29  30  29  31  33  32  30  29  28  28  29  27  28  29  30 \n 31  32  32  33  34  37  41  52  38  31  35  34  34  34  33  33 \n 33  33  34  34  33  32  32  35  34  36  36  37  35  31  29  28 \n 27  28  25  23  31  44  49  27  22  28  31  32  36  42  43  41 \n 38  41  39  38  37  36  37  36  40  40  36  32  34  33  31  31 \n 32  31  34  35  36  40  40  36  35  35  38  38  39  37  36  33 \n 33  34  43  55  76 100 130 148 154  79  31  31  29  29  31  31 \n 32  33  32  31  32  30  29  28  26  23  28  34  47  40  38  38 \n 36  36  37  36  35  34  41  68 122 143 145 140 138 135 132 130 \n122 119 112 109 107 102  98  96  93  93  95  95  92  94  95  95 \n107 116 117 122 127 133 137 141 146 144 142 140 137 131 127 129 \n131 127 129 131 120 108  92  73  56  45  32  29  28  27  25  25 \n 27  30  30  28  29  36  45  35  35  37  35  36  38  40  40  38 \n 49  51  50  50  50  50  54  54  56  61  67  67  73  75  77  77 \n 77  76  78  78  77  75  69  67  66  58  52  47  43  65 124 132 \n 87  82  97 107 114 120 140 193 208 223 250 179 133 121 143 147 \n127  62 131 112  49  54  60  58  59  56  55  56  59  59  59  56 \n 46  26  34  39  36  41  55  60  69  65  56  58  65  66  64  62 \n 60  58  56  53  48  42  39  38  35  34  36  37  38  36  37  37 \n 37  36  37  37  36  37  36  36  36  39  44 137 231 228 231 233 \n237 238  78  18  28  26  35  44  48  48  46  46  48  51  51  52 \n 52  50  44  24  24  27  25  31  49  63  67  63  59  55  52  48 \n 46  44  40  38  38  35  34  34  35  35  33  33  33  32  30  31 \n 29  31  32  32  31  30  31  32  31  32  33  31  28  30  52  75 \n 44  18  22  22  21  35  46  52  55  53  47  43  41  39  36  36 \n 34  34  35  34  32  32  31  31  30  30  33  29  20  30  23  22 \n 45  61  56  50  39  33  31  29  32  32  31  31  30  34  31  30 \n 28  27  29  29  29  30  29  29  28  28  29  28  29  31  29  27 \n 28  27  28  30  30  27  28  30  35  37  48  68  46  43  35  32 \n 34  33  33  34  36  36  36  35  33  33  31  30  30  31  31  31 \n 32  31  33  33  34  37  29  22  31  24  25  33  36  39  37  35 \n 31  30  30  29  29  30  33  30  29  30  29  28  31  30  30  29 \n 29  29  30  29  31  32  31  31  28  28  28  28  28  27  28  31 \n 31  30  30  31  33  34  32  42  41  35  35  35  35  36  34  33 \n 33  34  34  34  33  34  33  34  35  36  36  37  35  32  31  30 \n 28  28  27  20  28  38  40  21  26  30  27  28  32  37  41  40 \n 36  33  30  29  30  29  29  29  34  36  34  30  28  28  27  27 \n 27  28  30  28  31  34  35  31  30  30  31  33  35  37  37  39 \n 44  45  45  44  40  37  35  38  66 101  43  29  29  30  31  33 \n 32  33  32  31  31  30  29  28  27  24  26  32  48  41  40  39 \n 37  38  38  39  37  38  62  99  95  75  58  52  49  47  45  45 \n 41  41  42  41  41  41  41  38  37  36  33  36  37  37  38  37 \n 38  39  41  44  45  46  53  59  64  67  78  87 104 121 148 176 \n214 228 241 240 233 226 201 147  71  48  35  32  29  29  25  25 \n 28  31  32  29  29  32  47  35  34  35  37  36  37  37  39  35 \n 71  81  92 101 117 122 121 123 124 118 114 111 106 105 103 106 \n103 104 105 110 116 119 124 124 127 129 130 130 133 135 152 162 \n165 163 165 169 166 178 165 149 157 191 238 171 184 220 164 148 \n159 107 112 143  68  56  78  93  96  89  85  85  83  82  79  78 \n 60  27  31  39  34  36  51  59  67  69  61  60  61  64  65  62 \n 62  60  58  56  51  45  43  40  37  36  37  37  39  37  39  37 \n 37  38  38  37  37  37  38  36  36  37  40  66 133 136 139 144 \n153 158  64  19  27  27  33  44  48  48  46  45  48  49  49  50 \n 50  50  43  22  23  28  23  27  46  60  65  62  58  54  52  47 \n 46  43  40  38  36  36  36  35  34  33  32  32  31  31  31  32 \n 30  31  31  30  31  32  32  32  34  34  34  32  28  29  37  79 \n 50  19  23  22  21  35  46  51  55  53  49  45  42  42  38  36 \n 36  35  36  36  33  32  31  32  32  32  33  29  17  29  23  21 \n 40  60  59  54  41  34  31  32  33  32  29  29  30  31  30  31 \n 30  28  29  29  28  28  28  31  29  28  29  30  29  31  31  29 \n 29  29  32  31  28  26  26  28  32  35  42  72  50  44  36  34 \n 33  34  34  35  36  36  36  36  36  34  31  31  32  31  30  32 \n 33  33  34  33  33  35  28  21  29  24  25  32  37  39  36  33 \n 32  30  29  29  28  29  33  30  29  29  30  29  30  30  29  29 \n 31  29  29  28  30  30  30  29  28  29  30  29  28  28  28  30 \n 31  30  29  30  31  31  33  34  46  36  36  36  36  35  33  33 \n 33  35  36  33  34  36  35  35  36  37  36  37  36  33  33  31 \n 30  30  27  22  23  32  29  19  28  27  25  27  32  38  40  37 \n 33  31  27  27  27  27  28  29  30  31  33  32  31  30  26  26 \n 27  27  29  27  29  31  32  29  28  27  27  26  26  27  28  31 \n 36  44  44  40  42  38  34  33  29  35  55  36  31  31  31  32 \n 33  34  32  33  32  29  28  27  27  25  26  28  53  45  40  39 \n 38  38  39  40  40  44  47  34  29  31  33  35  35  37  38  38 \n 36  36  38  38  39  41  40  39  40  39  39  38  38  39  39  39 \n 39  38  39  41  41  40  41  38  39  39  38  37  37  32  35  36 \n 43  66  98 139 164 195 203 179 168 110  40  34  32  28  26  26 \n 29  33  33  27  28  29  43  37  36  37  38  37  38  38  40  38 \n 95  99  99  96  94  90  86  80  77  74  71  70  64  61  60  59 \n 56  57  54  56  58  58  58  56  57  58  58  62  67  74  79  89 \n101 115 136 165 207 235 206 216 164 151 212 163 182 202 172 137 \n175 135 118 138 111 107 113 117 118 115 111 107 106 106 102 101 \n 75  31  30  40  34  37  50  58  67  70  60  58  57  58  60  59 \n 60  59  54  54  54  53  40  40  37  38  41  38  38  40  41  41 \n 41  40  41  42  41  41  40  36  37  38  40  50 115 144 162 177 \n185 198  94  19  27  28  34  46  47  48  45  45  49  49  49  50 \n 49  49  43  23  22  28  24  27  42  56  64  61  56  54  52  50 \n 46  43  40  39  36  36  36  35  35  34  33  32  31  32  32  30 \n 31  31  33  31  31  32  32  32  34  34  33  31  29  30  34  66 \n 62  20  24  21  23  33  45  51  56  54  50  45  43  43  40  37 \n 34  35  37  37  34  32  31  32  32  31  33  28  17  28  22  21 \n 39  61  60  56  45  37  31  32  33  32  29  30  30  32  32  34 \n 33  34  33  32  31  32  33  33  30  30  30  30  30  31  30  29 \n 27  29  32  34  28  27  25  24  27  33  37  63  61  46  36  35 \n 34  35  35  35  37  38  37  37  36  36  33  34  34  32  31  33 \n 34  35  34  34  33  35  28  22  30  25  23  32  39  40  35  34 \n 33  31  29  29  27  28  30  30  30  28  30  30  31  31  29  30 \n 30  30  31  29  30  30  29  29  29  28  29  30  29  29  30  31 \n 32  29  30  31  31  30  29  32  49  40  38  38  36  35  35  36 \n 33  34  37  35  34  35  35  36  36  38  37  38  36  33  32  30 \n 31  30  28  24  21  31  27  19  28  26  25  30  33  37  38  34 \n 32  31  28  28  28  27  27  29  30  30  31  31  32  30  26  25 \n 26  27  28  28  28  29  30  28  27  25  26  26  25  23  25  26 \n 32  39  38  37  38  40  34  33  32  26  39  40  32  32  31  31 \n 33  32  33  32  31  30  30  29  26  23  24  29  49  49  41  39 \n 40  39  39  40  41  41  29  27  29  31  32  33  36  40  38  39 \n 38  38  38  40  38  39  37  37  36  35  37  36  36  36  36  36 \n 36  37  36  37  38  36  37  38  38  37  37  36  37  39  41  41 \n 42  42  43  46  52  66  66  53  73 118  76  34  32  27  26  25 \n 29  34  34  25  27  29  41  40  36  37  38  39  39  40  41  38 \n 51  58  63  72  79  77  75  73  73  70  68  65  60  58  57  58 \n 58  56  55  55  53  52  51  50  43  40  41  41  41  42  45  44 \n 47  48  47  45  97 166 185 207 204 195 200 193 196 193 200 188 \n179 156 146 140 143 152 150 152 154 153 145 138 143 140 137 142 \n112  34  30  38  36  37  49  58  74 101 132 137 137 139 137 137 \n134 130 128 126 129 127 119 115 106 102  99  97  90  85  77  74 \n 66  61  56  54  52  50  43  41  38  37  38  43  86 201 224 213 \n201 188  83  21  28  29  33  46  48  47  45  45  47  47  48  50 \n 51  50  43  22  21  26  22  26  39  52  63  61  56  54  51  49 \n 44  43  41  40  39  38  38  36  36  36  34  34  33  32  32  32 \n 33  32  34  34  34  35  34  36  35  33  34  33  31  31  31  43 \n 77  25  23  24  27  36  49  53  58  56  49  46  47  44  40  39 \n 38  36  35  36  36  34  32  32  31  30  32  28  17  28  23  19 \n 35  62  62  57  50  40  32  32  32  31  30  30  29  33  38  37 \n 34  35  36  36  34  35  34  33  35  34  33  32  33  34  36  32 \n 31  32  32  35  31  30  30  31  30  31  36  51  77  47  40  37 \n 38  37  37  36  38  39  38  37  36  37  36  36  35  34  33  34 \n 36  36  35  34  34  35  27  22  29  24  23  31  38  40  36  35 \n 33  30  29  29  29  30  30  31  32  31  32  33  31  32  31  31 \n 30  30  31  30  29  28  27  29  30  30  29  30  31  30  31  31 \n 28  27  29  28  30  32  31  33  43  46  39  38  37  38  37  36 \n 36  35  37  38  38  37  36  38  37  38  39  37  36  35  32  32 \n 33  31  31  26  21  29  25  20  30  25  23  35  37  37  37  34 \n 31  31  30  27  27  29  30  31  30  28  29  28  28  27  26  27 \n 25  25  27  27  27  29  29  27  28  27  26  26  25  23  26  28 \n 33  33  33  34  38  41  38  34  35  31  31  45  34  32  32  32 \n 35  35  34  34  32  32  31  30  30  24  21  27  44  52  41  40 \n 39  38  39  39  40  34  25  30  30  29  31  35  36  38  40  39 \n 37  37  36  36  37  37  36  36  35  33  35  36  35  35  35  33 \n 32  33  34  34  34  33  35  36  37  38  36  36  37  38  38  38 \n 40  40  42  41  39  42  42  41  38  36  76  50  33  28  26  27 \n 31  36  35  25  23  28  36  42  38  41  42  42  42  43  40  38 \n 40  49  53  63  71  74  73  73  74  72  70  67  60  58  58  58 \n 55  53  55  53  51  52  50  46  39  37  35  33  33  34  35  35 \n 37  39  43  44  42  50  64 105 173 170 157 154 158 161 162 160 \n160 165 203 204 203 208 212 220 223 223 208 182 218 187 189 215 \n180  45  29  36  37  39  48  59  94  99  85  83  81  83  78  75 \n 76  74  73  71  67  68  68  68  74  74  78  86  93  97 105 114 \n123 128 126 131 133 131 124 115 104  94  79  71  80 151 161 151 \n150 150  89  27  28  28  35  46  49  48  45  45  46  46  48  49 \n 48  49  44  24  20  26  23  25  38  51  60  59  56  54  50  48 \n 42  42  42  42  42  40  40  41  41  40  38  38  37  36  36  38 \n 36  36  35  34  37  38  38  38  38  37  37  36  34  34  33  33 \n 79  42  25  26  26  38  50  54  61  59  54  51  48  48  43  40 \n 38  38  36  36  35  34  33  32  31  31  33  28  16  28  24  19 \n 35  59  59  55  51  41  34  31  32  31  30  30  29  31  36  36 \n 34  37  40  37  36  37  35  34  33  29  30  30  32  33  35  31 \n 30  32  33  32  32  30  30  32  30  29  30  40  77  50  38  38 \n 39  40  40  41  40  40  40  40  38  38  38  38  38  38  37  36 \n 38  39  37  37  35  35  24  21  28  24  24  32  38  40  37  35 \n 32  30  31  29  29  28  29  30  29  30  31  33  31  32  31  32 \n 30  29  29  28  29  28  28  29  30  29  28  28  30  30  33  32 \n 31  29  29  28  29  29  29  32  42  49  38  36  36  36  37  37 \n 35  36  37  38  39  39  38  39  37  37  39  38  36  35  33  33 \n 34  33  34  27  19  29  22  19  30  24  23  36  40  38  34  32 \n 30  31  31  28  27  28  30  30  29  29  30  28  25  25  26  26 \n 26  26  26  27  27  30  29  29  27  27  26  25  24  24  26  29 \n 33  31  29  32  38  41  40  36  35  35  30  47  36  32  33  33 \n 35  36  33  33  31  29  29  30  30  25  21  24  45  58  42  40 \n 39  38  40  40  40  30  23  30  29  30  33  36  36  39  40  40 \n 39  37  34  35  37  35  33  34  34  33  34  35  34  34  35  33 \n 32  33  33  31  33  34  34  36  36  34  34  34  36  36  37  35 \n 37  38  39  38  39  39  38  37  37  35  43  51  33  28  25  26 \n 31  36  36  26  22  29  33  40  39  40  43  43  42  42  40  35 \n 34  43  46  51  60  70  74  71  72  70  67  66  61  59  56  54 \n 54  54  51  52  51  51  48  46  39  36  34  33  30  31  32  31 \n 32  34  35  36  35  38  42  45  73 136 148 127 112 108 102  97 \n103 131 233 239 241 241 243 246 246 248 222 199 243 195 221 244 \n210  58  25  34  35  35  48  61  35  31  41  43  50  56  68  68 \n 68  65  64  63  59  55  52  52  51  54  54  56  54  54  51  47 \n 41  40  42  47  57  66  80  95 112 125 140 148 160 171 182 183 \n183 189 132  50  25  30  35  47  48  47  45  46  47  48  51  51 \n 48  49  43  24  21  27  24  25  37  50  58  60  57  55  50  47 \n 45  43  42  45  55  59  60  63  67  69  70  72  72  73  70  69 \n 69  67  65  69  70  70  69  66  63  62  61  57  51  49  48  49 \n 72  65  36  30  32  40  51  56  63  58  57  55  54  54  50  47 \n 40  37  36  37  34  34  34  34  33  33  34  28  18  26  25  21 \n 36  60  60  56  49  42  37  33  31  31  31  30  29  30  30  31 \n 31  34  37  40  61  78  91  98 107 111 117 119 126 125 121 122 \n122 118 119 121 120 118 117 117 115 115 119 118 124 117 105 100 \n 98  92  80  79  74  71  64  59  54  54  52  48  45  45  43  41 \n 45  46  43  40  36  34  23  22  29  23  23  33  40  42  38  36 \n 31  30  32  31  31  31  29  28  29  31  31  32  31  31  29  30 \n 29  28  27  27  28  28  27  29  33  32  29  29  31  33  33  32 \n 32  32  29  27  29  29  29  30  38  58  40  37  39  37  36  36 \n 36  37  38  39  39  39  40  41  38  38  39  40  38  38  35  33 \n 34  33  34  28  20  27  20  25  32  23  26  37  40  38  34  32 \n 29  29  30  28  27  29  29  27  28  29  28  29  26  26  26  26 \n 28  26  25  26  28  31  31  30  27  26  25  24  26  26  26  30 \n 33  28  26  31  39  41  39  38  38  36  29  44  41  34  32  32 \n 34  34  34  33  32  30  28  29  31  26  21  23  36  66  42  41 \n 39  39  39  39  38  29  25  30  30  29  32  35  39  39  40  40 \n 39  36  35  35  35  34  34  34  35  35  34  33  34  34  33  33 \n 33  33  32  31  33  35  33  33  33  33  34  33  33  34  32  33 \n 37  36  37  38  37  38  37  36  35  36  33  46  36  29  26  26 \n 29  35  37  28  19  28  31  41  39  40  42  42  41  39  36  35 \n 32  40  42  44  54  65  73  69  69  69  67  64  62  60  57  54 \n 54  53  51  52  51  52  48  44  39  36  35  34  34  34  33  32 \n 32  34  34  35  32  35  37  38  48  77 120  76  67  65  70  75 \n 97 126 174 193 209 222 232 241 244 243 187 176 212 158 190 196 \n163  50  23  31  36  33  49  56  22  26  35  40  47  58  69  70 \n 68  63  64  63  61  58  55  55  53  52  51  50  50  48  46  48 \n 50  48  43  41  44  42  42  43  44  47  51  55  66  78  96 118 \n178 241 227 151  49  29  36  48  50  46  44  45  43  48  51  53 \n 50  50  44  25  20  28  24  26  37  47  56  58  57  54  50  47 \n 44  43  83 120 135 133 131 128 126 125 118 112 108 109 106 104 \n107 110 107 109 118 121 121 124 124 121 127 129 129 134 135 137 \n142 142 131 127 122 119 118 114 111 102  89  77  67  65  59  52 \n 45  42  39  36  35  33  34  33  33  32  33  26  18  25  23  20 \n 36  63  61  55  48  43  37  33  32  32  32  31  29  28  31  32 \n 31  31  49  92 121 115  99  94  82  77  67  61  58  52  52  49 \n 48  45  47  52  52  54  54  55  50  51  53  57  57  62  67  75 \n 84  89 101 109 120 129 139 147 153 152 150 146 133 125 108  86 \n 72  66  52  46  40  39  22  22  28  22  24  35  44  46  40  36 \n 32  31  32  31  30  30  29  30  30  30  32  32  33  31  30  30 \n 30  30  29  29  29  29  28  29  32  32  30  30  34  34  36  34 \n 32  31  30  29  30  29  29  31  35  62  45  40  38  38  38  36 \n 36  38  40  40  39  40  38  39  39  40  40  40  40  38  36  35 \n 36  33  35  30  21  29  21  27  29  23  27  37  40  38  34  31 \n 31  31  29  28  28  27  30  30  30  29  27  28  26  27  27  27 \n 28  28  28  27  28  31  31  29  27  26  25  26  25  26  26  28 \n 32  27  26  30  38  40  39  37  38  39  31  40  44  35  34  33 \n 34  35  33  34  34  32  30  31  33  28  20  23  34  70  42  41 \n 39  37  38  40  40  30  26  31  29  30  33  35  38  39  41  42 \n 39  38  35  35  35  34  35  35  35  35  35  35  35  34  33  35 \n 35  34  32  34  34  34  32  34  33  32  32  31  33  32  34  36 \n 37  36  38  38  37  39  38  37  35  36  32  40  42  29  26  26 \n 28  34  37  29  18  25  29  39  38  38  40  41  40  39  37  36 \n 28  37  39  40  48  56  68  71  69  69  66  62  59  61  57  56 \n 55  54  52  50  50  48  46  44  42  37  36  34  33  33  34  34 \n 34  34  34  32  31  33  35  34  36  46  85 106 154 171 127 132 \n179 188 201 222 225 211 205 196 180 162 108 109 118  90 117 128 \n124  54  25  30  36  34  47  55  22  23  35  36  44  58  72  72 \n 65  65  65  63  61  58  54  54  53  50  44  43  42  42  43  42 \n 44  42  38  38  38  38  40  39  43  43  44  43  47  48  50  48 \n 51 110 146 153 163  82  36  50  49  46  44  44  47  51  52  54 \n 50  48  44  26  19  28  25  27  35  45  54  54  56  54  50  47 \n 47  63  65  54  42  41  39  39  39  40  41  37  36  37  36  37 \n 39  38  47  51  50  47  46  46  41  41  40  37  36  40  42  45 \n 51  63  75  82  95 106 117 130 147 161 175 186 193 205 187 127 \n 59  43  38  35  35  35  33  34  33  33  33  26  17  26  24  20 \n 36  61  63  58  51  44  35  31  29  30  31  31  30  29  33  34 \n 34  41  54  44  29  27  29  29  34  35  36  37  38  38  38  37 \n 38  40  44  44  45  44  47  47  48  45  46  45  39  38  38  37 \n 36  35  38  37  35  34  38  38  49  59  78  96 119 144 166 174 \n213 228 173 101  46  38  23  22  28  24  28  37  46  45  39  35 \n 31  31  31  29  30  31  31  30  31  31  32  31  32  32  31  30 \n 32  33  30  28  28  27  30  31  33  31  32  33  36  36  37  37 \n 35  35  33  34  32  31  29  31  35  50  52  39  39  39  38  38 \n 36  37  38  40  42  42  42  41  40  39  42  41  42  41  39  38 \n 38  38  39  34  26  31  22  30  32  22  30  39  45  41  36  32 \n 30  30  29  29  29  29  29  28  28  29  29  27  26  25  24  27 \n 28  28  29  28  29  31  30  29  28  27  25  27  27  25  25  29 \n 31  28  27  30  38  39  38  36  37  39  36  33  43  36  34  35 \n 35  35  34  33  32  32  30  31  32  30  22  22  28  63  50  41 \n 40  37  39  39  39  29  26  32  30  31  34  37  38  37  41  44 \n 39  38  36  36  36  34  34  35  36  35  34  35  36  33  35  35 \n 34  34  34  31  33  34  32  33  34  34  34  34  35  35  34  36 \n 35  36  38  38  37  38  37  36  34  34  34  34  43  29  26  26 \n 30  36  37  31  19  22  29  38  39  37  41  43  42  38  36  36 \n 27  35  37  35  42  50  63  71  69  67  65  62  58  60  58  58 \n 57  56  53  52  51  52  48  47  41  38  37  38  34  32  36  34 \n 34  33  34  31  30  31  31  32  33  36  61 103 156 175 179 131 \n171 204 208 194 171 153 148 146 144 142 138 141 139 136 140 139 \n132  62  25  30  37  35  47  56  29  25  33  34  42  53  71  72 \n 66  66  65  65  62  60  55  53  52  49  44  43  40  42  42  40 \n 40  40  39  38  38  37  39  39  37  36  40  40  42  41  42  45 \n 46  47  47  49  97 141  64  52  50  49  47  45  49  51  52  54 \n 51  49  47  28  18  26  23  24  36  46  54  54  55  53  50  48 \n 48  38  27  27  28  32  45  44  47  50  54  55  53  50  50  51 \n 52  53  54  56  54  54  49  51  51  49  48  46  46  45  45  44 \n 45  47  45  44  41  43  45  49  52  55  62  74  92 157 227 210 \n161  82  36  37  35  34  35  35  35  32  33  27  18  26  25  21 \n 36  60  62  58  51  44  36  33  32  31  30  30  31  29  29  31 \n 35  43  31  23  26  24  27  32  36  36  41  42  42  43  45  46 \n 45  43  41  42  41  38  39  40  41  42  46  38  34  35  34  32 \n 32  31  32  35  35  37  40  41  40  40  38  38  40  43  52  61 \n 98 167 190 187 136  52  21  23  27  23  30  37  46  43  37  34 \n 31  30  29  27  31  31  30  29  29  29  31  29  32  33  32  31 \n 32  31  30  29  29  27  29  32  31  31  32  35  35  37  49  55 \n 61  64  68  72  74  75  77  80  82  88  94  86  86  85  85  81 \n 77  78  72  73  70  66  58  51  44  41  41  40  40  37  36  38 \n 41  42  44  42  33  36  28  34  34  28  35  44  50  46  36  32 \n 30  31  32  30  28  27  28  28  28  28  28  29  27  27  28  28 \n 28  28  29  29  29  31  30  30  28  27  26  27  26  25  26  30 \n 30  28  27  30  37  38  37  37  38  40  38  31  44  37  35  37 \n 36  37  36  34  35  34  31  32  33  32  24  22  28  57  58  38 \n 37  37  39  38  38  28  26  32  30  30  35  38  39  38  42  44 \n 41  37  37  37  36  34  33  35  36  35  35  37  37  36  35  35 \n 34  32  34  33  33  35  33  33  33  34  33  34  34  36  36  37 \n 35  36  36  37  36  36  37  37  34  34  33  33  41  32  25  26 \n 33  38  39  33  21  22  28  37  40  38  41  42  41  40  38  38 \n 23  32  36  32  38  49  55  66  70  65  64  60  60  63  59  58 \n 59  56  54  52  51  51  50  48  41  39  34  35  35  32  33  33 \n 33  33  32  32  31  29  28  30  34  36  46  76 152 170 173 126 \n172 186 154 146 146 148 148 148 147 149 152 151 153 153 150 146 \n142  77  25  28  36  33  42  59  32  26  35  37  38  49  66  70 \n 67  67  67  67  62  58  54  53  52  49  44  42  41  41  41  40 \n 41  39  38  36  38  39  39  38  38  35  37  37  40  38  37  40 \n 40  41  40  42  44  68 104  64  51  49  47  46  48  52  51  51 \n 53  49  44  28  18  25  22  24  36  46  55  57  53  50  48  46 \n 40  22  21  29  29  30  54  57  50  49  53  56  58  55  57  53 \n 49  47  50  48  43  42  40  39  41  41  37  34  35  35  33  34 \n 35  36  38  40  44  43  43  40  39  37  39  38  41  38  42  56 \n100 146  79  37  34  33  34  34  34  34  33  26  15  24  23  19 \n 37  59  62  57  51  45  36  32  31  32  32  32  29  27  30  30 \n 30  34  19  22  26  23  26  37  41  40  42  44  43  43  42  41 \n 39  37  35  33  33  34  33  30  32  33  35  34  31  31  31  29 \n 27  28  27  28  30  29  32  34  33  31  32  32  30  31  33  35 \n 38  33  37  49 115 142  32  21  25  22  28  38  48  45  38  33 \n 33  31  28  27  29  30  29  29  29  30  31  31  33  31  33  31 \n 31  32  32  30  29  28  29  31  31  33  44  76 125 152 163 160 \n156 150 147 146 138 134 125 118 116 114 116 112 113 110 111 112 \n110 112 113 111 119 129 131 129 132 136 136 135 130 128 124 118 \n112 104  96  87  81  74  65  62  57  53  52  58  58  51  45  38 \n 34  32  30  28  29  27  28  27  27  27  28  27  27  27  27  29 \n 28  27  28  26  27  31  32  30  28  27  26  25  25  26  27  30 \n 30  28  27  28  34  39  37  37  39  39  39  32  46  43  36  36 \n 37  38  37  35  36  35  33  34  34  33  24  20  24  42  73  42 \n 39  38  39  38  36  27  27  31  29  29  34  37  39  40  42  44 \n 38  37  38  37  34  34  34  34  35  34  35  36  35  34  35  35 \n 34  32  33  33  31  35  35  34  34  35  34  34  34  36  37  37 \n 34  36  37  38  38  38  38  37  34  35  34  30  40  34  28  30 \n 35  38  39  35  20  19  26  37  42  39  39  40  40  41  39  38 \n 23  31  36  33  36  48  52  60  70  67  63  62  61  62  61  60 \n 59  57  56  54  51  50  48  48  42  37  34  34  33  32  31  33 \n 34  35  32  30  29  29  28  31  35  36  39  50 147 166 156 138 \n151 191 168 156 154 154 154 155 157 157 158 159 160 159 161 164 \n165 102  21  28  35  34  46  58  39  23  32  35  34  45  63  71 \n 68  65  65  66  64  60  55  52  51  48  45  42  43  41  42  40 \n 41  40  37  37  37  39  39  37  36  35  36  39  38  36  37  39 \n 41  40  38  38  39  43  80  81  51  50  46  47  49  51  52  51 \n 52  50  45  30  17  24  25  26  35  45  53  55  53  50  47  47 \n 38  21  24  31  26  29  52  61  55  52  55  57  55  55  55  52 \n 43  39  50  49  43  42  42  40  37  39  36  34  32  33  29  30 \n 30  31  30  33  39  41  38  35  32  31  33  34  35  38  42  41 \n 39  64 105  58  35  34  35  36  35  33  33  25  15  24  23  19 \n 36  57  62  58  53  46  39  34  32  32  32  31  30  29  30  29 \n 31  31  18  24  28  22  25  34  44  44  47  44  42  42  39  38 \n 36  36  33  35  31  30  30  30  29  29  30  31  32  30  31  28 \n 29  29  28  29  28  29  28  30  30  31  31  31  27  26  30  30 \n 31  33  35  36  38  81  84  29  25  21  29  38  47  44  38  34 \n 33  32  32  30  29  28  29  31  31  30  30  32  32  32  32  31 \n 32  32  31  32  30  28  29  31  33  38  72  99  85  70  66  60 \n 53  52  49  46  40  41  39  37  39  45  48  47  47  45  38  37 \n 34  36  35  35  35  40  42  45  46  45  57  62  71  78  84  97 \n114 126 144 155 165 176 185 184 181 177 165 156 135 104  61  44 \n 38  33  31  30  29  28  28  28  27  27  28  26  27  28  28  28 \n 26  26  27  26  28  32  33  29  29  27  27  26  27  27  28  31 \n 29  27  26  27  31  37  38  39  39  39  41  32  42  44  36  36 \n 37  36  38  37  38  37  34  35  36  36  27  23  24  33  74  43 \n 41  39  40  40  36  28  30  31  30  31  36  38  40  41  44  44 \n 39  39  39  36  34  34  34  35  35  36  36  36  35  36  32  34 \n 33  32  33  34  34  35  35  35  34  34  33  34  33  35  38  36 \n 36  35  37  38  38  38  38  37  34  34  35  30  40  35  26  30 \n 36  38  39  36  22  17  24  33  48  41  38  39  41  43  41  40 \n 20  28  36  32  32  42  51  55  66  67  63  61  60  63  62  60 \n 58  56  55  54  51  49  49  46  42  37  35  34  33  33  33  33 \n 34  35  33  32  30  30  31  35  38  35  35  38  98 150 140 170 \n146 186 185 190 189 189 195 199 200 206 211 217 226 230 233 237 \n243 172  19  25  36  35  44  57  44  23  30  35  34  40  58  70 \n 69  65  67  63  63  63  57  53  49  47  42  41  41  41  41  41 \n 39  40  39  39  38  37  38  38  36  37  36  37  36  38  38  38 \n 38  38  38  38  38  41  50  80  56  48  47  47  50  53  52  50 \n 50  51  47  31  14  22  24  24  33  44  53  53  52  49  48  48 \n 40  22  22  29  26  27  48  65  61  59  58  57  53  49  48  44 \n 39  40  42  42  41  40  37  36  33  33  36  36  34  32  31  30 \n 28  28  29  31  36  37  35  30  31  31  31  31  32  33  37  38 \n 38  39  57  79  36  34  35  36  36  35  34  25  16  23  20  18 \n 37  58  60  57  51  45  39  34  32  32  32  31  32  32  29  29 \n 31  30  17  25  29  23  24  33  43  47  47  45  42  39  37  35 \n 34  33  35  36  32  30  29  30  30  29  29  30  29  30  29  27 \n 29  30  27  29  30  29  27  29  30  30  29  28  27  28  28  29 \n 29  30  31  33  33  34  65  57  26  21  29  40  47  44  39  36 \n 35  32  30  30  29  29  30  31  29  29  31  31  31  32  30  30 \n 30  30  31  32  31  31  31  34  34  47  38  27  29  29  31  36 \n 40  42  43  41  40  39  39  40  43  45  49  47  47  45  46  45 \n 42  37  37  36  35  35  36  36  36  38  37  38  40  41  39  40 \n 38  40  36  36  40  46  65  85 116 143 177 204 239 245 195 128 \n 50  33  34  32  30  28  30  29  29  29  28  29  26  26  27  27 \n 26  26  26  26  28  31  31  28  28  27  26  26  26  25  29  30 \n 27  25  24  25  29  33  36  38  39  37  42  38  40  46  40  41 \n 40  39  41  40  40  38  36  38  40  40  31  25  27  34  72  50 \n 43  43  44  42  36  27  33  34  32  35  36  41  41  42  43  43 \n 40  41  40  38  37  36  36  35  37  36  36  36  37  36  35  35 \n 34  33  33  34  34  33  33  34  34  33  32  34  35  36  35  36 \n 36  35  37  37  38  38  36  37  35  34  32  31  34  36  28  32 \n 35  38  39  36  24  16  21  28  52  39  40  42  46  46  44  42 \n 19  25  37  32  30  38  53  52  63  66  66  62  60  61  61  59 \n 56  56  55  53  52  53  52  48  42  37  34  33  35  33  32  33 \n 34  36  35  32  30  29  31  36  36  32  34  38  69 139 145 183 \n164 180 198 238 240 240 241 242 241 242 243 244 243 244 243 243 \n244 184  24  26  34  34  45  56  47  24  29  35  33  37  52  67 \n 73  70  67  65  61  60  55  51  47  46  43  42  42  41  39  38 \n 38  38  39  39  38  37  37  38  38  38  37  37  37  37  37  36 \n 36  36  37  38  39  39  42  66  73  50  47  47  50  54  52  51 \n 49  48  45  34  14  23  24  24  33  44  52  53  51  49  47  46 \n 42  24  22  30  28  26  44  67  63  61  59  56  51  46  42  38 \n 38  38  38  38  36  33  33  33  32  34  36  35  32  32  33  33 \n 29  27  29  31  33  36  34  29  29  30  30  32  32  32  36  37 \n 35  38  43  66  52  35  36  39  36  36  35  26  17  22  20  19 \n 36  54  62  57  51  46  40  35  33  32  31  30  32  31  30  31 \n 34  33  17  25  29  21  23  31  41  47  51  46  39  38  35  35 \n 34  35  35  35  33  31  30  30  30  29  29  30  30  30  29  29 \n 29  29  29  29  31  29  27  29  29  28  28  28  27  28  27  28 \n 29  28  29  29  30  35  44  69  28  20  28  39  48  45  41  37 \n 33  31  31  29  28  29  31  31  29  30  30  31  31  33  31  30 \n 32  31  31  32  30  32  33  34  35  37  21  23  29  26  31  35 \n 36  41  47  48  45  41  39  39  40  40  42  40  37  36  37  37 \n 37  35  32  31  30  30  30  28  29  30  30  30  32  34  37  36 \n 34  34  35  33  33  33  31  32  37  39  50  60  97 124 136 163 \n146  52  33  33  29  30  31  30  31  30  29  29  27  26  25  26 \n 26  28  26  26  27  30  30  27  26  27  28  27  26  27  28  30 \n 28  25  26  27  28  33  37  39  38  36  45  46  46  57  51  56 \n 59  61  65  66  65  63  62  61  62  59  48  37  30  35  60  50 \n 39  40  43  40  35  29  35  34  34  39  40  44  46  45  45  44 \n 43  42  42  40  41  39  39  40  40  40  39  40  37  36  37  35 \n 35  35  33  34  35  33  33  33  34  34  33  34  36  36  33  35 \n 36  36  37  38  39  38  38  39  36  33  32  31  33  39  31  33 \n 36  38  39  39  26  17  20  26  52  42  43  44  48  46  46  46 \n 24  23  34  34  31  34  55  52  59  64  67  66  62  61  61  61 \n 57  56  54  52  53  53  50  49  44  37  33  32  33  33  33  34 \n 35  35  36  34  32  32  32  37  36  31  31  33  47 103 145 158 \n157 160 193 224 240 238 239 238 236 238 239 241 240 241 240 239 \n239 199  30  27  32  35  44  55  53  25  29  36  33  33  46  64 \n 76  75  68  64  60  58  52  47  44  44  44  43  41  39  39  39 \n 38  37  36  35  35  35  37  37  39  36  38  36  38  36  37  36 \n 34  35  38  38  36  36  39  46  82  55  49  48  49  51  51  51 \n 50  48  46  33  15  22  24  24  32  42  51  54  53  52  48  44 \n 43  26  20  32  30  26  39  67  68  64  60  55  50  43  39  37 \n 37  37  37  38  36  36  35  37  36  35  35  36  35  34  35  37 \n 34  29  28  29  33  36  36  32  30  31  32  32  33  33  34  33 \n 34  34  37  46  64  43  36  35  36  36  34  25  16  23  20  19 \n 34  51  60  56  49  45  38  33  33  33  32  30  31  32  31  32 \n 34  34  16  23  28  21  23  34  41  47  53  49  40  37  33  34 \n 34  35  34  34  31  31  31  30  30  30  29  30  31  30  29  28 \n 27  28  29  28  29  28  29  30  30  29  30  29  27  27  27  29 \n 32  29  26  27  28  33  38  52  43  20  29  40  49  45  41  36 \n 34  32  31  30  31  29  30  30  30  31  30  30  31  32  30  30 \n 28  29  29  31  31  30  32  34  34  26  20  27  28  25  31  35 \n 39  41  45  46  45  40  36  32  31  31  32  30  29  30  31  32 \n 31  30  30  29  29  27  28  29  29  29  28  29  28  29  30  26 \n 29  28  28  26  27  29  27  29  31  33  36  39  39  37  33  35 \n 82 113  41  33  28  29  30  31  32  30  29  28  26  26  26  26 \n 27  28  28  27  29  32  32  29  27  28  28  27  27  28  29  30 \n 26  25  25  26  30  37  66 100 141 155 162 164 159 161 155 153 \n148 146 145 139 133 132 132 132 132 135 142 144 143 141 146 144 \n140 135 133 131 114 107 105 100  89  82  79  79  75  71  62  64 \n 62  58  52  52  46  47  44  45  47  49  47  45  43  40  37  36 \n 37  36  34  32  34  33  34  34  35  34  34  35  35  34  34  37 \n 37  38  37  38  38  37  39  38  38  34  31  32  31  42  33  34 \n 36  38  40  40  27  17  18  24  47  45  44  44  47  46  47  46 \n 34  21  32  35  29  33  52  54  54  62  66  66  62  61  62  62 \n 60  57  55  51  53  52  49  49  44  38  36  36  34  33  34  34 \n 35  37  36  35  33  32  33  37  36  32  31  33  39  74 123 115 \n133 135 193 223 247 244 245 244 241 242 243 244 243 243 243 244 \n243 215  40  27  31  35  44  57  52  27  26  35  32  33  43  62 \n 74  75  70  66  60  55  48  45  44  44  46  42  41  42  39  38 \n 37  36  36  35  34  34  37  36  37  36  37  36  38  37  37  36 \n 36  34  36  36  35  34  39  42  76  69  49  50  50  51  51  50 \n 49  47  46  34  14  21  24  23  32  42  52  53  53  51  47  44 \n 44  28  19  31  31  26  35  65  72  66  60  56  49  42  39  37 \n 37  38  37  40  38  38  39  40  39  37  37  37  36  34  34  35 \n 35  29  27  28  31  38  36  32  31  31  31  31  31  32  33  31 \n 31  33  34  42  61  49  35  34  36  35  36  25  18  25  21  20 \n 34  48  59  55  49  46  38  33  32  32  31  31  32  31  30  30 \n 34  35  17  22  29  23  22  31  40  44  52  49  41  37  34  35 \n 34  34  33  35  33  33  31  31  30  29  31  30  30  30  29  27 \n 27  27  28  27  27  29  29  30  30  28  29  30  28  28  30  30 \n 30  27  25  26  27  31  34  42  52  22  29  39  48  45  40  36 \n 36  35  32  30  30  31  30  31  31  31  31  33  33  33  32  31 \n 30  30  29  30  31  30  30  34  36  23  19  28  27  24  35  41 \n 41  44  48  47  43  39  38  34  32  30  29  28  29  30  32  31 \n 30  29  29  30  29  27  28  29  30  29  31  31  29  30  30  28 \n 28  25  25  25  24  25  25  26  26  30  32  34  33  36  36  34 \n 35  66  69  34  28  29  29  30  31  29  29  27  26  26  27  27 \n 26  26  28  29  32  33  32  29  27  28  28  28  26  28  31  29 \n 26  24  26  26  34  67 120 115  90  81  73  73  66  60  59  56 \n 49  49  51  47  41  47  51  50  50  47  47  51  55  56  60  63 \n 67  72  80  86  94 100 110 117 131 143 147 149 154 157 162 166 \n163 156 152 143 134 127 119 106  91  81  68  60  51  48  40  39 \n 36  35  35  33  34  34  33  34  35  34  35  37  36  35  36  36 \n 35  37  36  38  39  38  38  38  39  33  28  31  30  42  35  35 \n 36  41  41  39  28  18  17  22  44  50  48  47  48  48  49  49 \n 54  21  29  34  28  32  47  56  54  57  64  64  60  60  63  62 \n 60  58  55  53  52  52  51  49  46  41  36  36  36  35  34  33 \n 34  35  34  36  35  34  32  37  35  31  30  32  35  49 109 115 \n150 140 179 206 248 246 246 247 245 245 247 247 247 246 245 244 \n243 228  53  28  31  33  44  59  58  27  25  35  33  33  40  55 \n 72  76  72  64  59  52  48  46  45  43  43  42  41  40  38  37 \n 36  36  35  34  35  34  33  34  35  36  37  37  38  37  37  35 \n 34  34  37  37  35  34  34  38  56  88  53  52  51  52  50  51 \n 49  49  47  35  15  18  24  23  33  40  50  53  53  50  44  43 \n 42  31  20  29  31  25  32  58  73  69  61  56  49  43  40  38 \n 36  36  37  38  40  40  41  43  40  37  38  36  36  33  32  34 \n 35  31  27  28  33  37  36  33  31  30  29  30  31  33  32  30 \n 28  30  33  37  55  62  36  34  33  34  35  24  17  24  19  19 \n 33  46  55  54  48  46  38  35  33  34  33  31  32  31  30  31 \n 34  35  17  22  32  24  23  31  40  42  51  51  44  38  35  33 \n 32  34  33  33  32  32  33  32  31  30  32  31  32  31  30  29 \n 29  29  30  29  28  28  30  30  30  29  31  30  27  28  30  31 \n 30  27  25  26  25  28  31  34  57  32  31  42  49  45  42  37 \n 38  34  32  31  31  31  34  32  32  34  33  35  34  33  33  32 \n 30  31  33  32  32  31  33  33  34  24  22  31  27  23  33  43 \n 46  47  48  44  39  36  35  35  32  28  27  28  29  28  29  28 \n 29  29  30  30  29  30  28  28  29  29  29  29  31  27  27  28 \n 28  27  26  25  25  25  24  24  25  26  30  28  29  27  31  35 \n 35  33  55  41  31  28  27  28  30  29  30  29  27  26  28  28 \n 26  25  27  29  30  31  30  28  28  29  28  27  27  28  27  27 \n 27  25  26  27  44  59  37  27  30  30  33  35  38  38  35  36 \n 36  35  37  38  37  40  43  42  42  42  41  40  38  37  36  36 \n 34  35  35  33  31  32  30  27  29  33  37  37  39  42  54  68 \n 83  96 119 132 151 167 186 202 220 226 230 200 133  83  48  42 \n 36  34  33  33  35  33  32  33  34  34  34  35  35  35  36  36 \n 36  37  36  37  37  37  37  38  37  35  28  29  30  37  42  37 \n 37  42  43  41  29  18  15  21  40  56  51  49  50  50  54  53 \n 84  20  25  34  31  31  44  57  57  55  65  62  60  61  61  63 \n 62  58  58  54  55  53  51  50  47  41  36  36  35  35  33  33 \n 32  33  32  33  33  33  32  35  37  33  31  33  35  39  86 119 \n170 185 155 193 248 247 248 248 246 247 247 246 246 246 245 244 \n245 235  65  28  30  35  44  58  55  30  24  35  33  32  40  55 \n 70  73  71  68  61  55  48  46  44  43  42  42  44  45  39  37 \n 37  36  35  34  35  35  34  34  35  34  36  37  38  39  38  38 \n 35  35  37  37  35  35  34  34  46  86  65  57  55  53  51  51 \n 50  52  51  37  15  19  24  25  35  41  49  52  52  49  46  45 \n 43  33  20  31  34  25  29  49  71  68  62  56  50  46  41  37 \n 36  37  37  39  40  39  47  46  40  39  37  36  36  34  31  33 \n 37  32  29  30  32  34  37  34  33  30  30  31  30  33  31  30 \n 28  29  29  34  46  68  39  35  34  37  35  24  17  22  18  19 \n 31  46  55  54  49  45  37  34  34  34  34  32  31  32  31  32 \n 32  35  17  22  30  25  23  31  42  42  51  50  45  41  36  35 \n 33  34  34  34  34  33  33  33  31  33  35  32  33  31  30  30 \n 29  29  30  29  26  27  28  28  29  29  31  30  28  28  30  31 \n 30  29  27  25  25  25  29  35  51  43  33  43  49  47  41  37 \n 37  33  30  30  33  33  33  35  35  35  34  33  33  34  33  32 \n 32  32  32  32  32  33  34  33  34  22  21  30  27  22  29  40 \n 48  49  46  42  37  34  34  34  34  29  28  27  27  27  28  28 \n 29  29  30  31  29  29  30  30  29  29  30  29  29  29  30  28 \n 28  28  27  25  25  25  25  25  24  28  27  26  27  25  28  30 \n 34  32  42  47  30  29  29  29  29  29  29  29  26  25  29  27 \n 28  27  29  28  30  30  30  28  28  28  28  27  28  28  30  29 \n 25  25  28  29  37  29  23  26  29  29  29  33  38  42  41  41 \n 40  36  37  37  37  39  41  39  39  38  39  39  37  34  32  32 \n 31  30  31  30  29  30  32  32  32  34  37  37  39  36  36  36 \n 32  32  35  37  41  45  56  71  93 117 174 193 187 181 108  53 \n 39  35  33  33  34  31  32  33  34  35  35  36  36  37  37  37 \n 37  37  36  36  37  36  37  38  38  36  26  27  29  33  45  36 \n 35  42  43  41  30  19  14  21  38  56  68  79  92  93  94  98 \n112  20  24  32  32  31  43  53  57  57  63  62  61  61  62  61 \n 62  59  57  56  54  53  52  52  48  44  37  37  37  35  36  33 \n 33  32  33  33  33  33  33  35  36  33  32  33  34  39  59 106 \n160 218 141 176 232 247 247 246 247 246 246 246 246 246 246 245 \n244 241  78  28  28  34  46  56  55  31  22  31  33  31  38  50 \n 66  73  71  68  65  60  53  50  47  43  44  43  44  44  38  38 \n 37  37  35  35  35  36  35  34  35  35  36  37  38  38  40  39 \n 38  36  37  37  36  34  35  35  38  64  85  62  58  55  52  52 \n 52  52  51  40  16  19  24  25  35  42  49  53  52  50  47  45 \n 44  34  19  30  36  25  26  42  68  66  62  57  51  46  39  38 \n 37  38  39  39  40  39  38  37  38  38  40  39  37  35  37  38 \n 42  35  31  31  33  35  38  34  32  32  30  30  30  34  32  31 \n 29  28  29  33  38  64  54  36  33  32  36  25  17  21  18  19 \n 31  46  54  54  49  45  39  34  34  34  33  31  31  32  32  32 \n 32  34  17  22  31  23  22  32  47  44  50  51  45  41  35  33 \n 34  34  33  31  32  34  32  32  30  31  32  31  31  30  30  28 \n 30  30  30  30  28  28  29  29  28  29  31  30  29  28  29  31 \n 30  29  28  27  25  25  28  31  44  56  31  42  48  46  40  38 \n 34  33  32  32  34  33  35  36  35  37  35  33  33  34  35  35 \n 35  35  34  34  32  34  33  34  36  21  22  29  24  21  27  39 \n 51  51  46  40  33  32  34  33  33  29  28  27  28  27  29  30 \n 30  30  29  31  31  31  30  31  29  28  28  28  27  27  28  27 \n 29  28  26  26  26  27  27  26  28  29  26  24  25  26  26  27 \n 31  32  34  46  33  28  28  29  28  28  27  28  27  26  27  27 \n 28  28  28  27  30  31  29  28  29  28  26  26  28  27  29  31 \n 27  25  27  32  29  20  23  27  27  28  30  32  38  42  46  45 \n 40  38  35  32  32  31  31  29  30  32  30  31  34  33  29  27 \n 28  26  27  27  27  27  27  29  28  28  29  31  33  30  28  29 \n 30  31  32  31  31  32  33  34  37  37  32  32  38  59 125 111 \n 42  35  33  33  32  32  33  34  35  35  36  36  35  37  37  36 \n 36  37  34  36  36  37  38  40  39  36  26  24  29  29  46  39 \n 35  41  41  39  31  20  18  36  91 127 137 138 138 137 136 131 \n121  29  26  34  36  35  42  55  60  58  62  67  63  64  64  63 \n 64  63  58  58  57  56  54  53  49  46  43  42  38  37  35  34 \n 32  33  33  33  34  33  34  35  38  35  32  32  35  35  46  90 \n149 221 155 168 219 245 245 246 247 245 245 246 246 247 247 247 \n245 244  93  26  28  34  47  57  59  34  22  31  34  32  37  47 \n 64  71  70  68  65  64  56  54  52  49  48  47  42  40  37  37 \n 37  37  36  37  37  36  35  34  34  33  35  37  38  40  40  39 \n 40  38  37  36  35  35  35  35  37  46  96  71  59  56  55  53 \n 53  53  51  39  14  17  23  24  34  43  52  52  51  50  47  45 \n 44  33  19  28  37  27  26  40  67  68  63  58  52  47  40  38 \n 38  39  39  38  40  38  35  36  37  40  43  39  37  35  37  36 \n 38  34  30  31  34  37  38  34  32  32  32  30  31  35  32  30 \n 30  29  30  32  36  47  71  41  34  35  36  24  17  22  18  20 \n 34  48  53  52  48  43  37  34  35  35  34  31  31  33  31  32 \n 32  31  17  21  31  23  22  32  51  49  50  49  45  41  36  34 \n 34  34  33  31  32  33  31  33  32  31  32  33  33  30  29  29 \n 30  30  28  29  29  29  29  29  29  30  32  31  30  30  30  31 \n 30  28  27  27  26  25  25  29  41  64  35  42  47  45  41  38 \n 36  35  33  32  35  35  35  36  36  38  37  35  35  35  35  36 \n 37  35  34  35  34  34  36  35  35  22  21  28  24  21  26  38 \n 50  49  45  40  34  32  32  32  33  30  28  28  29  29  30  29 \n 28  29  29  30  29  30  31  29  28  29  29  30  30  29  30  30 \n 28  27  26  25  26  27  27  26  27  28  26  26  25  24  27  27 \n 28  30  32  46  40  28  28  28  30  29  29  28  27  27  27  29 \n 28  28  28  26  29  31  30  29  29  28  27  27  28  29  29  32 \n 29  27  26  31  25  19  26  26  25  29  32  33  36  42  47  46 \n 41  39  33  30  28  28  28  28  27  29  29  28  30  31  30  29 \n 28  27  28  28  28  29  29  30  29  28  28  29  30  28  26  27 \n 27  28  29  28  27  30  29  31  34  37  38  37  33  29  37  81 \n 69  35  34  31  33  35  33  34  35  35  36  35  36  36  37  36 \n 34  34  35  36  37  38  39  40  40  36  27  22  29  29  45  40 \n 35  41  41  38  30  21  27  60  79  63  50  45  45  42  40  40 \n144  87  78  81  80  71  75  79  80  81  77  80  77  74  72  72 \n 69  67  65  61  58  57  54  53  54  53  48  47  45  41  38  36 \n 34  32  32  34  34  33  34  35  37  35  32  33  33  34  39  66 \n128 201 185 158 207 242 246 246 246 245 245 245 244 244 247 246 \n245 246 109  24  28  32  47  60  59  39  21  30  36  34  36  46 \n 62  70  68  65  64  63  58  56  53  52  49  48  42  48  48  39 \n 37  37  38  37  39  37  36  35  36  35  35  35  38  41  37  38 \n 39  38  36  37  36  37  35  35  36  37  87  82  62  58  56  55 \n 54  51  49  39  15  18  24  24  35  45  53  53  50  51  47  45 \n 44  33  18  27  38  27  27  39  66  68  63  58  52  48  41  38 \n 38  36  39  41  46  44  39  40  45  45  47  41  38  37  38  38 \n 36  34  29  29  32  37  37  34  31  30  32  32  33  36  35  32 \n 31  31  30  33  35  38  74  52  40  39  39  25  17  22  19  22 \n 34  47  55  52  48  44  37  35  36  36  34  34  33  31  32  32 \n 33  31  16  20  31  23  22  29  52  53  50  52  45  40  36  34 \n 34  34  34  32  34  33  31  33  32  31  32  32  32  31  30  29 \n 30  29  29  28  29  30  29  28  29  29  30  30  31  31  32  32 \n 31  29  27  27  26  25  25  26  34  58  45  40  45  43  39  36 \n 36  36  34  33  35  35  35  35  36  36  35  36  36  35  36  36 \n 36  35  33  35  34  34  35  36  33  20  22  29  22  20  27  37 \n 45  47  42  37  32  28  31  30  30  30  29  30  28  27  28  27 \n 28  28  30  30  28  29  30  30  28  29  29  30  30  30  29  29 \n 27  27  27  26  25  27  26  26  25  28  25  25  24  24  27  27 \n 27  28  29  38  50  31  28  27  29  28  29  29  29  28  26  28 \n 28  26  26  26  29  31  31  30  29  28  27  28  29  30  32  32 \n 29  27  28  34  23  20  27  26  25  30  38  36  37  44  47  45 \n 39  38  35  31  30  27  29  27  28  28  28  27  28  30  29  30 \n 29  28  27  29  29  29  28  29  30  30  29  29  30  29  29  28 \n 29  28  27  28  27  28  28  28  31  30  31  31  31  31  29  30 \n 53  41  35  34  30  31  32  33  35  35  35  35  37  37  36  36 \n 35  36  36  36  37  37  39  42  42  39  30  22  28  29  42  42 \n 36  41  40  36  31  26  32  29  20  25  27  28  29  31  34  34 \n 95  93  96  98  97  98 107 115 120 126 131 132 135 137 136 140 \n138 138 132 127 122 117 106  95  85  73  61  59  54  48  43  36 \n 35  33  32  32  33  35  36  35  36  35  33  34  32  35  37  47 \n111 171 185 143 201 217 215 217 218 220 221 221 220 222 225 227 \n227 230 110  24  28  32  48  61  61  43  23  28  36  35  38  47 \n 59  68  66  64  63  63  57  55  54  52  49  47  40  49  47  39 \n 40  42  45  41  39  37  36  36  36  36  37  37  38  40  40  40 \n 40  40  38  40  39  38  36  35  35  37  67  92  68  61  59  59 \n 54  52  46  39  16  18  23  26  37  45  51  54  50  50  47  46 \n 44  36  19  26  35  25  26  38  66  69  64  59  53  49  41  39 \n 37  38  41  53  58  50  39  46  54  51  55  41  39  38  38  37 \n 36  34  31  31  33  36  35  34  32  33  34  33  34  37  37  34 \n 32  33  31  31  34  36  64  64  40  39  40  24  17  23  21  25 \n 38  50  56  53  48  44  38  36  38  37  35  34  32  32  32  32 \n 34  31  16  21  31  23  23  29  49  54  52  49  44  40  37  37 \n 34  34  32  33  32  33  31  33  33  32  31  30  31  31  29  31 \n 30  30  29  27  28  28  28  28  30  30  29  30  30  30  31  30 \n 30  30  28  28  27  26  23  25  31  47  61  42  47  44  39  37 \n 37  35  34  34  37  35  36  37  35  34  34  36  36  35  35  36 \n 36  35  35  35  34  35  38  37  32  20  23  30  23  22  28  38 \n 44  48  44  39  33  30  29  30  32  31  29  29  26  27  28  28 \n 29  28  29  29  28  29  29  30  29  29  29  30  30  29  29  29 \n 29  29  28  26  26  26  25  26  26  28  26  24  24  26  25  27 \n 26  26  31  34  49  32  28  27  30  30  29  26  27  28  26  28 \n 26  25  26  28  30  31  31  29  29  27  27  27  28  28  32  32 \n 29  27  26  32  23  21  27  27  24  28  40  39  38  44  47  44 \n 36  34  37  33  29  27  25  26  29  28  29  28  29  29  29  31 \n 28  28  27  27  29  27  28  31  29  30  31  30  30  31  30  29 \n 28  29  27  27  28  27  28  27  29  31  28  28  29  29  30  29 \n 35  43  35  32  31  31  33  34  37  37  36  35  39  38  37  37 \n 35  39  36  37  38  37  40  42  42  39  31  26  26  28  37  43 \n 37  40  39  35  32  32  27  21  21  24  23  24  25  29  33  37 \n 44  45  44  42  45  44  43  43  41  38  36  37  39  41  50  54 \n 63  71  87 100 112 122 136 148 162 176 185 196 170 108  52  39 \n 38  35  34  33  33  34  33  33  35  35  34  34  33  32  36  37 \n 84 128 175 132 199 192 159 159 160 160 161 161 160 161 167 182 \n201 219 124  23  28  33  49  61  64  46  25  30  37  36  41  50 \n 59  63  67  64  60  61  57  56  55  53  51  47  46  42  39  43 \n 42  43  43  40  38  38  38  38  39  37  39  41  42  44  42  43 \n 44  43  42  43  41  38  36  34  34  35  48  93  77  70  64  56 \n130  87  43  37  15  18  23  28  39  47  51  53  52  50  48  47 \n 44  37  17  23  36  26  25  36  66  70  65  60  51  49  43  38 \n 38  36  39  42  42  39  41  42  42  40  38  36  38  38  37  37 \n 37  36  33  34  34  36  37  36  35  36  37  37  37  39  39  36 \n 35  33  32  31  33  36  52  77  36  35  35  24  20  26  21  32 \n 43  52  58  55  48  44  41  39  38  37  36  35  33  33  32  32 \n 35  32  15  21  28  24  21  27  47  56  52  48  43  40  37  34 \n 34  35  31  31  32  34  32  33  34  32  30  30  30  31  30  30 \n 31  32  29  27  30  29  28  28  29  28  29  31  31  31  31  32 \n 31  29  28  27  27  26  25  24  29  37  67  47  47  44  39  37 \n 36  36  35  35  36  34  36  37  35  36  35  35  36  34  34  35 \n 34  34  34  33  33  35  36  38  30  18  24  32  23  22  29  38 \n 44  46  41  37  33  30  29  30  31  30  29  28  26  27  27  29 \n 29  30  30  30  28  29  30  32  31  30  30  30  30  29  28  28 \n 30  29  27  27  27  27  27  26  28  27  26  23  24  24  27  27 \n 27  26  29  32  49  38  30  30  31  31  29  28  28  28  26  26 \n 25  25  26  28  27  32  31  29  29  29  27  28  29  29  33  33 \n 28  27  25  30  23  20  29  27  23  28  38  43  42  43  46  44 \n 35  33  34  34  29  27  27  28  26  27  27  27  29  28  29  30 \n 29  28  27  27  28  26  28  29  26  26  29  28  29  29  30  31 \n 28  26  28  28  27  28  29  28  29  28  26  26  26  27  30  31 \n 30  50  38  33  33  34  34  35  37  35  36  35  38  38  38  36 \n 34  37  38  37  37  38  39  41  41  39  33  25  24  27  35  51 \n 36  41  41  36  32  33  22  20  25  24  21  23  25  26  29  36 \n 44  43  44  42  41  40  38  39  40  39  36  33  33  34  34  34 \n 35  36  35  36  40  44  51  53  63  73 119 210 250 223 137  62 \n 36  35  33  33  34  34  34  34  36  35  34  32  32  33  34  35 \n 59 103 164 137 183 205 159 159 159 158 159 160 170 182 201 220 \n227 229 125  26  31  36  49  65  66  51  28  30  39  37  40  48 \n 58  61  67  68  64  62  60  58  56  56  53  51  50  47  45  46 \n 45  45  44  41  42  42  43  44  44  42  39  43  46  46  47  47 \n 46  47  45  45  41  41  38  34  36  35  41  77  96  75  69  60 \n167 119  33  37  16  18  25  27  39  47  55  54  53  51  50  47 \n 44  40  16  19  35  27  24  34  65  70  66  60  52  48  43  40 \n 37  37  39  39  40  40  42  40  41  38  38  38  39  38  37  35 \n 34  33  33  34  35  38  38  37  38  39  40  38  40  42  40  39 \n 38  36  37  36  33  36  46  78  43  33  36  25  21  26  24  34 \n 46  55  61  55  50  46  43  41  41  39  37  36  33  33  34  34 \n 34  34  17  21  29  22  22  28  48  56  53  47  42  39  38  36 \n 34  36  32  30  33  34  31  32  34  33  31  30  30  31  31  31 \n 31  31  31  29  31  29  28  29  29  29  29  31  31  32  34  33 \n 32  31  30  28  26  25  24  22  29  35  63  53  48  45  39  38 \n 37  38  35  35  37  36  37  37  34  35  35  35  35  34  35  35 \n 34  33  32  33  32  32  35  37  30  19  24  33  24  22  30  39 \n 43  46  43  39  34  31  30  30  30  30  29  28  26  25  29  30 \n 30  29  28  29  29  30  32  32  32  31  31  31  30  29  28  28 \n 29  29  29  29  28  28  27  27  28  26  26  25  24  25  27  28 \n 25  26  28  32  49  42  30  31  32  31  30  28  29  27  26  27 \n 26  26  27  28  28  31  32  30  28  29  27  27  29  31  33  32 \n 29  26  29  31  21  20  31  28  24  27  37  44  45  44  42  41 \n 34  32  32  32  29  29  28  26  27  26  27  28  29  29  30  29 \n 29  28  28  29  28  27  28  28  29  28  28  27  28  29  29  30 \n 29  27  27  28  29  30  30  30  29  27  25  25  27  26  28  30 \n 29  45  44  36  35  35  36  35  36  36  36  36  36  36  37  37 \n 36  38  38  37  37  38  39  41  42  39  35  26  22  24  30  54 \n 38  42  42  38  33  32  19  21  25  25  21  22  25  25  29  33 \n 41  39  38  36  35  32  30  30  31  32  30  27  27  27  28  29 \n 29  28  29  29  31  33  35  36  37  39  36  44  90 119 154 164 \n 79  38  35  34  33  32  35  35  35  35  35  34  34  34  35  36 \n 42  78 137 147 153 208 182 176 183 191 206 219 229 225 219 214 \n199 181 109  62  65  68  83  94  98  95  80  86  93  93  96 101 \n106 110 114 112 112 113 114 110 109 106 104 100  96  92  87  87 \n 83  84  82  78  76  75  70  71  71  70  67  65  63  63  61  60 \n 56  58  55  53  48  41  38  36  34  34  35  56 104  92  78  68 \n128  90  46  42  16  18  22  27  39  46  56  56  54  53  50  48 \n 46  47  18  22  32  27  24  32  62  69  65  59  52  49  44  42 \n 40  40  42  47  61  73  78  80  83  87  91  95 101 105 108 111 \n111 109 107 106 107 108 107 108 104 105 101  99  93  91  93  88 \n 78  70  68  67  61  56  58  77  69  46  41  33  27  31  31  40 \n 48  58  60  58  54  53  47  45  44  43  40  36  34  33  33  34 \n 32  31  19  19  30  22  20  26  47  56  53  47  41  39  37  37 \n 36  34  33  32  31  33  32  31  32  32  32  30  30  31  31  31 \n 29  30  31  28  31  29  28  28  28  29  29  31  32  33  33  33 \n 32  32  30  28  27  28  25  22  26  33  52  65  49  45  39  39 \n 37  37  35  35  37  37  38  38  35  35  35  35  35  34  34  34 \n 35  33  33  33  33  34  35  38  29  18  24  30  21  21  33  42 \n 46  49  44  39  35  32  31  32  30  30  31  30  27  26  29  29 \n 31  31  30  29  31  30  30  32  32  31  32  30  30  30  29  28 \n 28  27  29  30  28  29  28  28  28  27  27  25  26  27  28  27 \n 24  24  26  31  44  49  31  30  32  28  28  26  26  26  26  27 \n 25  26  27  28  28  30  31  28  27  28  28  28  27  29  31  32 \n 30  29  28  31  19  22  31  26  26  27  35  44  49  47  44  40 \n 33  32  31  32  29  28  28  26  27  28  28  26  28  28  28  28 \n 28  26  28  30  27  26  28  29  29  28  29  29  28  28  28  30 \n 30  26  26  26  27  28  29  30  29  27  25  26  28  26  25  28 \n 26  33  49  37  35  35  35  35  36  35  35  36  36  37  37  37 \n 38  37  35  37  38  38  40  40  42  40  37  26  20  25  29  53 \n 40  40  42  40  37  29  17  20  26  25  21  24  28  28  28  32 \n 40  38  36  34  34  33  31  31  31  30  29  29  28  26  28  27 \n 29  29  29  29  27  29  30  32  33  33  35  37  39  39  53 101 \n140  70  35  34  34  32  35  35  35  35  37  35  34  34  36  37 \n 36  59 115 171 156 196 219 232 235 236 231 221 196 167 153 152 \n147 149 149 141 142 141 132 133 123 114 106 100  96  95  94  89 \n 90  89  87  88  88  85  85  88  93  94  96  94 101 108 115 119 \n124 125 130 136 143 147 149 152 157 164 168 169 170 168 163 159 \n147 141 132  96  52  45  41  41  34  33  35  43  98  89  66  62 \n 69  63  56  43  19  19  25  28  38  46  55  55  54  53  50  47 \n 47  46  19  20  32  29  25  34  60  67  64  59  54  51  45  43 \n 42  43  80 126 145 146 142 138 129 124 122 118 114 108 100 102 \n 94  93  92  93  93  97  96  99  98 102 104  99 100 110 123 125 \n128 132 139 147 152 158 159 156 156 148 145 135 123 117 107 108 \n106 102  93  87  74  65  55  51  47  50  46  40  36  34  34  33 \n 33  30  18  18  29  23  22  29  46  56  54  48  42  40  38  38 \n 36  34  33  31  33  34  32  30  31  31  33  32  32  31  31  32 \n 30  31  31  28  29  29  30  29  30  30  31  31  33  33  34  34 \n 33  32  32  30  30  28  26  24  25  30  48  71  48  45  40  38 \n 37  36  36  37  38  38  36  37  35  34  36  35  35  34  34  33 \n 36  35  35  34  34  36  37  41  31  19  26  30  21  22  33  46 \n 50  50  45  38  33  32  32  31  30  30  30  30  28  28  29  30 \n 33  32  31  32  31  31  31  30  32  30  31  30  30  29  29  29 \n 28  28  29  29  28  30  31  29  29  29  28  27  27  29  29  28 \n 25  25  25  30  38  58  30  30  31  28  30  26  27  27  27  27 \n 25  26  28  29  29  31  33  29  28  29  29  29  28  30  33  33 \n 30  28  28  33  18  23  31  25  26  28  34  43  49  46  44  39 \n 33  32  31  32  31  30  29  27  27  28  27  27  28  27  29  29 \n 29  28  30  30  28  28  29  29  29  28  30  29  26  27  30  31 \n 31  27  26  26  26  28  28  28  28  28  28  27  27  27  26  27 \n 29  30  49  39  36  35  35  36  36  36  36  37  37  36  36  38 \n 39  38  36  36  38  38  39  41  40  41  37  27  22  23  27  49 \n 45  38  42  40  35  28  18  22  27  23  20  28  31  29  28  32 \n 42  39  36  34  31  32  31  29  31  30  30  30  28  28  29  29 \n 29  29  28  27  28  28  31  29  29  28  29  29  29  30  33  35 \n 72 113  50  35  34  34  35  34  34  35  37  37  33  33  35  36 \n 33  39  85 149 165 185 216 205 184 167 162 159 150 152 155 139 \n 95  70  51  46  46  43  39  36  39  40  41  39  40  37  35  37 \n 37  36  37  39  41  44  48  46  44  45  39  36  35  34  33  33 \n 32  32  32  33  34  35  39  44  50  55  60  71  81  94 111 126 \n151 196 253 238 158  88  44  39  36  34  33  37  77 106  75  36 \n 53  70  70  48  19  16  22  28  39  46  56  56  55  53  50  49 \n 48  45  19  17  30  28  24  34  60  70  66  59  56  54  48  44 \n 45  70  90  66  46  41  36  39  43  40  35  33  33  35  35  34 \n 36  37  41  44  53  54  51  51  45  39  37  36  33  31  29  30 \n 31  32  35  36  39  49  55  61  74  82 100 109 125 132 148 162 \n178 184 197 207 211 206 198 189 163 132  82  51  38  37  33  34 \n 34  32  17  19  27  21  21  28  44  52  52  46  41  40  39  38 \n 35  34  34  33  33  34  33  33  31  31  32  30  29  31  32  31 \n 31  31  30  29  31  31  31  33  33  33  32  33  35  36  37  36 \n 33  33  33  32  32  31  28  27  27  28  40  70  55  44  41  40 \n 40  36  37  39  39  38  37  38  37  35  36  36  37  37  37  35 \n 36  35  36  36  35  37  37  42  30  19  26  30  22  24  34  49 \n 52  48  44  37  34  34  33  32  31  31  30  29  28  29  29  30 \n 32  30  29  31  31  31  30  30  31  31  30  29  28  30  30  28 \n 28  30  31  29  30  32  32  29  28  30  28  27  27  29  28  26 \n 25  25  25  28  35  60  34  32  33  29  27  27  29  29  28  29 \n 29  29  30  29  29  30  33  31  30  29  29  28  30  31  34  33 \n 29  27  33  32  17  23  31  25  25  29  34  39  48  46  43  39 \n 33  31  32  32  32  30  29  27  29  28  27  29  29  26  28  29 \n 29  30  32  30  28  28  29  29  28  27  27  26  27  27  28  28 \n 29  26  26  27  27  27  30  29  28  27  27  30  29  29  25  26 \n 29  28  43  39  38  37  36  37  36  36  36  36  37  37  38  39 \n 38  38  38  38  39  40  39  41  40  41  36  29  21  21  27  41 \n 57  39  40  39  36  26  17  24  28  22  19  27  33  30  29  31 \n 42  37  35  34  32  32  33  32  31  28  29  29  29  27  28  28 \n 28  27  27  28  28  27  28  29  32  30  27  28  28  27  29  33 \n 38  76  79  40  37  36  35  33  35  35  36  36  33  33  33  34 \n 33  31  66 107 142 171 212 172 160 163 166 168 171 174 151  72 \n 41  41  40  40  40  42  43  42  44  44  44  43  43  42  39  38 \n 40  38  41  41  40  40  41  42  43  43  40  36  36  37  38  38 \n 36  36  35  38  37  38  38  40  41  43  44  43  40  41  42  42 \n 49  74 146 149 165 182 104  43  36  33  32  34  52 136 188  52 \n 45  84 152 110  12  17  23  27  38  46  56  56  55  54  50  49 \n 47  45  20  19  30  29  26  33  59  71  65  62  59  57  50  45 \n 51  52  30  28  31  28  29  34  38  42  42  40  39  37  38  37 \n 37  40  44  44  46  47  46  46  44  45  40  38  38  38  40  39 \n 39  39  43  45  44  44  45  44  44  43  43  43  46  47  51  52 \n 57  65  75  91 117 138 167 196 224 236 203 148  54  36  34  35 \n 35  33  16  19  28  22  20  28  44  51  50  48  41  39  40  39 \n 37  35  34  31  33  34  33  32  31  30  30  31  30  30  30  30 \n 31  30  31  30  34  34  33  35  36  36  37  36  37  38  42  41 \n 38  38  36  35  36  36  35  33  31  30  37  65  69  47  44  43 \n 41  39  41  43  40  39  39  39  38  38  38  38  37  37  38  38 \n 36  35  37  38  38  39  38  39  29  21  27  32  25  27  34  45 \n 51  46  43  37  37  33  32  32  33  31  29  28  29  30  29  30 \n 32  30  30  31  32  30  29  31  31  30  31  30  30  30  30  29 \n 29  30  31  28  32  34  34  31  31  30  28  29  27  28  29  29 \n 27  23  23  26  32  60  46  33  32  30  30  29  30  30  29  30 \n 29  29  30  30  31  33  36  31  29  28  30  29  30  33  34  33 \n 30  29  33  28  18  24  30  22  22  27  33  38  47  47  42  38 \n 35  31  33  34  31  30  30  29  29  28  26  27  28  27  28  29 \n 29  29  28  27  27  27  29  28  27  26  26  26  26  28  30  30 \n 30  27  26  26  26  26  29  29  27  26  29  30  30  30  27  25 \n 29  28  42  40  37  36  37  38  37  38  36  36  37  38  36  38 \n 37  36  37  37  39  40  40  42  41  42  39  32  21  19  25  34 \n 63  41  43  40  35  24  15  25  27  22  20  26  34  34  33  33 \n 44  38  34  34  34  34  32  31  29  30  30  29  28  28  27  28 \n 27  26  25  25  26  27  27  28  29  30  27  25  26  27  26  27 \n 31  38  80  59  38  37  35  34  34  33  35  36  35  34  32  32 \n 31  28  42  81 118 154 210 200 234 235 237 238 239 242 194  51 \n 31  33  36  37  38  43  48  47  44  45  45  46  49  46  42  41 \n 40  38  38  35  35  37  37  37  34  36  36  35  34  32  31  32 \n 31  30  31  32  31  33  32  34  36  37  38  36  34  35  35  37 \n 38  43  49  41  38  64 140 113  40  35  34  33  40  97 149  70 \n146 181 204 125  12  17  22  27  39  47  56  58  55  55  51  50 \n 48  49  20  17  30  28  27  32  58  70  65  64  59  57  49  46 \n 43  24  21  26  27  24  29  35  37  38  44  45  44  40  38  36 \n 36  38  40  37  37  38  37  38  39  40  36  36  34  33  34  34 \n 33  34  35  35  36  36  36  40  40  41  39  38  38  38  38  40 \n 41  39  40  39  37  35  36  38  53  78 112 150 169  88  32  35 \n 35  34  16  18  28  22  21  27  44  49  49  45  41  39  36  38 \n 37  36  33  34  34  34  33  33  31  29  31  29  29  30  30  30 \n 31  34  37  34  35  44  59  68  71  73  76  77  75  76  78  79 \n 75  75  75  75  74  72  72  68  64  62  65  79  88  65  56  55 \n 53  52  50  46  44  41  40  40  38  38  38  40  41  41  41  40 \n 39  40  42  40  39  40  42  44  30  26  33  36  27  27  37  46 \n 50  49  44  36  35  33  30  29  32  33  29  29  29  26  28  30 \n 30  28  31  32  32  32  29  30  31  29  29  31  29  27  28  31 \n 30  30  29  31  31  34  33  32  31  30  30  28  28  27  28  30 \n 29  25  22  27  32  47  59  35  33  33  30  32  30  30  29  29 \n 29  29  31  32  32  32  36  33  31  32  32  31  32  34  36  35 \n 31  32  32  25  19  26  30  21  22  26  34  37  45  47  42  39 \n 36  34  33  33  33  31  30  31  28  27  26  28  29  29  28  28 \n 28  27  27  28  29  25  27  28  29  29  28  27  29  29  27  28 \n 28  24  27  26  27  26  27  26  27  28  29  29  31  33  29  27 \n 28  29  38  43  36  38  37  38  39  36  37  37  37  37  39  41 \n 38  39  38  38  39  40  41  42  43  43  39  32  22  19  23  28 \n 62  40  43  41  38  22  17  26  25  21  22  26  33  36  34  34 \n 43  40  34  33  33  32  31  32  31  30  30  28  29  28  27  27 \n 28  27  27  28  28  28  28  28  28  29  26  25  26  27  26  26 \n 28  33  56  82  39  35  34  36  34  33  34  35  33  32  30  32 \n 29  27  33  69 105 140 202 223 250 249 248 247 249 249 196  46 \n 31  31  36  35  37  43  51  50  46  46  48  47  48  47  44  40 \n 38  38  36  35  34  35  33  33  33  32  33  34  33  32  29  29 \n 30  28  29  30  30  30  31  32  32  32  33  31  30  30  31  33 \n 34  33  36  38  39  39  56 114  79  37  35  33  35  77 122 111 \n114 120 115  82  16  18  24  29  39  48  57  59  57  57  53  51 \n 48  49  20  16  28  30  26  33  57  68  66  64  60  56  49  48 \n 37  18  23  30  26  23  32  40  39  38  42  43  41  39  37  36 \n 33  34  32  31  32  32  31  32  34  33  32  34  33  33  31  31 \n 30  31  32  32  29  31  32  36  37  36  34  33  33  31  32  33 \n 35  34  34  38  39  41  44  45  40  38  39  46  99 140  53  36 \n 35  32  14  18  27  22  22  27  45  50  48  46  42  40  37  38 \n 38  37  34  34  34  34  33  33  32  30  31  29  30  31  31  31 \n 31  37  38  44 100 135 149 153 156 154 156 153 150 147 144 145 \n141 137 136 138 141 141 143 145 145 140 143 146 152 145 144 150 \n148 146 141 136 128 120 113 102  90  81  71  64  54  47  40  40 \n 41  40  37  39  42  46  48  49  36  32  42  42  35  34  41  48 \n 51  49  41  36  35  33  31  30  32  32  29  28  30  28  28  29 \n 31  31  31  32  32  31  28  29  31  29  30  29  29  28  29  31 \n 30  29  30  30  31  34  31  31  32  30  29  29  29  30  28  30 \n 30  28  25  26  32  42  65  38  36  35  32  33  33  32  31  32 \n 32  33  33  33  34  34  38  37  35  32  32  33  32  36  38  36 \n 32  34  33  27  21  29  30  23  25  30  35  38  46  50  42  38 \n 37  36  35  34  36  34  32  33  29  27  28  28  28  30  30  30 \n 29  29  28  30  28  27  28  27  29  31  30  28  28  28  27  28 \n 29  26  27  26  27  26  27  28  28  28  29  29  31  34  31  26 \n 26  29  34  47  37  38  37  37  38  36  36  37  37  37  39  40 \n 38  39  40  40  41  43  42  43  43  42  39  35  24  19  21  25 \n 62  46  42  41  36  21  18  28  26  21  23  27  33  38  37  33 \n 43  40  35  36  33  34  34  34  31  30  29  28  29  28  26  26 \n 27  26  28  27  28  26  27  28  30  32  28  26  27  26  27  27 \n 28  30  38  76  59  36  35  35  34  34  36  34  32  30  30  30 \n 29  28  27  47  91 118 197 222 216 214 214 213 212 211 170  44 \n 26  29  33  32  34  40  50  53  47  46  47  48  49  47  43  40 \n 39  38  35  35  35  34  32  32  32  32  32  32  30  31  29  28 \n 29  29  30  30  29  30  30  30  30  30  31  31  31  30  29  29 \n 30  30  33  34  35  36  37  49  97  61  35  32  31  48 118 153 \n160 150 141  99  16  20  24  31  39  49  63  62  58  57  52  50 \n 46  46  22  16  27  31  27  33  54  69  67  63  60  58  52  49 \n 34  17  21  30  24  20  31  44  43  39  43  44  39  37  35  35 \n 34  32  31  29  28  29  29  30  30  31  30  31  32  34  31  31 \n 28  28  30  30  29  31  32  34  35  33  30  31  31  29  30  31 \n 30  28  29  32  34  36  39  40  40  39  38  38  36  59 101  48 \n 36  31  14  19  26  21  22  27  45  51  49  46  43  41  38  36 \n 37  37  35  35  34  36  35  33  32  31  30  32  31  30  31  29 \n 30  34  58  98  95  74  58  52  51  46  48  47  42  41  44  42 \n 40  37  36  35  37  38  39  41  41  41  41  42  41  40  39  39 \n 50  60  68  73  82  93 107 117 129 140 148 153 162 167 166 165 \n160 157 148 137 126 118 105  98  87  71  69  68  59  51  47  52 \n 53  49  42  35  36  33  33  31  32  31  30  31  29  28  29  30 \n 30  31  29  29  29  30  27  27  29  28  28  29  29  27  29  30 \n 31  28  28  29  32  35  32  32  31  29  30  28  30  31  31  32 \n 32  34  34  36  41  48  75  54  45  45  46  44  46  43  42  43 \n 41  42  43  43  43  45  48  45  39  36  36  35  35  38  39  40 \n 34  34  35  28  24  34  32  27  28  37  43  43  48  49  43  39 \n 39  38  37  37  37  36  36  36  35  33  33  31  32  31  31  32 \n 32  29  29  30  28  28  29  29  30  31  29  29  27  28  28  29 \n 31  28  28  28  28  28  29  31  29  27  29  31  31  33  32  28 \n 25  28  31  53  38  38  37  36  38  36  36  37  38  38  38  39 \n 37  38  40  39  41  42  43  42  43  43  42  37  24  19  21  25 \n 52  54  40  38  31  20  21  31  25  20  22  27  30  37  40  34 \n 42  39  36  35  33  34  34  33  31  31  29  29  29  27  26  26 \n 27  27  27  27  26  27  28  27  30  31  28  27  27  28  28  28 \n 28  28  32  56  83  41  35  33  35  33  37  34  33  31  31  30 \n 31  30  27  33  81 105 180 188 149 147 149 151 148 147 130  50 \n 26  27  34  32  31  37  50  55  51  48  48  48  46  44  41  39 \n 39  38  35  34  33  33  30  31  31  31  31  32  32  33  31  29 \n 29  29  29  29  29  28  29  31  31  31  31  32  31  29  28  27 \n 28  28  29  31  32  35  35  38  69  90  35  34  31  40  93 183 \n234 229 224 164  13  21  26  32  39  51  65  64  60  57  54  51 \n 48  46  23  16  26  30  28  33  50  66  66  62  59  58  52  47 \n 37  16  22  33  26  21  28  40  44  41  44  42  38  38  35  34 \n 32  32  31  30  28  30  29  31  30  29  30  32  32  34  33  33 \n 32  31  30  30  30  29  32  34  35  33  29  29  30  29  28  28 \n 29  28  29  29  31  34  35  35  37  34  36  37  38  34  79  73 \n 34  33  16  19  26  20  22  28  42  50  49  46  42  41  38  37 \n 37  36  36  36  35  36  34  34  33  32  32  32  31  31  31  31 \n 30  38  58  46  32  33  32  33  32  35  39  42  41  39  38  38 \n 40  39  40  39  40  40  40  42  43  42  42  43  41  38  39  39 \n 38  37  36  34  35  37  37  36  38  40  49  53  59  66  76  85 \n104 118 137 152 178 187 204 216 219 208 198 191 171 125  65  51 \n 55  53  40  38  36  33  34  31  32  33  30  30  31  29  29  31 \n 31  31  29  28  28  29  26  27  29  29  29  29  31  30  30  30 \n 31  28  29  29  32  33  33  33  32  31  32  31  32  30  35  58 \n 97 116 128 131 136 137 147 143 139 138 141 139 138 137 138 134 \n133 132 133 132 131 133 136 132 129 126 115 111 107 102  95  88 \n 75  69  63  50  37  39  35  30  29  36  42  40  48  54  48  44 \n 43  43  42  41  42  41  42  41  40  39  37  36  36  34  32  33 \n 33  30  29  29  28  28  28  28  30  30  27  27  29  29  30  32 \n 32  28  29  27  29  31  30  30  30  25  28  30  29  33  33  27 \n 25  29  31  50  40  41  38  37  39  38  36  37  39  38  38  40 \n 38  37  40  41  42  43  43  42  43  43  42  38  26  20  21  25 \n 47  55  34  32  29  18  22  31  23  19  23  28  31  38  42  39 \n 44  40  36  34  33  34  34  33  32  32  31  30  29  27  26  26 \n 27  28  27  28  26  27  26  26  28  29  27  27  27  28  29  31 \n 31  30  30  35  87  60  34  34  35  34  35  35  34  31  32  29 \n 30  31  27  28  56 102 137 194 141 138 139 142 144 141 139  69 \n 25  26  31  32  30  35  50  57  55  50  50  50  46  42  37  36 \n 38  38  35  34  32  31  31  31  32  33  31  31  31  31  30  30 \n 31  30  29  28  28  29  31  31  31  31  31  31  29  29  29  29 \n 28  28  32  33  30  32  33  34  42  88  56  32  29  32  66 136 \n221 224 224 159  15  22  28  34  38  52  69  67  62  58  57  53 \n 47  46  25  18  23  29  25  32  48  65  66  61  60  58  53  49 \n 39  18  19  31  26  21  25  35  47  45  44  41  37  34  33  33 \n 32  33  32  30  28  30  30  30  29  29  30  31  32  33  30  29 \n 30  31  29  28  28  29  31  33  34  32  30  29  29  29  27  27 \n 28  28  29  31  32  34  33  33  32  34  35  35  38  34  42  79 \n 45  35  14  18  25  21  21  28  43  51  47  43  44  41  39  38 \n 37  37  34  34  35  37  35  35  32  31  33  32  31  31  31  31 \n 32  39  33  23  27  29  28  29  33  33  34  38  39  40  38  38 \n 38  37  36  37  38  40  41  41  41  43  43  43  39  39  38  37 \n 39  39  39  37  37  37  39  38  40  39  39  40  39  41  39  41 \n 39  36  32  34  42  47  63  83 115 134 181 226 244 238 197 140 \n 67  51  41  37  35  34  32  31  31  35  31  30  31  30  30  30 \n 31  31  31  31  28  28  29  28  28  29  29  28  30  29  27  28 \n 28  28  30  30  30  33  34  33  33  32  31  32  35  65 124 135 \n124 114 106  99  94  89  88  85  84  82  79  77  77  75  70  70 \n 70  70  63  58  58  59  64  68  72  82  91  97  99 106 118 127 \n133 135 141 146 152 155 154 150 147 143 141 136 130 121 111 101 \n 92  89  86  78  70  67  65  62  58  54  49  46  40  36  34  32 \n 32  32  28  28  29  29  29  28  30  29  28  27  30  29  28  29 \n 30  29  28  28  30  31  30  30  30  27  28  29  31  35  34  28 \n 25  27  29  45  50  40  40  39  40  39  35  36  38  39  40  40 \n 40  39  40  39  41  42  43  45  45  45  44  40  31  24  20  26 \n 43  70  32  33  25  18  26  32  22  21  25  30  34  39  47  42 \n 45  41  38  35  35  34  34  32  30  31  29  29  28  28  27  27 \n 27  27  28  27  26  25  26  26  27  31  29  27  27  29  28  30 \n 30  29  29  32  65  83  37  36  34  34  35  35  35  34  31  29 \n 28  29  28  24  40  93 110 186 151 138 139 142 149 156 176 114 \n 20  26  31  32  29  31  46  59  56  54  52  52  46  42  37  35 \n 38  38  36  36  32  31  31  31  32  33  32  31  30  31  30  31 \n 30  29  28  29  30  30  30  30  30  30  31  31  29  29  31  29 \n 28  30  33  32  30  31  30  32  37  57  87  39  29  31  50 101 \n143 148 151 112  22  28  30  36  36  48  70  71  64  60  56  53 \n 49  48  25  17  22  28  24  31  47  65  66  62  58  56  53  47 \n 39  19  19  29  25  20  23  33  48  47  43  40  38  36  34  35 \n 32  31  31  31  29  31  31  31  30  30  30  30  32  33  32  31 \n 32  31  27  26  29  31  30  32  34  33  32  30  28  28  29  29 \n 29  29  29  31  33  33  30  29  32  32  32  34  33  36  33  57 \n 64  35  14  18  24  21  22  29  43  51  48  47  43  41  39  37 \n 37  37  34  33  36  35  35  35  33  32  34  34  33  32  32  30 \n 32  37  25  23  29  30  31  32  31  32  33  36  38  39  40  39 \n 39  37  39  39  39  41  39  39  40  42  42  41  38  36  35  35 \n 36  37  35  36  37  36  37  35  36  36  37  36  35  36  36  37 \n 37  37  37  37  38  37  39  37  42  45  57  84 106 107 129 172 \n155  70  38  37  33  34  33  32  33  35  32  31  31  30  29  30 \n 30  30  30  31  30  29  28  27  28  30  29  30  31  30  29  29 \n 29  29  32  31  30  35  35  33  34  33  29  32  49  73  61  45 \n 40  39  37  36  37  36  36  36  34  33  35  37  42  44  45  49 \n 47  43  38  39  39  38  35  35  32  33  31  33  33  33  36  38 \n 39  41  45  49  54  62  70  76  84  91 104 117 137 152 167 175 \n185 194 201 200 196 194 184 177 161 144 118  87  53  42  38  33 \n 32  32  29  28  28  29  27  28  29  28  27  27  28  30  31  29 \n 28  28  28  29  30  30  29  29  30  29  29  29  31  34  33  29 \n 24  25  27  39  56  39  40  37  38  39  37  37  38  38  40  40 \n 42  42  43  43  44  46  45  46  46  47  46  43  33  27  22  28 \n 39  81  35  38  28  22  31  36  25  24  29  34  38  42  48  47 \n 44  41  39  38  36  34  33  31  30  29  28  29  29  28  29  28 \n 27  27  29  26  27  28  27  26  27  30  29  28  29  28  28  28 \n 27  28  29  29  43  89  55  36  35  34  35  35  35  36  31  31 \n 30  31  30  26  28  54  96 141 169 157 180 206 221 232 241 155 \n 19  26  32  35  27  29  43  59  61  59  54  52  47  43  37  36 \n 39  40  38  37  34  32  29  31  31  30  30  30  29  30  31  30 \n 28  29  30  30  29  27  29  29  29  31  31  30  30  30  30  30 \n 30  31  32  32  28  29  28  27  33  35  93  57  33  30  36  81 \n107 117 123 102  33  33  34  37  41  52  72  74  66  62  54  52 \n 47  48  28  16  21  27  26  31  45  62  63  60  58  56  53  48 \n 39  17  20  29  25  19  21  30  45  49  44  40  37  36  36  36 \n 35  31  30  31  31  34  32  31  29  30  30  33  34  32  31  31 \n 30  29  28  29  29  30  31  32  33  33  32  30  30  30  31  30 \n 29  28  29  29  32  32  29  28  32  31  31  30  31  34  31  39 \n 76  40  16  17  24  20  21  30  42  48  49  47  41  39  38  37 \n 36  36  35  34  35  34  34  33  33  32  32  34  33  33  32  32 \n 32  35  20  24  32  30  29  30  32  36  36  36  39  40  39  39 \n 39  38  38  39  39  39  39  38  41  39  38  37  36  34  33  35 \n 35  34  34  35  33  34  34  34  35  34  36  35  34  36  34  34 \n 36  35  35  33  35  36  36  38  39  38  40  42  45  42  38  43 \n107 136  51  36  34  33  32  31  33  35  33  30  31  30  30  31 \n 30  30  30  30  30  30  29  28  28  30  28  28  29  30  30  30 \n 30  28  30  30  31  34  36  35  34  35  32  36  43  29  22  27 \n 32  34  36  37  39  38  36  38  38  38  39  40  42  44  46  48 \n 47  46  46  48  48  46  38  34  39  39  37  38  38  37  40  40 \n 41  38  36  37  39  44  45  45  44  43  44  42  34  35  38  38 \n 46  59  79  99 123 143 177 208 227 242 251 235 185 123  57  39 \n 36  30  29  27  28  27  28  30  28  27  28  29  30  30  31  30 \n 30  30  31  31  32  31  30  30  29  28  30  30  30  33  35  33 \n 24  24  27  28  62  40  37  36  37  38  37  39  39  41  42  43 \n 44  47  53  51  53  56  60  62  62  65  65  65  62  57  57  62 \n 69  93  76  69  63  62  66  65  64  64  65  66  64  66  73  70 \n 49  44  41  40  33  33  31  30  30  28  28  28  30  29  28  28 \n 27  28  29  29  27  26  28  27  27  30  30  28  28  28  29  29 \n 29  27  28  29  35  72  80  38  35  35  35  36  35  36  32  32 \n 30  31  31  25  24  34  87 108 183 219 228 231 225 213 193 126 \n 20  24  30  34  28  28  39  54  60  60  56  54  48  41  38  36 \n 39  40  38  38  35  32  30  30  30  31  31  29  29  31  31  28 \n 28  29  30  30  30  28  29  30  29  31  31  30  30  28  27  27 \n 31  32  31  30  30  30  28  28  30  33  72  86  29  29  32  63 \n103 118 129 118  43  42  39  40  43  66  84  78  68  61  52  49 \n 47  48  29  16  21  27  25  30  44  63  64  60  60  57  53  49 \n 40  17  20  30  26  21  23  30  44  49  46  42  38  37  36  35 \n 33  31  32  31  32  32  34  33  31  30  29  33  34  33  31  31 \n 30  30  29  29  31  31  32  33  34  34  32  30  29  30  30  30 \n 30  29  30  30  33  33  29  27  31  31  31  32  33  34  33  33 \n 70  47  15  18  25  21  24  31  42  49  48  48  43  40  38  36 \n 37  38  34  33  35  36  36  34  32  32  32  33  33  34  33  31 \n 34  36  19  25  32  30  28  29  33  36  36  37  38  39  39  39 \n 39  39  40  39  40  40  38  38  39  38  36  34  35  34  33  34 \n 34  33  33  34  34  33  34  35  35  35  36  35  33  34  33  33 \n 34  35  34  33  35  34  35  37  38  37  37  36  37  36  37  38 \n 42  85  91  41  36  34  32  33  33  34  32  31  30  30  31  30 \n 30  30  30  30  31  30  29  29  29  29  27  29  31  30  29  30 \n 29  29  31  31  30  34  39  37  34  35  34  34  25  21  25  30 \n 30  30  30  33  40  42  42  42  39  39  41  41  40  40  41  44 \n 44  44  44  45  46  44  38  34  34  36  36  36  33  34  37  37 \n 38  36  34  33  36  41  43  42  39  38  39  38  40  41  39  38 \n 38  35  35  35  37  42  52  66  84 108 139 144 154 176 160  82 \n 35  32  29  29  28  30  28  29  28  28  26  29  31  31  30  30 \n 31  31  32  34  35  33  32  32  30  29  30  31  31  34  36  35 \n 25  24  28  25  59  42  39  37  39  40  39  38  41  43  50  69 \n100 120 141 139 139 141 143 146 148 149 151 152 152 151 149 146 \n142 148 145 139 133 130 134 142 141 140 139 141 137 133 134 137 \n 47  45  42  39  37  34  33  32  31  30  30  29  30  28  28  26 \n 27  27  28  29  27  27  28  27  27  30  32  29  28  30  31  31 \n 30  27  26  27  29  45  95  51  35  35  34  36  36  36  34  33 \n 32  31  30  29  24  25  64  95 140 201 183 169 154 148 147 132 \n 27  24  30  35  31  29  36  49  61  62  57  54  49  43  39  37 \n 37  36  37  37  34  31  32  31  30  33  33  31  31  33  31  29 \n 29  29  30  31  31  31  30  31  31  31  32  31  30  29  28  28 \n 30  31  30  28  27  28  28  29  31  33  45 104  41  28  29  42 \n 94 109 143 141  76  50  50  47  50  82 106  85  63  55  47  45 \n 43  46  33  18  22  26  26  30  45  64  64  62  59  56  51  46 \n 38  19  21  33  27  21  24  31  42  48  47  44  39  36  37  34 \n 35  33  33  31  31  32  35  32  31  32  32  33  32  32  30  31 \n 30  30  33  32  32  30  30  31  34  34  32  32  29  28  30  30 \n 29  30  31  32  34  35  31  28  31  30  32  32  30  32  34  34 \n 58  58  14  18  25  22  22  31  43  49  49  47  42  40  36  35 \n 40  38  35  33  37  37  36  33  33  32  33  32  33  34  32  31 \n 34  39  20  24  30  31  28  28  35  38  38  36  37  37  39  39 \n 39  38  39  38  38  38  37  35  36  34  35  33  34  34  33  34 \n 33  34  34  32  32  32  33  33  34  34  35  36  35  33  32  32 \n 33  34  34  33  34  33  34  33  35  35  36  36  36  35  33  34 \n 35  37  79  61  36  35  31  34  34  34  33  32  31  31  31  30 \n 30  30  30  31  31  30  28  28  29  30  29  30  29  29  31  32 \n 29  30  32  32  31  35  37  36  34  34  33  31  17  23  29  30 \n 25  27  30  31  39  43  43  43  40  39  38  37  34  33  32  34 \n 36  35  37  38  41  39  36  33  32  32  31  31  31  31  32  34 \n 33  31  31  30  33  34  36  33  33  30  32  33  35  36  36  38 \n 38  38  39  39  43  42  43  44  47  47  45  37  32  41  89 136 \n 67  31  30  29  31  30  28  29  28  28  28  30  30  29  29  30 \n 31  31  32  33  34  32  31  31  31  30  28  29  31  34  37  36 \n 27  23  28  28  53  48  40  36  37  38  40  42  58 100 140 144 \n132 123 117 114 106  96  86  87  80  76  70  63  56  50  42  40 \n 36  37  38  35  33  36  38  34  34  33  34  33  33  31  37  38 \n 52  45  42  41  36  34  34  33  30  29  30  30  29  28  28  28 \n 29  28  28  28  29  27  28  28  29  29  31  30  28  29  30  30 \n 30  28  27  28  27  35  80  78  37  35  36  36  37  36  36  34 \n 31  32  32  32  26  23  43  86 114 150 160 155 150 157 160 148 \n 36  24  29  36  30  28  35  46  63  63  59  53  50  45  37  37 \n 36  36  36  35  34  33  34  33  32  34  35  35  33  34  33  32 \n 30  30  30  30  30  31  30  30  30  31  33  32  31  30  31  31 \n 30  30  33  32  30  29  28  28  28  30  34  84  74  32  29  37 \n 81 109 222 236 168  67  62  61  59  83 120  91  59  50  46  43 \n 44  47  33  17  21  27  27  30  45  65  67  62  58  56  52  49 \n 37  19  22  34  29  21  23  30  40  46  49  44  40  38  36  36 \n 36  33  32  30  29  31  33  31  31  30  31  32  32  32  31  32 \n 32  30  32  34  33  30  29  30  33  33  32  33  30  28  31  32 \n 32  31  31  31  34  35  32  29  30  30  31  30  30  29  31  32 \n 46  78  12  18  24  21  25  31  43  49  48  48  42  39  40  39 \n 39  38  34  32  35  36  35  33  33  32  33  32  34  32  32  32 \n 35  41  21  23  29  29  28  28  35  37  38  37  37  39  41  40 \n 40  40  37  37  37  38  38  37  35  34  35  35  35  36  33  32 \n 34  36  36  34  33  32  32  33  33  34  35  35  35  34  32  31 \n 33  34  33  34  33  33  32  33  33  33  36  35  34  35  33  34 \n 34  35  50  70  36  34  31  33  34  35  33  32  31  31  32  32 \n 31  31  30  31  30  30  28  29  29  29  29  30  29  29  30  33 \n 30  30  31  31  30  36  39  37  34  34  35  29  18  22  29  27 \n 23  25  29  31  38  42  45  47  41  37  35  33  30  30  30  32 \n 33  32  33  33  35  35  34  32  30  31  30  29  29  30  31  30 \n 31  29  30  31  33  33  36  33  31  29  29  28  30  31  31  32 \n 34  33  32  34  37  39  44  43  42  42  41  40  35  34  34  60 \n100  41  31  29  28  30  28  27  28  28  29  30  31  30  31  32 \n 31  32  33  34  34  32  32  31  30  29  29  28  30  34  38  39 \n 27  20  25  28  50  56  39  38  38  40  39  53  97 100  72  57 \n 45  39  33  33  34  33  30  33  38  43  43  44  41  39  39  39 \n 37  35  34  34  35  35  35  36  36  35  35  36  37  37  37  36 \n 54  50  44  42  38  36  34  33  32  31  31  30  29  26  27  26 \n 27  27  28  27  26  26  29  26  28  29  29  30  29  29  32  32 \n 30  28  27  26  26  29  55  98  50  37  37  35  35  36  34  32 \n 32  31  31  30  28  24  27  62 101 140 202 190 184 185 186 175 \n 58  22  27  32  32  29  32  42  63  65  60  55  52  47  41  38 \n 37  36  34  34  34  34  34  33  33  32  34  33  30  31  30  30 \n 31  30  28  28  29  30  29  30  30  32  33  33  32  31  31  30 \n 29  31  32  31  29  29  27  27  29  29  33  45 115  44  31  32 \n 64  92 215 253 239 167 112 119 154 194 189 103  65  54  46  42 \n 41  46  35  17  19  25  25  29  44  63  66  61  57  55  50  47 \n 37  18  19  32  28  22  23  30  40  46  49  45  40  37  36  37 \n 38  33  31  31  31  31  32  30  31  30  31  31  34  32  31  29 \n 29  32  33  35  34  33  30  30  32  32  32  33  30  30  31  31 \n 32  34  36  34  35  36  31  29  31  30  32  31  30  29  32  32 \n 39  87  22  17  25  20  25  33  45  49  48  45  41  39  40  40 \n 39  38  34  34  34  37  36  33  33  32  32  31  35  34  31  33 \n 34  43  23  23  29  29  27  29  34  37  39  37  38  39  41  41 \n 39  39  38  38  36  37  36  37  34  34  34  33  34  34  33  32 \n 33  33  31  33  33  33  32  33  34  34  35  35  35  34  33  33 \n 32  33  34  34  33  33  33  33  33  33  36  36  34  34  33  33 \n 35  34  35  60  50  35  33  34  34  37  33  33  31  30  30  29 \n 33  31  31  30  29  28  28  30  28  28  28  29  28  29  29  31 \n 30  31  31  30  29  32  37  38  33  34  38  28  18  26  31  26 \n 22  25  30  32  37  44  44  45  43  38  34  33  30  30  30  30 \n 32  31  32  32  31  32  33  31  30  29  29  29  29  29  30  30 \n 29  29  30  31  30  31  32  31  31  30  29  28  27  28  30  31 \n 29  28  29  30  34  37  37  36  36  39  40  40  39  39  30  27 \n 57  69  31  31  30  29  30  31  29  29  30  31  30  30  32  32 \n 30  31  34  35  33  32  31  30  29  29  27  26  29  35  37  36 \n 28  21  24  28  47  76  36  38  38  38  43  53  41  28  26  27 \n 25  25  27  27  27  29  32  34  41  42  40  40  39  41  39  41 \n 42  40  38  36  35  37  36  37  38  38  37  34  36  35  35  35 \n 54  49  47  42  39  36  33  34  31  31  29  29  28  27  27  27 \n 27  28  28  26  26  26  29  28  30  29  29  29  28  31  32  32 \n 30  30  26  26  25  28  43  93  71  38  38  34  35  36  34  33 \n 34  33  33  31  28  24  23  42  89 116 232 244 242 241 242 240 \n 91  22  26  33  33  29  31  39  59  64  60  57  54  48  41  38 \n 37  37  35  34  33  33  34  33  33  33  33  31  30  30  31  31 \n 30  30  29  28  30  31  29  29  31  32  33  32  33  31  30  29 \n 29  31  32  31  29  29  28  28  28  29  34  33 103  71  31  32 \n 52  83 178 250 251 245 234 236 247 244 209 111  77  69  52  47 \n 44  48  38  17  18  24  26  31  44  61  66  63  57  56  51  45 \n 35  18  20  33  29  22  22  33  43  45  48  46  41  37  38  37 \n 35  33  31  32  30  30  31  29  29  30  32  31  32  33  32  31 \n 32  33  34  36  33  31  32  33  33  31  31  32  31  31  32  33 \n 32  33  34  34  35  36  33  29  30  30  31  32  31  31  32  32 \n 35  73  48  19  24  20  26  33  44  48  49  48  41  40  39  39 \n 38  38  34  33  36  38  37  35  32  31  31  30  32  33  32  33 \n 36  43  22  23  30  30  27  29  35  39  40  39  40  39  40  40 \n 41  41  39  37  36  36  36  35  35  34  36  34  34  35  34  32 \n 33  33  30  32  34  33  32  33  34  34  35  35  34  33  34  32 \n 34  34  34  33  33  34  34  34  34  35  36  35  34  34  34  34 \n 33  34  33  49  60  35  33  33  34  37  34  34  33  32  30  32 \n 32  30  30  29  30  29  29  30  29  27  27  27  29  29  30  30 \n 30  30  32  30  31  32  36  38  35  34  38  27  18  26  32  26 \n 23  29  34  33  37  43  46  45  43  39  35  32  31  30  29  28 \n 29  30  31  32  32  33  32  30  29  30  28  29  30  30  30  31 \n 29  28  31  32  31  31  32  31  30  30  30  30  30  30  31  30 \n 29  28  28  29  33  36  34  33  34  37  40  41  41  40  34  29 \n 34  62  41  32  30  31  32  33  33  32  30  30  28  30  32  32 \n 31  30  32  36  34  34  33  33  31  31  26  27  31  36  38  36 \n 29  22  22  28  37  85  34  38  39  39  36  29  22  23  27  27 \n 32  35  35  33  31  32  37  38  41  39  36  32  33  32  34  34 \n 37  36  37  34  32  31  30  29  32  33  31  31  32  33  32  30 \n 56  51  48  44  41  38  34  34  33  35  32  31  30  29  30  29 \n 28  29  28  27  27  28  27  28  30  29  28  28  28  31  33  32 \n 30  29  27  28  25  26  33  60  99  52  38  34  34  35  36  34 \n 33  34  34  31  29  26  24  25  74  93 177 246 245 246 244 247 \n101  23  25  31  32  28  30  38  58  64  63  57  53  48  43  39 \n 36  37  36  36  34  33  32  34  32  34  34  34  33  31  30  30 \n 30  31  31  31  32  30  29  31  32  32  32  32  32  31  31  31 \n 28  30  31  32  31  28  27  27  26  28  34  35  67 107  36  31 \n 39  76 129 232 254 250 244 244 239 164  90  58  73  83  71  59 \n 54  54  38  19  17  21  27  31  46  65  66  62  58  56  52  47 \n 34  16  19  31  29  22  23  33  44  47  50  47  42  38  38  37 \n 33  33  34  33  31  31  30  28  29  28  33  31  31  33  34  33 \n 32  32  32  33  33  33  35  34  32  32  32  33  31  31  31  32 \n 32  33  34  34  35  35  34  32  30  29  30  30  29  29  30  32 \n 34  46  84  21  23  21  25  34  44  48  49  47  42  41  38  39 \n 40  36  36  35  37  38  37  35  32  32  33  32  33  33  33  33 \n 38  41  21  23  31  30  27  29  33  36  41  40  41  39  41  42 \n 40  39  37  37  36  35  35  33  33  33  35  34  34  33  33  32 \n 31  32  32  32  33  32  33  33  33  33  35  34  35  34  34  32 \n 33  33  34  33  32  33  35  34  32  33  34  35  34  33  33  33 \n 33  34  33  38  68  39  33  34  35  35  34  34  34  33  32  33 \n 31  32  30  29  30  29  28  28  30  29  28  29  29  29  30  31 \n 30  30  30  30  30  32  36  37  35  34  37  25  18  26  31  26 \n 24  31  39  33  38  44  45  43  40  38  37  32  30  29  30  30 \n 30  30  33  36  32  32  31  30  28  29  30  28  29  31  32  28 \n 27  28  32  33  32  31  31  32  32  31  31  30  30  29  31  29 \n 29  29  30  32  35  35  31  31  34  36  39  41  40  38  37  32 \n 30  39  59  34  31  33  32  31  31  31  30  31  30  31  32  33 \n 32  32  32  36  38  37  35  35  32  30  29  29  30  36  39  39 \n 31  22  21  25  29  71  43  40  41  37  28  19  23  27  29  32 \n 38  40  42  39  38  37  37  37  37  34  32  28  28  28  28  28 \n 29  31  34  31  29  27  26  26  27  28  27  30  31  30  30  28 \n 56  52  49  45  41  38  34  34  34  35  33  32  31  31  30  28 \n 29  29  28  28  28  28  26  28  30  30  29  29  31  31  32  32 \n 32  31  29  28  27  26  29  41  97  74  37  36  37  35  36  35 \n 34  34  35  33  32  28  21  25  52  92 120 187 189 195 189 196 \n 86  23  23  30  33  29  30  36  58  66  63  58  55  50  43  40 \n 39  37  37  36  34  35  33  35  33  35  35  37  34  31  31  29 \n 29  31  32  31  32  31  31  32  34  33  33  33  32  32  32  32 \n 33  31  32  33  33  29  28  28  28  29  31  33  44 119  54  31 \n 34  61 115 194 253 249 247 250 206  99 113  91  48  84 104  67 \n 58  55  37  18  18  23  27  33  45  62  66  63  60  56  52  48 \n 36  18  19  31  29  21  23  33  45  48  51  47  43  39  36  35 \n 35  33  34  34  34  33  32  29  30  30  33  30  31  33  35  34 \n 33  32  31  33  35  36  37  37  34  34  32  33  31  31  32  33 \n 33  33  34  36  38  37  34  32  31  30  32  31  29  30  29  30 \n 35  34  92  28  24  21  26  34  44  50  50  47  43  41  39  39 \n 40  37  35  35  35  39  37  35  33  34  34  34  34  34  33  34 \n 37  41  21  23  32  31  27  28  34  38  42  42  40  38  40  40 \n 41  40  38  38  38  38  33  30  30  31  33  34  34  33  34  32 \n 31  32  32  32  34  33  32  30  31  32  34  33  35  35  33  34 \n 34  34  33  34  33  33  34  34  32  33  33  34  35  35  34  35 \n 33  32  34  33  72  48  33  35  38  36  33  32  33  33  34  33 \n 31  31  31  29  30  30  29  30  30  30  29  29  30  31  31  33 \n 32  31  30  29  29  32  36  36  34  35  36  24  21  28  31  24 \n 24  33  41  37  41  45  45  43  40  38  38  35  31  29  29  29 \n 29  30  36  40  34  34  31  30  29  28  29  30  31  31  31  29 \n 28  30  31  33  32  31  32  32  32  31  30  29  30  30  31  30 \n 31  30  31  33  35  34  30  30  33  36  40  40  39  38  38  37 \n 31  35  62  36  32  33  33  32  33  32  31  31  31  32  31  33 \n 34  34  33  34  38  37  35  34  32  30  30  29  30  35  39  39 \n 33  21  21  23  26  59  49  40  39  38  24  19  26  30  28  30 \n 33  37  40  41  42  39  33  33  32  30  28  27  27  27  26  26 \n 26  27  30  30  29  27  27  26  26  27  28  30  31  31  30  29 \n 57  55  50  47  43  39  38  38  36  37  34  31  35  34  30  29 \n 30  29  29  29  29  28  27  27  27  27  29  29  29  30  32  33 \n 31  30  29  29  27  26  27  29  74  97  44  36  37  36  36  35 \n 32  33  33  35  32  30  23  20  32  70 101 119 140 142 142 142 \n 89  26  23  28  34  28  30  35  53  65  63  60  56  50  43  40 \n 37  36  37  37  35  35  34  35  33  33  34  33  33  32  32  30 \n 32  33  32  32  32  32  32  33  34  34  34  34  33  31  31  32 \n 32  31  32  33  34  31  28  29  30  28  28  31  33  84 106  35 \n 32  41  92 138 247 250 248 237 141  70  97 151  57 109 227 151 \n 54  46  37  21  18  23  26  35  47  61  65  63  59  56  52  47 \n 37  19  18  29  30  22  23  32  47  48  51  47  43  40  35  36 \n 34  34  34  35  34  34  33  30  29  32  33  31  33  35  35  33 \n 34  32  31  34  35  35  34  35  34  34  34  34  32  32  34  34 \n 34  35  35  36  37  36  36  32  30  31  31  32  31  31  28  29 \n 33  32  72  48  24  21  28  36  44  50  49  47  43  40  39  40 \n 39  38  35  34  36  38  35  33  33  34  33  33  30  32  33  34 \n 37  43  22  24  32  32  28  29  34  36  40  41  39  38  39  41 \n 40  40  38  39  38  36  30  29  30  28  30  34  35  34  34  33 \n 30  32  34  33  32  32  30  28  28  30  31  32  34  34  34  34 \n 33  35  33  33  32  32  34  33  33  34  34  35  35  35  32  32 \n 32  32  32  32  60  62  34  35  39  37  33  32  31  31  33  33 \n 33  33  33  32  32  31  29  30  30  30  29  30  29  28  30  33 \n 32  32  31  29  29  31  35  36  34  33  36  25  20  29  33  23 \n 22  31  41  39  41  46  45  45  38  36  35  34  31  31  29  29 \n 29  29  30  33  33  34  32  29  28  28  28  27  29  27  28  27 \n 28  30  30  32  31  32  31  31  30  29  29  30  30  30  30  31 \n 31  31  31  33  35  32  29  29  30  34  38  38  41  40  38  36 \n 30  30  52  39  34  33  30  30  34  34  32  32  32  33  32  33 \n 33  34  35  36  38  37  33  34  31  30  30  29  32  37  40  40 \n 34  23  19  23  24  43  61  37  39  37  20  17  30  29  29  27 \n 28  28  35  41  40  38  36  35  31  28  26  27  26  25  24  25 \n 26  26  28  28  27  28  27  25  27  28  28  27  29  32  33  30 \n 58  58  52  48  44  41  37  38  38  37  33  32  35  33  31  31 \n 30  30  30  29  29  28  28  26  28  27  29  29  30  30  32  34 \n 31  30  30  29  28  27  26  27  51  99  61  38  36  35  33  35 \n 34  34  35  36  32  32  25  20  25  51  93 107 134 147 146 147 \n100  26  22  26  33  30  30  35  53  66  65  62  56  52  45  41 \n 39  39  37  35  35  35  35  35  35  32  33  32  33  31  31  32 \n 33  34  33  33  32  32  33  32  33  33  34  34  34  34  32  32 \n 32  33  33  34  34  31  30  30  30  29  28  30  33  49 136  51 \n 30  34  78 108 223 250 247 211 116  72  77 116 101  73 216 233 \n119  37  38  22  18  23  28  36  45  60  64  63  61  57  51  48 \n 37  18  18  31  30  22  25  36  49  48  49  47  43  41  38  37 \n 35  33  35  36  36  35  34  33  31  33  33  33  33  35  36  34 \n 34  34  33  36  35  35  32  34  35  34  35  34  33  33  34  35 \n 35  37  36  36  37  35  36  35  33  31  31  32  33  32  28  27 \n 31  33  59  69  22  24  29  38  44  52  51  48  41  41  40  39 \n 40  38  36  35  37  38  35  34  33  35  33  33  34  35  33  35 \n 39  42  21  24  30  30  27  28  33  34  38  42  40  40  39  40 \n 40  40  39  40  37  36  31  28  31  31  30  32  34  35  33  33 \n 32  32  33  33  32  33  29  26  30  31  31  33  34  34  34  35 \n 34  35  36  36  35  34  34  34  34  34  34  34  33  33  34  33 \n 31  31  35  33  44  66  31  34  38  38  35  34  32  32  33  33 \n 32  33  33  31  32  30  27  28  29  30  28  28  28  29  30  32 \n 34  34  31  30  31  32  34  37  35  34  34  22  21  31  32  23 \n 23  30  40  40  43  45  45  44  38  36  37  36  33  31  30  30 \n 30  29  29  32  32  31  31  32  30  29  28  29  31  29  29  29 \n 31  31  31  32  32  34  33  33  32  31  31  31  30  29  29  32 \n 32  32  32  33  34  31  28  30  31  35  39  39  41  39  38  36 \n 32  29  47  43  35  33  32  31  33  33  33  33  34  34  34  35 \n 33  32  35  38  38  36  33  34  30  30  28  29  32  37  40  40 \n 36  27  19  21  24  32  70  39  40  36  18  20  30  31  28  25 \n 27  27  34  39  40  40  37  34  31  29  26  27  25  25  24  25 \n 27  27  27  28  25  26  27  27  26  27  27  29  29  31  31  28 \n 61  59  54  50  47  45  39  37  37  35  35  33  35  33  31  30 \n 30  29  31  30  27  26  27  28  28  29  28  28  30  30  31  33 \n 32  32  29  29  27  26  26  26  35  78  94  47  36  38  36  37 \n 35  34  35  34  33  34  28  21  19  34  73  97 115 137 146 146 \n114  32  21  22  33  29  28  33  49  63  66  63  58  54  47  44 \n 41  38  38  37  35  34  34  34  32  32  34  34  33  33  32  32 \n 33  32  31  33  33  33  32  34  33  33  34  34  36  35  33  31 \n 32  33  32  33  32  31  30  29  29  30  30  29  33  31 120  95 \n 25  31  56  98 164 244 242 179 108  67  77 177 173  97 138 221 \n171  49  45  22  18  23  29  38  46  62  65  63  59  57  51  48 \n 36  18  18  28  27  21  25  35  51  52  51  48  44  42  39  38 \n 35  35  38  37  38  34  33  32  33  33  32  32  32  34  31  31 \n 30  29  32  35  33  31  32  35  35  35  35  35  35  36  35  35 \n 35  35  37  38  38  35  32  31  33  31  31  32  30  30  28  28 \n 29  34  43  87  26  23  32  39  45  53  51  48  40  40  39  40 \n 40  39  36  36  37  38  36  33  35  34  32  31  34  35  34  35 \n 38  36  20  21  30  29  26  29  35  38  39  41  43  43  42  42 \n 39  40  39  38  37  36  31  28  29  31  29  30  33  34  35  33 \n 33  30  32  33  33  33  32  29  30  32  33  34  33  34  35  34 \n 33  35  35  34  35  34  34  33  34  35  34  34  34  33  33  32 \n 30  30  31  32  36  68  37  36  39  40  36  34  32  32  34  33 \n 31  32  32  32  31  30  29  29  29  30  30  29  29  30  30  32 \n 36  37  34  31  30  30  33  37  34  34  34  23  22  33  31  23 \n 24  31  37  41  43  43  42  41  39  37  37  36  33  32  31  30 \n 30  31  32  37  36  31  30  32  29  28  29  31  31  30  29  30 \n 32  31  30  31  32  34  32  31  33  31  31  30  30  31  31  31 \n 31  30  32  33  33  32  29  30  32  34  39  41  43  42  38  37 \n 34  29  38  44  34  32  32  33  32  32  33  33  34  34  33  34 \n 31  32  33  35  37  35  35  35  33  30  30  29  31  36  40  41 \n 38  28  19  20  23  27  71  46  40  37  17  18  28  30  30  26 \n 25  27  31  36  39  38  36  33  32  28  27  26  25  25  25  27 \n 26  26  27  26  27  27  26  26  24  25  24  26  28  28  27  27 \n 61  61  57  54  50  49  44  41  39  38  38  36  36  34  32  31 \n 32  33  35  33  30  29  27  28  29  28  28  30  32  31  32  33 \n 33  31  30  30  29  27  26  26  29  54 106  66  34  35  36  36 \n 35  36  35  36  34  32  27  20  21  24  55  93 103 121 150 158 \n132  35  21  23  32  31  28  32  48  64  67  65  60  53  48  44 \n 41  38  40  38  35  34  34  34  34  34  33  34  34  34  33  32 \n 31  32  31  32  34  34  33  32  34  33  33  34  35  35  33  30 \n 32  33  32  33  34  33  32  31  30  29  30  28  30  33  82 129 \n 31  30  42  90 132 223 233 157 108  68 109 228 225 162 149 164 \n141 100  56  26  19  23  28  37  44  59  66  64  60  57  52  48 \n 37  18  18  28  27  20  25  37  50  53  52  47  43  41  41  40 \n 37  36  37  37  37  36  34  33  34  34  34  33  33  35  32  31 \n 29  31  31  34  34  30  31  33  34  36  35  35  35  35  34  35 \n 36  35  36  37  38  38  35  33  34  33  33  34  31  31  31  29 \n 26  32  36  88  41  21  32  38  44  53  50  46  40  40  39  39 \n 39  39  37  37  39  38  36  34  36  34  32  33  33  35  34  34 \n 37  36  19  20  31  28  25  29  33  37  38  40  42  43  43  40 \n 40  39  39  38  37  36  33  30  29  30  30  31  33  34  34  32 \n 32  29  30  32  32  31  31  28  29  31  33  34  33  33  33  34 \n 34  34  35  34  35  34  34  34  36  36  34  34  34  34  32  31 \n 32  33  31  32  33  62  52  35  39  39  37  34  33  33  33  34 \n 33  33  33  33  31  31  31  31  29  29  30  28  29  31  30  32 \n 34  37  36  34  33  32  33  36  34  35  33  20  23  33  30  22 \n 23  29  37  41  43  43  41  40  38  37  37  36  34  33  33  31 \n 32  31  32  36  33  29  30  31  30  30  31  31  31  29  28  29 \n 31  30  29  29  30  31  30  30  31  31  31  30  31  31  33  32 \n 29  30  32  34  34  33  29  31  33  34  39  42  43  43  38  36 \n 33  30  34  47  34  33  32  32  32  32  32  33  34  34  33  33 \n 32  32  32  35  37  36  35  34  32  31  28  29  32  36  41  42 \n 41  30  20  20  23  24  72  51  38  36  19  20  30  30  27  25 \n 24  27  32  35  38  36  35  33  31  28  26  26  25  26  25  25 \n 25  25  27  27  27  26  25  24  23  23  23  25  26  26  27  27 \n 82  78  73  68  63  60  52  48  43  40  41  38  38  39  37  36 \n 39  39  38  35  34  32  30  31  30  28  29  28  29  30  32  34 \n 34  32  30  28  28  28  27  27  28  34  94  92  41  34  35  34 \n 37  37  38  36  35  34  27  23  21  20  37  76  99 105 127 161 \n203  58  20  22  30  32  29  33  47  64  69  66  62  57  49  45 \n 42  39  37  35  35  34  35  34  34  35  35  35  35  35  33  32 \n 32  31  32  31  33  31  31  32  33  32  34  35  35  32  33  34 \n 32  32  32  33  35  35  34  33  32  31  29  30  29  31  44 130 \n 69  29  34  68 110 174 215 136 102  60 155 248 249 230 182 165 \n159 159  75  23  22  23  28  37  44  61  70  65  59  58  52  48 \n 34  19  18  30  29  21  24  37  50  54  52  49  44  42  41  39 \n 38  37  38  39  38  35  33  33  33  32  34  35  36  36  34  32 \n 30  32  30  32  34  32  32  34  35  34  36  36  35  35  36  35 \n 37  37  39  39  41  39  37  35  35  34  34  35  32  31  30  28 \n 26  29  34  72  69  21  34  39  46  51  50  46  41  40  40  39 \n 39  38  37  38  39  39  37  35  35  33  34  34  33  34  34  34 \n 39  40  19  21  30  28  25  28  34  38  39  40  40  42  43  40 \n 40  40  40  39  38  36  33  30  29  29  30  30  31  30  31  32 \n 29  26  26  27  28  30  32  31  31  28  31  34  35  34  34  34 \n 35  36  36  34  34  33  32  34  36  36  35  34  34  32  31  30 \n 32  31  30  30  33  45  74  35  38  36  34  34  34  34  34  33 \n 35  33  32  33  31  31  32  32  29  30  31  31  31  33  32  34 \n 36  37  37  34  34  33  35  35  35  35  30  18  25  36  29  23 \n 25  31  37  40  42  42  42  40  36  36  37  37  35  35  32  32 \n 32  33  31  32  32  31  30  31  32  31  32  30  31  30  28  28 \n 30  30  30  29  31  31  31  30  31  32  32  32  32  31  32  32 \n 31  32  33  35  35  34  32  34  34  35  40  41  42  41  37  34 \n 34  32  31  48  35  34  32  32  35  35  34  35  34  33  35  35 \n 34  33  33  36  38  38  35  33  33  31  30  30  30  36  41  41 \n 40  31  19  17  20  25  57  58  39  32  17  21  33  30  25  25 \n 25  28  32  35  37  37  35  34  31  28  26  26  26  26  26  26 \n 27  26  28  27  25  24  23  22  22  20  23  24  26  25  27  28 \n148 147 150 149 142 138 129 122 117 108  95  83  68  59  48  44 \n 43  42  47  49  41  36  31  32  31  29  29  28  30  31  32  32 \n 34  33  31  29  28  28  27  28  26  30  71 101  57  37  38  38 \n 39  41  39  37  35  33  28  25  21  21  31  59  95 102 110 124 \n159  52  23  22  28  31  29  33  46  64  70  67  62  57  52  47 \n 42  40  37  35  35  35  36  35  35  35  34  34  34  34  34  35 \n 34  31  32  31  32  31  32  32  33  34  35  34  35  33  33  34 \n 33  34  34  34  36  36  34  33  33  31  31  30  28  29  35  94 \n116  35  30  47  93 129 184 134  92  58 175 251 251 251 237 215 \n201 202  99  27  23  22  28  36  43  62  72  65  59  56  51  45 \n 37  17  18  30  28  21  25  39  50  53  52  47  43  41  39  38 \n 39  37  38  38  38  36  34  34  34  33  34  33  34  34  33  31 \n 32  33  31  31  32  31  33  35  35  33  35  37  35  35  36  35 \n 36  36  37  37  39  38  36  35  36  35  35  33  33  32  30  29 \n 25  27  33  50  87  25  34  38  45  52  49  46  41  40  41  41 \n 38  38  37  39  39  40  36  34  35  33  34  35  34  34  34  34 \n 39  39  19  22  29  28  25  27  34  39  39  39  41  42  42  41 \n 40  40  40  39  38  36  33  29  30  31  31  32  32  30  32  31 \n 29  27  27  30  28  28  31  30  29  29  31  34  34  35  35  36 \n 35  35  36  34  34  33  34  35  36  35  35  34  34  32  33  33 \n 31  33  30  31  33  38  82  42  38  35  34  33  34  36  35  33 \n 35  33  35  35  31  32  33  32  31  33  33  31  33  34  34  34 \n 37  39  38  34  33  32  33  34  36  35  27  18  25  35  27  22 \n 25  31  37  39  43  42  41  40  36  36  37  36  35  35  33  33 \n 33  32  32  33  31  30  30  29  30  29  30  31  31  31  30  30 \n 31  31  30  31  31  31  30  30  32  33  32  32  33  32  31  31 \n 32  33  33  35  35  34  33  35  34  35  39  41  41  41  39  34 \n 33  33  30  44  38  34  33  33  34  33  33  35  36  34  34  33 \n 33  33  33  35  38  39  36  34  33  31  30  30  31  35  40  40 \n 40  33  20  17  20  24  48  63  38  29  17  23  32  27  22  24 \n 26  29  31  36  36  37  36  33  31  29  26  27  27  25  25  26 \n 26  26  26  26  24  25  23  23  25  22  23  25  26  25  28  29 \n 40  49  59  67  79  93 105 115 123 134 149 157 170 172 169 168 \n162 148 130 112  69  46  36  34  32  30  29  29  29  30  32  34 \n 34  35  32  29  29  29  27  26  25  26  48  98  83  48  42  41 \n 43  43  40  38  33  31  28  27  25  26  28  40  85 100 106 106 \n109  56  19  20  29  32  30  34  45  62  69  68  63  57  53  48 \n 43  40  38  36  36  35  35  35  34  33  32  34  34  33  35  34 \n 31  31  31  33  34  33  32  32  32  33  33  35  34  34  35  32 \n 34  35  35  34  35  36  34  33  32  32  31  29  29  28  30  44 \n141  61  29  35  72 104 132 145  80  62 176 252 250 252 252 253 \n253 252 133  29  23  22  26  35  44  59  72  66  58  54  49  47 \n 37  18  16  27  26  21  27  39  51  54  54  49  43  41  40  40 \n 39  40  38  36  34  35  33  33  33  33  35  35  34  33  32  32 \n 33  30  29  30  31  30  32  34  35  33  34  35  35  37  36  36 \n 36  37  38  38  39  40  38  36  34  33  34  32  32  31  31  29 \n 25  25  32  34  96  40  33  37  45  51  51  47  41  41  39  40 \n 38  38  36  38  39  38  35  33  34  34  34  34  34  35  34  34 \n 42  39  20  22  29  27  24  27  34  39  39  39  41  41  41  40 \n 40  40  41  40  38  37  34  30  34  32  29  30  30  30  32  30 \n 29  26  26  29  28  29  31  31  27  27  30  35  36  36  32  35 \n 35  34  36  33  35  35  35  35  36  36  35  35  34  34  33  33 \n 31  30  30  30  32  34  73  52  38  36  33  33  34  36  36  34 \n 34  33  35  34  34  34  34  32  31  32  33  32  32  33  33  35 \n 39  39  37  36  33  33  33  32  36  35  25  19  26  36  26  20 \n 25  32  37  41  44  42  38  37  36  34  34  35  35  34  34  33 \n 32  31  32  32  31  31  30  27  28  27  29  28  29  33  34  33 \n 30  30  28  28  29  31  32  32  33  31  31  31  33  31  30  32 \n 33  33  34  35  35  32  32  31  34  35  36  39  43  40  39  37 \n 35  34  30  39  41  34  33  33  34  34  33  34  34  32  32  33 \n 34  32  33  34  37  37  34  33  34  31  29  30  33  37  40  40 \n 42  35  20  17  19  24  39  73  34  25  19  26  31  24  22  26 \n 30  30  32  36  36  36  34  31  30  28  26  25  26  26  25  24 \n 24  25  25  26  25  26  24  25  25  27  25  25  25  26  28  31 \n 34  34  35  35  34  37  39  40  42  47  56  62  78  88 105 126 \n162 194 239 233 184 109  44  37  31  30  31  29  28  31  32  34 \n 34  34  33  31  28  29  28  26  24  24  34  76 102  65  41  39 \n 37  36  37  35  34  31  31  32  35  35  34  37  66  94 101 101 \n103  59  20  21  28  31  31  34  45  60  69  69  65  59  52  49 \n 42  41  39  38  38  37  35  34  34  35  33  33  34  33  34  34 \n 33  32  32  33  33  33  32  33  34  33  33  36  37  36  35  34 \n 35  35  36  35  35  36  35  33  33  32  32  30  29  28  30  32 \n117 101  30  32  55  94 120 128  94  74 163 248 252 251 250 250 \n251 250 143  31  24  22  27  35  45  59  72  65  59  54  50  45 \n 38  18  17  28  25  21  28  37  52  55  55  50  44  43  41  42 \n 40  39  37  36  34  34  33  33  32  32  34  35  35  33  32  32 \n 32  30  30  31  31  30  31  33  34  32  33  34  34  36  37  39 \n 37  38  39  39  39  39  38  35  33  31  34  33  33  33  34  31 \n 26  23  30  32  83  61  32  37  46  50  51  47  41  40  39  39 \n 37  37  36  37  40  38  35  33  33  33  32  34  34  34  33  35 \n 39  35  19  21  29  27  24  28  33  38  40  42  42  44  42  41 \n 40  40  41  40  38  37  34  30  30  30  30  30  33  34  32  29 \n 29  26  26  27  28  30  31  31  28  26  31  34  34  34  34  35 \n 36  35  35  33  36  36  35  35  36  36  36  36  36  34  32  32 \n 32  30  29  28  31  32  62  62  40  35  34  33  35  38  36  34 \n 35  35  35  37  35  34  35  33  31  30  32  31  32  33  34  36 \n 39  40  40  38  34  35  33  34  36  35  24  19  27  35  24  21 \n 27  34  39  41  42  42  38  37  37  36  36  35  35  34  33  33 \n 34  31  31  30  31  33  29  27  26  25  27  27  27  29  31  33 \n 30  30  30  29  29  31  34  32  32  31  31  31  32  31  31  32 \n 32  34  34  35  34  34  32  31  33  36  36  39  43  43  42  38 \n 36  33  30  36  43  34  34  35  36  34  33  34  35  35  32  32 \n 32  32  33  34  37  36  34  35  35  32  31  28  32  37  40  41 \n 41  35  21  18  17  23  33  81  35  25  19  28  31  23  22  26 \n 31  32  34  37  36  35  33  31  30  27  27  26  25  25  25  25 \n 22  23  24  26  26  27  27  26  27  28  26  27  28  28  28  28 \n 29  29  29  31  33  32  32  33  33  32  34  35  35  35  38  41 \n 43  62 147 202 224 213 153  76  34  33  29  30  31  32  34  31 \n 34  34  34  33  28  26  28  28  27  25  25  44  98  88  45  36 \n 32  31  32  31  29  30  30  30  37  41  41  40  45  71  94  99 \n100  65  23  19  30  34  32  33  47  61  70  69  64  61  56  50 \n 46  42  38  38  38  38  37  35  36  35  35  35  34  34  37  35 \n 36  36  33  33  33  32  32  33  34  34  34  35  35  36  36  35 \n 36  35  35  35  35  36  36  35  33  34  35  33  31  30  29  32 \n 69 132  47  25  41  75 108 117 136 103 139 237 251 252 250 252 \n253 251 152  29  26  22  28  34  42  57  69  64  58  53  47  43 \n 35  18  17  28  24  21  28  37  53  55  53  49  43  42  40  40 \n 39  37  37  35  32  33  32  32  32  34  34  34  35  35  34  32 \n 33  32  32  31  30  30  32  31  33  36  36  37  34  34  35  36 \n 36  37  38  38  37  38  36  36  35  34  35  34  36  34  33  31 \n 29  24  26  33  67  91  28  39  44  53  51  48  41  38  39  39 \n 37  38  38  39  38  36  35  33  34  36  33  35  33  33  33  35 \n 38  33  19  21  28  27  24  30  34  39  40  40  41  44  42  42 \n 41  41  40  39  38  37  35  31  28  29  30  31  33  33  31  29 \n 28  26  27  28  28  31  30  29  26  25  30  33  36  35  35  34 \n 35  35  35  36  36  37  36  35  36  36  36  35  34  34  34  35 \n 34  34  30  28  30  30  50  79  38  35  34  34  34  35  36  35 \n 34  35  36  36  37  36  34  33  32  32  34  31  32  33  34  36 \n 39  42  41  38  36  36  33  34  35  35  24  18  28  33  22  22 \n 27  34  38  42  44  42  40  36  37  36  36  37  36  34  33  33 \n 31  30  31  29  30  31  29  28  28  29  29  28  28  30  30  30 \n 29  28  30  31  32  31  32  31  32  32  33  32  33  32  33  32 \n 34  35  34  33  34  34  34  34  35  36  38  39  42  42  43  39 \n 35  34  31  34  44  35  33  34  34  35  34  35  36  35  34  32 \n 32  32  33  34  36  36  34  35  34  32  32  32  33  37  41  41 \n 41  37  23  19  16  21  28  75  42  20  20  29  30  21  22  27 \n 34  34  36  37  35  34  32  30  28  30  27  26  24  25  24  24 \n 22  22  24  25  26  28  27  26  28  28  29  28  29  29  29  28 \n 30  30  31  29  30  31  29  29  30  29  28  29  31  32  34  37 \n 42  43  50  68  87 109 166 169  74  35  31  31  32  33  34  31 \n 35  35  36  34  32  29  30  29  29  27  24  33  85 103  61  37 \n 34  30  30  30  28  28  30  34  40  42  42  40  38  49  83 100 \n104  75  23  25  30  38  36  36  48  64  74  72  69  64  57  53 \n 48  46  44  42  41  42  41  38  38  36  38  39  38  38  38  39 \n 39  39  36  36  35  36  35  36  36  37  37  38  37  37  36  37 \n 37  37  38  39  38  38  38  38  37  37  36  34  35  32  30  35 \n 47 122  85  27  34  63 103 112 131 125 122 214 248 247 245 246 \n250 250 151  31  26  22  31  38  41  54  69  65  58  54  47  45 \n 36  19  20  28  24  23  27  37  53  56  55  48  41  43  41  40 \n 38  37  35  35  32  32  30  33  34  36  34  34  33  34  34  33 \n 32  33  33  33  32  32  33  33  33  37  36  35  35  37  37  36 \n 36  37  38  39  40  40  38  37  36  36  35  36  34  34  35  34 \n 31  25  25  31  51 108  31  37  44  51  51  44  42  41  40  41 \n 39  40  40  41  37  37  36  36  37  37  35  35  33  32  33  35 \n 37  32  19  20  28  26  23  30  35  40  40  38  41  43  42  41 \n 41  41  39  39  38  37  34  31  30  29  29  29  32  33  31  28 \n 27  27  27  28  28  29  27  26  26  25  31  34  33  33  34  35 \n 34  35  36  37  36  38  37  36  35  36  36  36  35  35  35  36 \n 34  34  32  30  30  31  39  82  44  37  34  33  33  33  34  34 \n 35  35  38  38  38  38  35  36  33  34  34  32  33  33  34  37 \n 39  42  41  39  37  35  36  36  36  37  20  18  29  31  22  22 \n 28  34  39  41  44  43  40  36  37  36  36  35  34  32  32  34 \n 32  32  33  31  31  31  29  29  30  31  30  29  29  29  27  28 \n 28  27  28  29  32  32  32  32  33  33  35  33  34  34  35  34 \n 34  34  34  35  35  33  34  34  35  35  38  39  42  43  43  38 \n 34  36  31  29  46  39  34  33  32  34  33  34  36  37  36  35 \n 34  33  33  35  37  37  34  34  33  32  32  32  33  37  41  39 \n 39  37  26  20  16  17  26  55  41  19  20  29  28  20  22  29 \n 35  37  37  36  36  35  30  30  28  29  28  27  25  24  23  22 \n 22  23  26  26  27  27  26  26  27  28  30  29  30  31  30  29 \n 29  31  29  29  30  28  30  30  30  29  28  27  29  31  29  30 \n 31  32  31  35  38  40  60 108 156  79  34  33  33  32  33  31 \n 33  34  35  32  32  30  28  28  29  27  22  26  58 101  90  48 \n 37  34  32  32  30  32  35  41  45  44  42  38  37  44  58  83 \n104  86  40  53  72  84  83  82  88  98 108 106 105 105 101  99 \n 96  94  92  89  89  86  83  80  77  77  74  75  78  76  71  71 \n 64  60  58  58  55  54  51  51  46  46  47  45  43  42  42  41 \n 41  42  42  43  42  43  38  39  39  40  40  40  42  41  39  37 \n 37  82 134  45  29  45  92 105 113 122 153 188 211 208 198 201 \n207 214 118  28  26  23  28  36  41  52  68  65  57  55  50  47 \n 37  18  17  25  26  24  27  36  53  57  54  48  43  40  41  39 \n 37  37  36  35  33  34  33  33  35  34  37  38  36  37  35  35 \n 36  35  34  34  33  33  33  35  35  38  39  36  35  37  37  37 \n 38  38  40  40  40  40  38  38  36  36  36  37  37  36  35  34 \n 32  25  25  30  40  95  55  35  43  51  48  45  45  42  43  41 \n 41  41  40  40  36  38  38  39  39  39  37  35  36  35  35  35 \n 40  33  17  20  29  25  24  28  36  39  41  40  43  43  43  41 \n 40  40  40  40  39  37  35  34  32  28  30  30  30  32  32  30 \n 31  29  31  29  27  28  28  27  27  27  30  35  34  34  36  35 \n 34  37  38  37  38  37  38  38  37  37  37  36  36  35  35  34 \n 36  34  32  30  28  33  36  70  60  37  35  33  34  35  33  33 \n 36  35  37  40  41  43  40  38  33  34  33  35  34  33  34  35 \n 40  42  43  40  36  35  36  37  39  37  21  19  29  28  22  23 \n 29  34  40  42  44  43  39  37  35  35  34  35  33  33  34  34 \n 32  33  32  31  31  32  27  30  29  27  29  30  29  27  26  28 \n 28  28  28  30  31  30  31  34  34  33  34  32  35  36  34  35 \n 35  34  36  36  35  34  34  32  35  37  39  40  42  44  44  38 \n 32  34  32  30  48  46  34  34  36  36  34  35  36  37  36  35 \n 35  35  35  35  37  38  35  35  36  33  32  33  36  37  40  40 \n 42  38  27  21  17  17  23  34  32  18  21  30  26  20  22  29 \n 36  36  38  39  36  35  30  28  29  27  28  27  26  25  24  22 \n 23  24  25  25  26  27  27  27  29  28  31  31  30  31  30  30 \n 28  28  28  28  29  30  29  28  28  28  28  28  28  29  28  27 \n 28  29  30  31  30  32  37  46 103 135  51  32  33  34  34  31 \n 33  34  35  34  31  30  29  29  30  28  24  22  40  85 103  66 \n 41  38  37  35  35  37  43  46  47  43  39  43  55  67  74  66 \n 72  95 121 142 154 157 153 150 151 151 148 141 135 127 122 116 \n114 116 117 115 116 117 125 127 119 124 130 129 133 135 140 145 \n142 139 142 147 150 151 148 146 141 138 135 134 134 128 123 120 \n117 113 108 105 102  99  91  86  75  68  59  52  48  48  45  45 \n 42  57 142  75  33  38  79 102 108 111 123 132 146 177 158 150 \n145 145  93  34  30  27  30  37  40  50  68  61  55  55  52  50 \n 40  18  17  24  23  22  26  36  53  56  53  49  43  42  40  37 \n 38  38  38  37  35  35  35  36  39  37  37  38  38  40  37  37 \n 38  39  38  37  38  38  38  40  40  40  43  42  40  40  40  41 \n 42  40  41  44  45  43  39  39  39  36  37  38  37  38  38  36 \n 36  30  24  27  37  75  81  37  45  49  50  49  46  43  42  42 \n 43  42  41  39  39  40  41  40  39  40  37  36  37  36  37  36 \n 40  32  19  21  27  24  26  29  35  38  41  41  43  42  41  41 \n 39  40  43  42  39  37  36  36  36  31  30  30  31  32  32  28 \n 31  29  31  27  26  29  30  29  28  28  30  34  33  34  36  36 \n 37  38  39  39  39  38  39  40  39  39  39  38  39  37  36  36 \n 35  34  31  31  27  30  36  55  73  37  35  33  35  37  34  34 \n 36  37  39  42  42  43  41  42  39  37  34  35  34  35  35  36 \n 39  42  44  41  36  35  37  36  38  35  21  20  31  26  21  25 \n 30  37  40  43  44  43  40  38  34  36  34  34  35  34  33  32 \n 34  35  34  31  31  31  30  30  29  29  28  30  30  26  27  29 \n 29  29  30  32  31  29  31  35  34  34  35  34  36  37  36  35 \n 34  37  35  35  36  34  35  33  35  37  39  41  43  43  42  38 \n 30  31  33  31  48  51  35  35  37  36  34  35  36  36  37  36 \n 35  36  34  34  36  39  37  35  36  35  33  33  37  37  41  41 \n 40  36  27  21  18  17  22  28  26  17  22  31  24  20  22  28 \n 35  36  37  37  35  33  30  27  26  27  26  26  26  25  25  23 \n 22  23  25  25  27  27  26  26  27  27  28  29  30  31  30  30 \n 29  28  28  28  27  27  28  28  28  29  28  28  27  27  27  28 \n 30  29  28  29  29  31  31  33  42  85 114  42  32  32  34  33 \n 33  35  35  35  31  31  30  30  29  29  25  22  26  63 103  88 \n 48  43  43  42  45  48  48  49  49  54  66  73  68  59  54  57 \n 80  88  69  62  54  52  50  50  46  45  46  47  46  41  39  40 \n 37  37  38  41  39  40  40  43  45  49  51  48  47  48  48  45 \n 43  46  47  47  55  63  70  73  78  84  90  95 109 115 122 132 \n139 149 160 168 177 182 189 195 199 200 198 195 188 182 169 139 \n 82  54 115 122  39  40  56  97 110 108 108 110 114 125 122 112 \n110 115  88  42  38  36  35  38  41  51  62  54  50  55  53  53 \n 41  19  16  25  23  21  25  35  52  57  51  47  43  41  39  37 \n 37  37  38  39  37  39  57  73  89  98 100 100 100 102 102 103 \n101 100  99 100  97  92  90  89  86  84  87  83  80  81  79  74 \n 74  72  71  69  65  61  54  52  53  50  48  45  41  40  40  39 \n 38  32  26  26  36  49 115  48  46  49  52  53  50  45  46  46 \n 46  46  45  43  45  45  45  43  41  40  37  38  38  37  36  37 \n 41  31  19  21  26  24  26  30  34  37  39  41  43  44  41  41 \n 41  40  39  39  41  39  37  36  36  34  34  32  33  33  33  32 \n 32  32  33  29  28  30  31  29  30  31  31  35  36  37  38  39 \n 41  40  39  41  40  42  44  44  41  42  41  40  40  40  38  39 \n 37  37  37  34  28  30  36  42  85  42  36  36  34  36  33  35 \n 39  40  41  42  43  43  42  42  41  40  39  37  36  36  35  36 \n 40  42  44  41  39  39  38  39  46  34  19  21  31  28  23  24 \n 33  41  43  44  44  43  39  36  36  35  35  35  36  36  36  36 \n 34  35  34  33  32  32  29  30  28  27  28  27  27  26  27  28 \n 30  30  30  31  30  29  31  34  34  34  34  34  35  34  36  36 \n 35  35  35  35  33  34  35  36  36  37  38  41  45  44  43  38 \n 29  28  32  31  41  51  36  34  37  37  37  38  38  38  38  36 \n 35  34  33  35  38  40  38  35  35  36  34  35  35  38  43  42 \n 40  36  27  21  16  17  21  30  27  18  25  31  22  18  21  27 \n 35  37  38  38  34  33  28  29  27  28  28  27  26  25  25  23 \n 24  24  23  24  25  27  25  24  25  25  25  26  29  29  29  30 \n 27  27  28  27  28  27  28  29  27  29  29  29  28  27  27  28 \n 30  30  30  29  28  29  27  27  33  47 106  73  33  33  33  33 \n 33  32  33  32  30  30  30  31  31  31  27  23  23  41  97 101 \n 60  46  49  52  54  60  65  71  75  81  71  66  69  80 102  90 \n 59  40  34  37  30  27  32  37  37  40  49  50  51  46  42  39 \n 39  39  38  39  37  40  42  45  49  51  53  53  51  49  45  42 \n 39  38  41  37  37  36  36  37  39  39  40  40  42  43  45  51 \n 56  61  65  68  73  80  94 102 111 122 136 148 173 215 250 245 \n208 152 111 139  60  46  51  88 113 105 107 111 113 111 110 107 \n110 120  96  51  48  44  41  42  46  57  60  54  53  53  51  50 \n 40  18  16  26  24  21  25  34  52  57  52  47  42  41  40  37 \n 34  36  38  40  61 106 138 144 148 146 142 141 140 139 135 134 \n135 134 131 129 129 128 126 131 132 133 134 134 141 146 145 141 \n142 145 146 146 150 155 156 152 145 142 140 138 131 123 113 106 \n 98  89  75  67  62  62 116  71  47  50  53  53  50  48  48  50 \n 49  50  52  51  51  52  48  49  48  46  41  41  40  39  38  37 \n 39  31  19  21  27  25  26  29  34  39  41  43  43  43  42  42 \n 41  40  38  40  41  39  38  36  37  37  37  36  37  37  36  36 \n 33  35  35  34  34  34  34  34  33  34  33  36  36  38  40  39 \n 41  44  51  56  59  58  59  55  47  46  46  42  39  39  41  39 \n 37  35  37  33  25  26  32  37  86  50  39  38  37  40  39  39 \n 42  44  44  43  42  41  43  43  44  42  42  39  37  36  38  38 \n 40  42  44  43  41  39  38  41  45  34  19  24  34  27  24  27 \n 36  43  45  47  46  44  39  37  37  37  35  34  37  38  35  35 \n 35  35  34  35  34  34  31  32  30  30  29  28  28  27  28  30 \n 30  30  29  30  32  33  34  35  37  35  34  32  35  34  36  36 \n 36  35  36  35  33  35  36  36  35  36  38  39  43  45  44  40 \n 28  27  32  31  35  53  34  34  35  36  36  38  38  38  39  38 \n 36  37  35  36  38  40  38  37  37  36  35  34  35  39  43  42 \n 40  35  27  21  18  14  19  31  23  18  27  30  20  18  21  29 \n 35  37  37  38  34  31  28  28  28  27  27  28  26  26  25  25 \n 25  25  25  26  25  27  27  25  25  27  26  27  29  29  30  29 \n 26  27  28  28  28  28  27  28  27  28  29  29  29  29  28  28 \n 27  29  29  29  27  27  27  27  27  32  59 102  44  34  34  34 \n 33  33  32  33  32  30  31  30  29  30  28  24  23  29  75 103 \n 86  50  54  57  73  82  83  81  82  87  92 104 129 154 183 115 \n 27  26  29  35  29  22  26  36  40  41  40  44  53  53  49  46 \n 41  41  40  37  39  42  44  45  44  43  42  42  43  43  43  40 \n 38  37  37  33  34  33  34  34  33  33  35  35  34  37  37  39 \n 44  45  46  45  45  45  44  41  36  35  35  37  43  60 121 149 \n158 182 188 167 103  54  49  59  96 111 113 109 110 114 114 119 \n125 119 128  81  67  60  58  54  54  64  71  60  54  49  44  44 \n 40  18  16  24  21  19  25  33  50  57  52  47  41  42  40  37 \n 35  35  39  60  80  68  52  49  48  48  49  50  50  50  43  39 \n 36  39  37  38  36  37  37  38  39  40  45  50  50  46  45  46 \n 45  41  39  37  39  41  55  61  68  68  79  88 102 111 121 129 \n138 148 153 158 164 169 179 180 175 175 172 170 166 163 155 148 \n139 130 116 107  98  86  79  73  58  51  47  44  42  41  38  38 \n 41  31  18  21  27  24  26  29  34  38  42  44  43  44  43  41 \n 41  40  39  38  38  37  36  36  37  36  37  38  40  38  36  36 \n 36  35  35  35  34  34  34  35  35  36  34  37  37  46  80 119 \n154 166 170 170 172 171 172 170 169 161 160 159 154 153 153 150 \n145 141 137 134 128 125 120 119 132 122  97  91  82  80  78  73 \n 69  66  64  58  52  49  46  41  40  43  42  39  38  39  41  42 \n 44  47  46  46  42  39  39  39  41  34  25  30  37  28  27  29 \n 39  46  48  49  48  46  41  39  38  38  38  37  38  38  36  36 \n 36  36  35  34  34  35  32  33  33  31  31  32  31  30  30  32 \n 34  31  32  32  33  35  36  36  37  36  35  34  36  36  35  37 \n 37  35  35  36  35  35  35  34  35  37  39  41  44  46  45  39 \n 30  23  28  30  31  62  36  34  34  33  36  36  37  39  42  38 \n 39  38  37  38  38  40  39  39  38  35  34  36  37  41  43  43 \n 39  35  29  23  18  17  19  28  21  17  26  28  20  19  23  30 \n 35  37  38  37  33  30  29  28  29  28  27  27  27  25  25  25 \n 25  25  27  26  25  27  27  25  25  26  24  26  29  30  30  28 \n 28  27  28  28  27  28  26  27  27  27  29  29  30  31  29  29 \n 29  29  27  27  27  28  25  26  26  29  40  88  79  37  34  33 \n 33  34  33  35  35  33  32  30  29  31  29  26  22  26  51  95 \n100  57  44  52  61  63  81 122 143 138 133 154 199 229 246 137 \n 25  25  30  37  30  21  24  40  45  39  40  42  45  49  49  48 \n 45  42  40  40  40  40  40  37  36  37  37  35  36  39  38  39 \n 37  34  34  32  31  31  29  28  29  29  28  27  29  29  29  32 \n 37  40  39  38  37  34  33  35  33  34  35  35  41  43  45  46 \n 51  66 106 165 142  67  51  59  74 104 126 120 118 118 123 120 \n144 107 210 163  80  68  67  68  64  78  89  72  53  45  43  43 \n 38  17  18  25  23  20  25  31  51  59  54  48  42  41  40  37 \n 35  35  42  57  34  26  28  31  26  28  31  37  42  49  47  43 \n 36  33  32  32  30  29  32  32  33  40  46  49  50  50  49  50 \n 46  38  36  33  35  35  36  36  34  36  33  34  34  36  40  42 \n 45  51  54  55  62  71  82  88  98 102 112 123 137 152 173 191 \n206 215 221 221 220 215 202 183 125  76  50  47  45  43  40  38 \n 43  28  18  20  27  24  26  30  35  38  42  43  43  44  43  42 \n 41  39  40  40  39  39  37  38  37  36  37  38  39  37  37  38 \n 37  34  34  35  35  36  35  35  35  36  36  37  52 100 125 104 \n 86  82  76  76  76  75  73  74  79  79  79  78  78  83  82  83 \n 82  87  93  95  97 100 102 108 117 123 126 131 139 142 144 150 \n153 155 162 159 152 146 140 133 124 115 105  94  79  72  60  54 \n 49  46  45  45  40  40  42  41  46  39  29  36  42  33  34  36 \n 45  51  54  53  51  48  44  42  42  38  38  38  39  39  38  38 \n 37  36  36  36  35  34  32  32  34  33  31  32  32  33  32  32 \n 34  31  31  33  34  35  37  37  37  35  34  35  37  35  36  37 \n 37  36  37  37  36  37  36  35  37  39  40  42  45  45  45  42 \n 33  25  27  32  30  64  40  36  36  36  36  35  35  39  42  39 \n 39  38  38  39  38  39  40  41  40  39  37  38  39  41  45  43 \n 41  37  31  25  20  18  19  30  21  18  29  28  17  18  24  31 \n 37  37  39  35  32  32  29  31  29  27  28  29  30  27  25  26 \n 26  27  28  29  28  28  27  27  26  25  26  28  29  29  30  30 \n 27  27  26  26  26  28  26  26  26  27  28  28  29  31  30  30 \n 28  27  26  27  26  25  24  26  24  26  32  51 105  56  33  34 \n 32  34  35  34  34  32  30  30  30  29  28  27  24  24  36  73 \n102  85  53  64  97 139 175 160 149 171 217 246 254 253 251 155 \n 26  27  30  36  32  20  23  31  53  45  39  39  40  45  45  44 \n 43  42  42  41  35  32  31  29  31  32  33  33  34  34  35  34 \n 32  33  34  31  30  30  29  31  30  28  27  27  28  28  29  27 \n 34  36  35  33  30  29  29  28  30  31  28  31  32  34  37  40 \n 43  42  45  57 123 104  72  76  78  75  94 105 102 104  90  77 \n 77 110 219 230 122  82  80  89 122 164 134  83  53  42  41  42 \n 34  17  17  25  23  20  24  31  51  59  54  47  41  39  38  38 \n 35  35  42  29  18  22  26  27  20  24  27  31  36  42  48  51 \n 45  39  33  33  33  33  33  32  35  39  43  45  45  45  45  46 \n 45  43  37  36  34  35  37  35  34  36  38  38  37  39  37  39 \n 40  42  42  44  44  47  45  43  44  44  42  41  42  43  47  52 \n 61  74  90 110 148 186 228 241 232 207 139  72  45  44  41  41 \n 43  27  17  21  27  24  25  30  36  38  43  43  44  43  44  43 \n 40  40  42  41  39  39  39  39  39  38  36  36  38  38  38  37 \n 39  36  36  37  36  36  34  34  34  34  36  41  62  53  36  37 \n 39  38  34  33  36  36  37  37  36  35  37  37  38  38  37  39 \n 41  42  42  41  41  42  42  42  38  33  34  32  34  38  37  36 \n 41  44  50  57  67  74  85  97 112 123 137 150 159 166 172 175 \n174 175 171 165 152 139 124 114 103  89  82  77  73  61  55  57 \n 58  63  63  61  58  53  51  45  43  41  39  39  39  39  38  38 \n 36  36  35  36  34  34  34  32  34  33  32  32  32  33  32  34 \n 34  32  33  34  34  35  38  37  37  35  33  36  37  36  36  37 \n 38  37  37  37  37  36  35  35  37  38  40  41  44  46  45  42 \n 34  28  27  34  32  57  53  37  38  39  37  36  37  40  42  40 \n 39  39  40  40  41  43  43  43  42  42  42  42  42  42  47  45 \n 43  38  32  27  22  19  21  29  20  21  31  27  19  18  24  32 \n 38  39  39  37  34  30  28  30  30  30  29  28  29  28  28  28 \n 28  29  29  31  32  31  30  29  27  27  28  28  29  28  28  30 \n 26  28  26  25  28  27  27  25  27  29  28  27  28  31  29  28 \n 27  27  28  28  26  27  24  24  24  26  29  35  95  88  35  36 \n 34  34  36  34  35  35  31  30  29  29  30  30  26  24  29  51 \n101 101 131 159 170 165 151 172 215 242 252 254 254 253 253 183 \n 30  29  30  36  32  23  21  28  50  52  42  40  41  46  48  44 \n 41  39  42  42  35  30  30  29  30  30  30  31  31  32  34  35 \n 32  33  34  34  32  33  30  29  31  28  27  28  29  29  30  29 \n 32  33  33  32  30  29  29  29  27  27  27  27  29  30  33  35 \n 40  39  40  40  63 107  89  67  61  55  51  64  95 149 167 124 \n105 183 251 253 219 182 182 204 234 247 203  99  67  51  42  43 \n 35  16  18  26  24  21  26  33  51  59  54  47  40  40  38  38 \n 35  37  36  21  18  22  27  25  19  20  30  33  34  36  43  48 \n 47  43  39  37  35  35  36  34  37  37  37  36  36  35  36  36 \n 40  39  34  31  29  28  28  28  29  29  29  29  30  31  29  30 \n 33  33  35  36  40  41  40  38  40  37  37  34  34  35  34  34 \n 35  37  38  41  48  60  89 109 114 140 185 174  71  39  39  37 \n 44  26  18  20  27  25  24  31  36  38  44  44  42  43  42  42 \n 42  41  42  41  38  40  39  40  39  39  39  39  39  39  37  36 \n 38  38  37  37  37  37  35  34  33  35  38  42  44  38  39  39 \n 37  36  34  30  33  34  35  37  36  34  34  33  34  34  35  36 \n 38  39  41  41  40  39  39  38  36  36  36  37  33  36  36  35 \n 36  39  35  34  31  38  38  38  36  38  42  47  54  60  67  74 \n 86  96 115 129 154 173 185 194 202 206 208 207 202 195 182 170 \n153 142 123 108  82  65  54  51  46  42  39  39  38  39  37  35 \n 37  37  36  36  34  34  35  34  34  32  32  32  32  32  33  34 \n 34  31  32  34  35  35  39  39  37  35  34  36  37  35  38  39 \n 38  39  37  37  37  36  37  37  36  37  39  42  44  46  48  47 \n 38  32  29  38  39  52  64  43  41  42  40  39  43  44  43  41 \n 42  39  42  42  40  43  46  46  46  47  48  48  46  46  50  47 \n 46  41  35  30  25  21  25  33  21  23  32  26  22  22  28  35 \n 41  41  40  38  35  32  31  31  32  30  30  31  29  28  29  27 \n 30  30  31  33  36  35  33  31  30  29  29  29  29  28  28  30 \n 27  27  27  27  28  26  27  27  26  27  27  28  28  29  28  26 \n 26  27  30  29  27  25  24  24  26  26  25  30  62 112  53  37 \n 35  34  33  33  35  35  34  33  33  32  31  30  28  26  26  34 \n 89 110 135 156 172 189 232 251 254 254 252 254 254 254 253 215 \n 41  29  29  34  33  22  21  24  40  58  47  42  43  45  46  44 \n 39  36  42  43  39  33  30  30  30  31  29  32  32  31  34  36 \n 33  34  43  50  53  40  42  32  30  28  30  31  31  30  30  31 \n 32  33  32  32  33  33  30  27  27  26  26  27  27  28  33  34 \n 35  38  37  40  42  55  94  68  76  93 110 118 132 176 234 244 \n202 215 254 254 253 252 252 253 252 247 182  91  76  71  52  47 \n 36  17  19  25  21  19  25  33  50  58  53  46  39  39  39  37 \n 35  40  34  17  17  25  30  21  18  21  37  38  35  34  37  44 \n 48  45  40  40  35  33  31  29  29  29  28  24  25  26  27  28 \n 32  34  31  29  27  27  26  28  25  27  25  26  27  25  26  26 \n 27  28  30  34  38  35  32  32  31  28  29  29  30  30  31  32 \n 32  35  35  37  39  39  40  43  40  38  50  99 149  71  33  35 \n 41  27  18  21  27  24  26  31  35  40  43  42  44  43  43  42 \n 41  39  40  41  40  40  39  38  39  39  38  38  39  37  37  36 \n 38  36  36  36  36  35  35  34  36  36  38  36  30  34  36  37 \n 34  35  35  30  35  36  35  37  37  37  34  34  34  34  35  36 \n 37  38  40  40  39  38  36  35  35  34  35  37  35  36  37  37 \n 37  40  38  37  37  35  37  37  37  38  37  37  38  40  41  41 \n 42  43  39  36  37  44  49  54  67  83 108 128 155 182 210 224 \n240 249 254 248 229 193 122  75  47  44  42  39  38  39  37  37 \n 35  35  35  34  36  34  33  34  33  32  34  34  32  33  33  35 \n 35  34  34  34  35  37  38  39  37  35  34  36  38  39  39  39 \n 38  37  37  38  39  37  35  35  36  37  36  43  46  50  55  62 \n 72  77  91  99 104 108 113 104 106 107 108 109 104 106 105 103 \n105 103 101  97  97  96  94  92  93  92  85  84  83  81  78  77 \n 71  70  60  53  46  43  48  46  34  34  39  31  25  26  32  41 \n 45  45  43  43  40  36  36  35  36  36  35  36  32  33  33  34 \n 36  37  36  38  38  37  37  36  34  34  31  29  29  31  26  27 \n 27  28  27  27  27  28  28  27  27  27  26  27  28  29  29  28 \n 29  28  29  28  26  26  25  24  25  26  25  27  43  99  82  38 \n 34  33  33  34  31  34  35  33  33  32  31  30  29  27  27  31 \n 68 108 124 196 237 249 254 254 254 255 254 253 253 251 250 223 \n 49  29  26  32  33  23  21  21  35  52  54  45  41  45  49  46 \n 37  35  38  44  44  44  35  37  35  35  36  39  38  36  36  40 \n 43  41  46  57  53  48  41  35  31  30  31  32  32  32  30  30 \n 32  32  30  30  33  35  33  29  27  26  26  26  26  28  31  35 \n 39  39  34  37  41  43  73 106 112 123 146 121 128 135 163 196 \n229 226 254 253 252 252 250 251 250 220 136  90  65  73  70  61 \n 34  17  17  24  22  22  26  34  50  59  54  45  40  40  40  38 \n 36  39  36  18  17  24  28  21  17  20  39  41  35  33  36  42 \n 45  44  39  41  36  32  30  26  26  26  26  24  24  25  27  30 \n 30  32  32  32  30  31  31  30  27  28  26  26  25  24  24  24 \n 24  27  31  32  33  30  28  28  28  26  27  27  26  26  27  28 \n 29  28  30  32  37  37  38  41  40  36  36  35  79 115  41  37 \n 43  25  18  21  27  24  27  32  36  40  43  43  42  42  43  42 \n 41  42  40  39  40  39  40  38  38  39  40  40  40  39  38  37 \n 35  37  37  38  35  35  36  36  36  37  38  29  26  31  35  36 \n 33  34  35  31  34  34  35  36  38  37  35  35  34  34  34  33 \n 34  35  38  37  35  35  36  34  35  36  36  35  36  35  34  33 \n 37  38  35  31  31  31  31  31  33  32  33  33  34  36  37  36 \n 38  40  39  40  39  41  38  37  34  34  36  42  49  57  71  88 \n112 141 186 219 243 243 218 183  99  45  44  42  38  40  37  38 \n 37  35  35  35  36  35  34  34  34  35  36  36  35  35  34  35 \n 36  35  34  34  34  36  39  39  38  37  36  38  38  38  39  40 \n 38  38  37  38  37  35  34  35  36  37  39  44  53  81 132 156 \n164 168 169 166 164 159 157 153 154 157 156 152 149 146 146 147 \n150 149 150 149 150 154 152 149 154 155 156 157 157 155 155 155 \n157 158 159 159 156 155 155 149 138 132 125 119 107  99  94  88 \n 81  73  62  55  47  44  41  39  37  38  42  45  43  41  40  42 \n 43  44  42  43  45  46  42  43  40  37  34  33  32  30  28  26 \n 28  28  27  28  26  26  27  26  28  27  27  27  29  29  29  27 \n 27  29  27  30  29  26  24  24  26  27  26  24  30  62 111  53 \n 34  34  36  34  34  33  33  33  33  33  32  31  30  29  26  27 \n 43  92 115 201 254 254 254 254 252 251 251 250 247 247 250 238 \n 66  31  26  31  35  24  22  22  31  43  61  51  42  46  51  45 \n 39  36  38  46  54 125 138 123 108  96  85  79  74  70  65  65 \n 66  59  58  54  51  49  52  50  51  44  34  31  31  28  29  28 \n 29  30  30  30  31  36  35  30  27  27  27  27  26  28  31  34 \n 34  34  35  34  38  42  50 101 101 122 192 156 127 124 153 160 \n164 191 237 252 247 249 243 239 226 157  94 107  63  52  72  74 \n 34  17  17  23  23  22  27  36  51  59  54  47  41  41  39  37 \n 37  39  37  18  15  21  27  21  15  17  32  44  38  34  36  42 \n 44  41  37  38  38  34  31  26  25  26  26  27  27  28  27  28 \n 28  34  68  79  77  74  71  68  56  35  30  28  27  28  26  25 \n 26  27  30  30  29  27  26  26  25  25  25  26  25  23  23  24 \n 27  26  26  28  34  35  37  39  37  37  37  35  35  64  81  38 \n 41  25  17  22  26  25  27  33  37  40  44  45  45  43  43  42 \n 42  41  39  41  42  41  39  38  38  38  40  40  41  40  39  39 \n 36  36  37  37  36  37  37  37  37  37  37  25  24  28  33  35 \n 34  33  32  32  32  32  35  36  39  38  38  37  35  36  34  33 \n 32  32  32  34  33  33  33  33  33  34  34  34  34  32  32  35 \n 34  36  34  32  33  35  33  31  30  29  30  30  30  33  34  34 \n 36  38  38  37  36  33  33  33  31  34  35  36  37  39  40  41 \n 45  47  45  50  61  72  90 125 171 138  50  40  41  39  39  38 \n 37  36  36  36  37  36  33  35  34  33  37  36  35  34  34  34 \n 36  35  34  32  34  37  38  39  38  37  36  35  36  36  36  37 \n 36  36  36  36  36  35  37  36  37  39  43  57 115 136 113  90 \n 70  63  54  51  50  50  47  47  46  46  44  43  42  42  42  38 \n 35  38  37  37  37  37  35  35  36  33  36  38  39  39  37  41 \n 48  46  46  48  56  68  76  82  94 100 109 117 129 140 152 161 \n168 176 180 180 180 178 174 167 154 144 134 123 111 100  96  95 \n 91  85  82  79  72  68  65  60  55  50  44  41  34  34  31  29 \n 28  28  29  29  28  26  27  27  28  27  28  28  30  29  29  27 \n 28  29  28  29  29  27  25  25  25  27  27  26  28  41 105  81 \n 34  35  36  34  34  33  32  32  34  33  33  31  30  31  27  28 \n 33  71 106 149 251 254 249 248 247 248 250 250 249 247 250 246 \n 87  30  26  31  38  29  21  21  29  40  61  57  43  44  50  45 \n 40  38  37  42  50 130 170 169 166 166 161 161 157 155 151 150 \n143 138 133 131 127 128 123 123 129  97  32  32  29  26  28  27 \n 28  28  29  30  32  35  35  30  28  27  26  26  25  26  30  32 \n 33  32  34  34  35  38  43  74 108 132 244 240 160 112 186 200 \n162 144 189 242 241 240 211 195 165 105  83 104  92  47  86 128 \n 31  17  18  24  22  22  30  36  51  58  54  47  43  44  40  40 \n 39  40  37  20  15  21  29  22  17  19  28  41  42  36  36  41 \n 45  41  36  35  39  37  33  29  27  27  26  28  26  28  29  30 \n 31  30  98 128 132 125 134 136 123  46  31  30  29  30  30  31 \n 30  29  32  32  30  29  29  28  27  27  26  26  25  25  23  22 \n 25  27  26  30  34  35  35  35  35  38  40  37  34  35  77  58 \n 38  25  18  22  27  24  25  32  37  40  43  44  44  43  42  41 \n 42  42  41  42  40  39  40  40  41  39  40  40  40  39  39  37 \n 35  37  38  37  38  38  38  38  38  37  37  26  23  25  32  34 \n 33  30  30  33  34  33  34  35  38  38  38  36  35  35  33  33 \n 32  32  32  32  32  31  30  30  31  31  33  34  33  32  32  35 \n 35  36  35  35  35  34  34  33  34  32  31  32  31  32  33  34 \n 34  37  36  37  37  31  28  28  31  31  33  36  36  36  38  38 \n 39  40  43  43  42  40  39  44  75 126 113  44  39  39  38  38 \n 38  37  38  38  37  35  34  35  34  33  36  35  35  35  35  35 \n 34  35  36  35  36  38  38  40  39  39  37  36  36  38  35  37 \n 37  36  37  35  37  35  36  36  35  37  49  71  69  49  36  34 \n 33  31  33  33  35  35  34  36  36  34  35  37  35  35  37  37 \n 39  40  38  39  39  39  35  36  37  35  34  35  35  35  36  34 \n 34  33  34  33  34  35  32  33  34  34  39  39  40  44  49  53 \n 59  67  77  82  93 106 127 144 167 189 202 210 217 207 222 226 \n222 217 208 195 181 171 155 136 107  83  58  49  43  37  33  30 \n 28  28  27  26  26  26  24  24  26  27  25  26  28  29  27  26 \n 27  28  28  28  28  27  25  26  26  27  26  25  28  30  73 107 \n 46  35  35  35  33  33  32  32  34  32  32  31  30  30  28  25 \n 30  43  99 112 212 250 249 246 249 249 249 249 249 249 249 250 \n115  32  26  29  41  32  21  22  26  37  51  63  45  42  50  48 \n 39  37  37  38  42 106 170 159 155 164 167 168 165 166 167 168 \n168 167 167 166 165 164 163 162 167 143  31  32  29  29  29  28 \n 27  28  28  29  31  36  35  29  26  25  26  26  26  27  31  31 \n 30  29  29  33  34  34  41  47 103 111 226 252 211 117 166 239 \n189 155 149 216 190 190 187 183 140  98  93  93 124  69  61 141 \n 30  18  18  22  22  23  29  34  49  59  53  46  44  46  45  42 \n 40  40  37  20  15  21  28  23  18  18  25  35  48  40  35  41 \n 45  38  32  31  37  38  34  28  26  26  25  25  25  27  28  27 \n 31  27  99 131 126  93 141 141 139  59  31  30  30  31  31  32 \n 31  33  33  33  31  32  32  32  32  29  26  25  25  24  24  22 \n 25  24  26  30  33  32  29  30  32  37  37  39  37  34  50  84 \n 39  25  19  22  26  23  25  31  37  42  45  44  43  43  41  42 \n 41  40  42  42  40  40  39  38  38  39  40  39  40  40  41  39 \n 39  39  37  38  38  37  37  37  36  38  40  25  20  25  32  32 \n 29  28  29  33  35  34  33  34  37  38  36  35  34  33  33  32 \n 32  30  32  32  31  29  26  28  29  28  30  31  32  30  30  30 \n 34  33  36  37  38  37  33  32  33  32  32  31  31  31  32  32 \n 30  32  34  35  36  34  29  32  33  34  32  31  34  32  34  36 \n 38  38  39  40  40  38  37  39  38  50  98  92  38  38  38  37 \n 38  39  39  38  37  37  35  35  35  34  34  33  33  35  35  35 \n 36  35  35  35  36  38  40  41  37  36  35  36  35  37  36  37 \n 38  37  36  34  36  36  34  36  35  37  43  37  31  27  29  30 \n 28  28  27  30  33  34  32  32  30  31  32  34  33  31  34  35 \n 36  37  35  36  37  37  36  35  37  38  38  37  35  34  34  35 \n 34  35  35  35  36  35  33  34  33  36  37  37  36  36  36  39 \n 39  40  43  43  41  41  35  33  35  42  47  58  75  85 119 151 \n174 199 218 231 240 248 254 253 247 232 182 128  71  45  37  33 \n 29  29  28  27  26  27  24  24  27  28  27  27  28  27  28  28 \n 28  29  29  29  29  29  29  29  30  29  28  26  26  31  49 102 \n 71  37  38  36  36  34  33  33  34  33  33  32  33  32  29  27 \n 27  34  80 109 153 238 250 248 246 246 249 248 248 246 248 250 \n131  34  27  29  40  32  22  22  26  36  47  64  53  42  50  47 \n 38  37  36  40  45  82 169 148 149 163 168 168 168 169 164 158 \n158 161 162 167 165 165 165 160 163 156  45  30  29  29  28  27 \n 27  28  29  29  31  36  37  31  27  27  27  26  27  28  30  31 \n 27  27  27  29  31  31  39  42  85 108 201 251 230 128 149 217 \n195 164 173 198 175 180 182 167 131 101  97  99 150  89  61  97 \n 33  17  18  21  22  23  30  36  48  56  53  50  46  47  47  45 \n 42  40  38  20  15  20  29  23  18  16  22  32  47  43  35  41 \n 43  35  30  28  33  37  35  30  27  26  25  25  28  32  32  32 \n 34  31  96 141 140 107 120 141 141  75  33  32  31  32  32  32 \n 31  31  30  30  30  30  30  31  34  31  27  27  26  25  24  25 \n 25  24  26  30  32  29  27  28  29  33  34  38  35  34  35  82 \n 52  24  19  22  25  22  26  31  35  41  45  43  42  43  43  44 \n 42  40  41  42  41  41  41  41  40  40  38  40  40  41  41  39 \n 39  39  39  39  37  38  37  37  37  39  39  25  20  25  31  30 \n 29  26  29  34  37  35  33  34  35  38  36  35  35  35  35  31 \n 31  30  31  32  30  27  25  25  27  27  28  29  32  30  29  30 \n 31  31  34  33  34  34  32  32  33  33  32  31  31  32  32  33 \n 30  30  32  34  36  33  29  31  36  34  32  30  32  35  33  33 \n 35  37  37  38  38  38  38  35  38  38  51  93  52  37  39  39 \n 38  39  39  37  36  36  34  35  36  34  34  34  35  35  34  36 \n 38  35  35  36  37  38  40  41  38  37  36  36  36  37  37  36 \n 36  36  35  35  36  37  35  34  36  35  33  28  28  29  30  29 \n 28  28  29  30  32  34  33  34  32  31  33  32  35  34  33  32 \n 33  34  33  33  35  35  36  37  36  33  35  34  33  34  32  33 \n 32  33  34  33  34  33  31  31  31  32  33  32  34  33  34  35 \n 36  37  37  37  36  36  37  38  35  37  38  37  37  38  42  46 \n 53  66  79  96 109 129 166 194 220 229 221 208 173 105  41  37 \n 28  29  27  27  27  26  25  26  25  27  28  26  26  25  26  28 \n 30  29  28  27  27  30  29  29  31  31  29  28  27  29  36  77 \n 98  50  34  36  35  35  33  31  33  34  33  32  33  32  31  28 \n 26  29  56  98 118 192 250 249 248 251 249 251 249 248 247 248 \n155  37  27  28  37  35  22  21  23  33  46  57  58  44  46  49 \n 42  36  34  38  45  60 168 140 154 142 139 148 146 147 151 138 \n136 158 159 151 158 157 149 132 159 170  63  30  31  31  28  27 \n 29  29  29  29  30  35  35  30  29  28  27  26  27  28  30  31 \n 28  27  28  29  30  32  35  41  60 108 161 230 214 144 125 177 \n189 178 155 162 166 179 181 147 125 121  79 131 169 123  95  81 \n 32  19  18  23  21  23  31  37  50  58  55  52  49  48  46  45 \n 42  42  35  18  14  19  28  23  17  16  20  29  43  48  37  41 \n 40  34  31  29  31  35  34  30  26  26  25  30  98  92  78  67 \n 56  53  97 143 141 124 115 143 143  89  35  35  37  38  34  34 \n 33  33  33  31  30  28  28  29  37  35  28  27  26  25  24  25 \n 25  26  27  30  30  26  24  25  26  29  34  36  36  34  31  56 \n 75  20  18  22  25  23  28  30  35  42  45  44  43  43  41  41 \n 42  42  40  41  41  41  41  41  40  41  39  40  38  39  40  40 \n 39  38  38  39  38  38  37  37  37  38  38  24  21  24  31  30 \n 26  25  28  34  36  36  33  35  35  35  36  36  34  35  33  31 \n 31  31  30  30  30  27  27  26  28  27  30  30  32  32  30  30 \n 32  29  32  33  31  32  30  30  31  33  33  32  31  31  33  32 \n 34  32  32  31  31  30  29  31  34  33  29  30  32  34  32  32 \n 35  35  35  34  36  37  37  34  36  36  33  48  78  42  40  38 \n 37  37  37  37  37  36  36  37  36  35  35  34  36  35  35  36 \n 35  34  36  35  36  38  40  41  39  38  38  36  35  37  38  37 \n 37  35  37  36  35  35  34  34  36  35  26  25  29  30  30  26 \n 25  28  29  29  30  32  34  35  35  34  34  33  32  30  30  30 \n 30  29  31  30  30  31  32  31  32  31  33  31  31  33  32  32 \n 31  30  31  30  30  31  30  29  28  30  30  30  30  30  31  34 \n 35  34  33  34  33  35  35  35  35  35  36  37  36  38  40  40 \n 41  43  42  43  48  51  48  49  49  49  56  69 108 152 116  48 \n 27  27  26  27  27  27  26  26  25  25  26  26  27  27  27  27 \n 28  29  29  28  26  29  29  31  29  29  28  27  25  26  30  54 \n105  76  32  34  35  34  33  33  33  31  34  35  33  31  32  29 \n 27  27  43  77 111 138 235 248 248 249 249 248 249 248 248 249 \n175  42  26  26  36  36  24  21  22  30  45  53  60  47  47  52 \n 43  38  36  38  44  44 161 162 156 138 141 148 140 142 131 142 \n132 162 145 138 144 137 139 131 156 167  84  28  32  31  29  29 \n 29  29  29  30  30  33  34  32  29  28  28  26  26  27  28  30 \n 28  26  27  27  29  31  33  37  47  94 143 187 186 161 115 168 \n186 168 164 158 156 176 179 136 126 118  69 154 183 159 134 123 \n 29  18  17  23  21  23  30  36  50  58  57  53  50  48  46  46 \n 45  43  37  18  14  19  28  24  16  16  21  30  42  51  40  40 \n 42  35  30  27  28  34  35  30  27  26  27  26 159 170 165 162 \n153 146 146 156 151 140 137 143 142 111  67  64  59  56  52  46 \n 44  43  39  34  32  29  27  28  35  36  27  26  25  24  24  25 \n 25  26  27  29  29  26  24  26  25  28  32  33  34  33  33  39 \n 73  24  17  20  24  23  27  33  37  41  45  44  43  43  42  43 \n 43  43  40  40  40  40  41  41  39  39  38  39  40  40  41  40 \n 40  40  38  37  38  36  36  39  38  38  37  24  19  23  31  30 \n 26  26  29  32  36  36  35  35  35  34  37  36  34  35  34  31 \n 30  32  32  31  30  28  29  28  33  33  33  34  37  36  35  35 \n 35  34  36  39  34  33  32  33  33  33  34  36  33  33  31  32 \n 35  34  33  31  30  30  30  33  32  32  29  27  31  32  31  31 \n 32  33  34  33  35  35  35  34  36  36  33  34  70  47  38  39 \n 38  37  37  39  38  36  35  37  37  37  36  34  36  36  36  36 \n 36  36  36  36  37  39  40  41  41  39  38  36  36  37  37  36 \n 38  37  38  36  35  35  35  35  36  34  24  24  30  31  28  27 \n 26  27  28  30  31  32  34  35  35  35  34  33  31  29  29  29 \n 30  29  30  30  30  30  30  28  30  30  31  29  30  31  29  30 \n 32  31  31  31  31  32  31  30  28  30  31  32  31  29  30  32 \n 34  32  32  33  33  33  33  33  33  34  35  36  36  37  36  38 \n 39  40  42  42  45  44  46  45  45  45  42  41  40  56 115  90 \n 26  27  26  28  27  28  27  28  26  25  26  26  29  30  28  28 \n 29  29  28  27  26  30  29  31  30  28  28  27  26  26  28  36 \n 89 103  40  32  36  37  35  35  33  33  34  35  33  33  31  31 \n 27  26  29  50 105 114 182 245 246 246 245 242 249 246 247 246 \n198  52  27  25  35  37  26  21  23  28  43  49  61  52  48  53 \n 45  40  36  36  43  39 133 175 168 161 164 170 167 165 165 163 \n163 164 161 157 150 151 150 149 158 166 113  33  32  30  30  28 \n 28  30  31  30  30  32  34  33  30  30  29  28  27  28  30  31 \n 29  28  28  27  28  29  30  34  40  66 138 173 185 179 122 150 \n184 155 176 154 136 171 166 131 119 106  72 178 191 183 158 116 \n 29  20  18  23  23  24  31  36  50  58  57  55  52  50  48  48 \n 46  44  37  18  14  20  29  24  19  18  21  28  41  52  45  38 \n 38  35  31  29  29  33  33  29  27  27  27  21 145 172 168 168 \n170 173 174 173 173 171 172 173 173 172 172 169 166 167 164 162 \n159 160 115  36  30  29  28  28  33  35  29  26  24  24  23  24 \n 23  25  26  29  30  27  24  25  28  30  31  31  32  32  32  32 \n 69  40  20  21  25  23  28  34  40  42  46  45  43  41  40  42 \n 42  41  40  41  41  41  40  41  40  39  39  40  40  39  39  39 \n 39  39  38  39  40  38  36  37  37  37  37  22  17  22  30  29 \n 26  28  30  33  35  36  35  34  35  35  36  34  33  34  35  33 \n 32  32  31  31  31  28  75 111  95  86  76  65  59  59  60  57 \n 50  44  40  41  38  39  38  38  38  37  38  40  39  37  36  35 \n 34  33  33  32  31  30  31  30  31  28  28  26  30  30  29  30 \n 31  32  32  34  36  37  37  36  35  34  33  29  49  52  39  36 \n 37  37  38  38  36  38  37  36  36  35  34  35  36  36  36  36 \n 35  35  36  36  35  38  39  40  41  39  38  37  36  37  37  39 \n 38  37  35  37  35  35  36  36  37  32  21  22  29  32  27  26 \n 26  27  29  31  30  32  34  35  34  33  33  32  31  30  29  28 \n 31  31  31  30  29  27  26  26  28  28  28  30  31  30  29  29 \n 30  31  30  33  32  33  31  31  29  29  30  32  31  31  33  33 \n 32  32  33  32  32  31  30  32  33  33  34  33  34  35  35  35 \n 36  37  38  41  43  42  42  42  43  42  38  38  38  36  44  72 \n 26  27  27  28  28  28  28  28  26  25  26  26  28  29  29  29 \n 29  29  30  28  27  28  28  30  29  28  28  27  27  27  27  28 \n 70 100  69  35  36  35  35  33  33  34  32  33  35  35  32  32 \n 28  27  27  36  89 115 131 212 247 244 248 246 248 247 248 246 \n214  64  28  26  31  37  27  20  23  28  43  47  60  57  48  51 \n 47  39  36  35  41  37 113 175 170 170 172 172 170 168 170 167 \n171 171 171 170 166 167 166 167 166 169 131  38  33  31  29  29 \n 27  29  30  29  30  32  32  32  31  30  28  28  28  30  32  32 \n 30  30  30  29  28  27  30  32  36  45 122 166 183 178 140 141 \n182 152 175 138 129 151 169 142 115  94  77 173 192 189 191 144 \n 26  21  19  22  22  25  32  38  51  58  59  55  53  53  50  50 \n 48  47  37  20  14  20  30  25  17  17  20  27  38  51  48  40 \n 39  34  30  29  28  32  32  29  29  29  27  19 133 165 151 150 \n168 174 173 173 172 171 170 171 171 170 172 173 172 171 172 172 \n171 172 137  38  30  29  28  28  31  34  30  24  24  25  25  24 \n 26  26  25  27  28  27  24  26  27  30  31  30  30  30  30  32 \n 58  62  17  22  22  24  29  34  41  44  45  46  42  42  43  42 \n 41  39  39  40  41  41  39  39  39  40  41  40  40  39  40  38 \n 40  38  38  39  39  38  37  37  37  39  38  22  17  23  31  30 \n 26  28  31  32  35  37  35  35  35  36  35  35  32  32  35  34 \n 32  32  30  30  32  26  95 173 171 170 161 156 151 147 139 134 \n122 112 105  96  87  81  76  71  64  60  55  52  53  48  46  38 \n 36  34  34  34  32  32  32  30  31  28  27  26  28  30  29  32 \n 34  33  34  35  37  36  36  37  35  35  32  28  42  61  38  39 \n 36  37  39  40  38  39  37  36  37  36  35  36  37  37  36  36 \n 35  35  37  37  37  38  39  40  41  41  38  36  36  38  38  39 \n 37  38  36  36  37  38  37  35  39  34  20  22  29  32  26  24 \n 24  27  30  31  29  31  34  34  35  35  32  31  31  29  30  30 \n 31  31  32  30  26  26  25  25  27  28  30  32  31  30  29  29 \n 29  30  29  32  32  31  30  31  31  29  31  31  30  31  32  32 \n 33  33  34  33  33  32  30  31  34  34  34  33  33  34  35  33 \n 36  36  36  38  38  41  42  42  41  40  41  37  34  34  32  40 \n 29  28  26  27  26  27  27  27  27  28  26  26  27  28  29  29 \n 29  28  30  30  28  28  28  29  30  28  29  27  28  26  26  29 \n 48  86 100  47  34  37  37  33  32  33  33  34  34  34  33  32 \n 29  26  25  28  62 104 113 138 228 246 248 248 245 248 243 244 \n227  86  26  24  30  37  29  22  23  28  41  46  54  62  51  53 \n 47  38  35  37  41  44  86 173 172 168 168 170 164 152 165 170 \n171 170 170 169 168 166 166 166 166 166 152  50  33  31  29  30 \n 30  29  29  29  30  31  33  34  30  29  27  27  29  29  30  31 \n 29  29  30  30  29  30  30  31  34  38  92 149 184 183 159 130 \n179 156 162 133 120 124 187 152 104  81  83 170 206 203 203 163 \n 21  23  20  22  21  26  32  38  52  60  59  55  54  53  48  48 \n 46  45  38  19  15  20  28  25  18  18  21  27  35  45  51  43 \n 40  34  31  32  30  31  31  30  29  28  28  20 118 168 141 157 \n155 160 166 168 167 168 163 141 148 161 171 172 172 172 170 162 \n162 165 147  41  31  31  28  26  30  33  28  24  25  25  24  23 \n 25  26  26  28  28  26  25  27  26  26  28  30  28  29  29  31 \n 41  78  19  21  23  23  30  38  42  42  45  45  43  41  41  43 \n 42  41  40  41  40  41  41  40  39  41  42  41  39  40  40  38 \n 39  39  39  38  39  37  38  38  37  40  37  24  21  26  33  31 \n 27  29  29  29  34  38  35  36  36  37  35  33  31  32  32  32 \n 32  32  32  30  31  28  87 171 171 173 173 173 172 174 175 173 \n173 172 173 173 175 172 171 171 171 167 164 164 160 162 119  42 \n 35  33  33  34  30  29  29  29  29  30  28  29  29  31  31  35 \n 37  35  35  35  36  36  35  36  35  35  34  30  33  57  43  38 \n 37  36  38  39  37  37  37  38  38  37  38  37  36  37  36  36 \n 36  36  37  36  38  39  39  39  41  41  38  38  38  37  37  39 \n 38  38  38  36  36  36  37  36  37  31  23  23  29  29  25  23 \n 24  27  29  30  29  31  34  35  36  35  32  32  32  31  31  31 \n 31  31  30  30  29  29  26  26  26  29  33  33  33  32  33  30 \n 30  30  29  30  30  30  29  31  31  30  30  29  29  30  29  29 \n 30  30  32  32  32  31  31  30  30  32  33  33  33  32  34  33 \n 34  34  37  38  39  41  41  42  42  42  40  37  35  33  30  29 \n 29  27  27  28  27  28  26  26  26  27  27  27  25  26  29  29 \n 29  28  28  29  27  29  29  30  31  29  30  27  28  27  25  29 \n 37  73 105  69  30  33  34  33  33  33  33  33  35  35  34  32 \n 29  27  25  24  46  87 112 120 161 225 248 244 242 247 246 246 \n230  92  27  23  29  38  29  22  23  29  41  48  51  62  54  52 \n 49  41  37  38  41  44  71 166 165 149 156 156 161 125 167 162 \n161 162 164 164 164 167 132 143 133 161 163  62  32  32  31  30 \n 29  29  29  30  30  31  35  37  32  30  27  27  27  27  29  31 \n 30  27  27  27  27  29  29  29  35  39  69 129 207 233 201 129 \n184 172 149 134 119 118 180 154  97  88  93 166 240 243 245 201 \n 27  24  20  22  22  26  34  38  53  62  59  55  54  54  48  47 \n 47  44  38  17  13  20  29  26  18  17  21  26  34  43  51  43 \n 41  34  30  31  31  30  31  31  27  28  29  22 106 171 147 160 \n138 142 153 149 149 149 149 137 136 161 163 156 160 164 158 143 \n147 165 155  44  31  29  28  27  30  33  29  27  25  25  24  24 \n 23  25  27  28  29  27  25  25  26  28  28  29  29  28  30  31 \n 33  72  31  21  22  22  31  38  42  43  43  45  43  43  41  43 \n 43  42  41  41  40  40  42  39  38  39  43  41  40  40  40  39 \n 41  41  39  38  37  37  38  39  38  39  33  22  21  27  33  31 \n 26  28  32  31  32  36  37  37  36  37  35  33  32  32  31  33 \n 33  32  32  31  33  28  81 173 155 165 149 172 173 175 174 175 \n174 172 172 174 173 173 172 173 174 173 175 173 173 175 139  46 \n 35  33  35  36  31  30  30  29  30  29  30  30  30  30  32  34 \n 37  35  34  35  35  36  36  36  35  35  34  33  33  53  53  35 \n 37  38  37  37  38  38  37  37  38  36  38  36  36  36  35  37 \n 37  37  38  38  39  40  41  41  41  41  39  38  36  36  37  35 \n 37  38  38  36  35  36  35  36  39  31  21  22  30  28  23  23 \n 25  28  29  29  31  33  36  36  35  34  33  33  32  30  30  30 \n 30  30  30  30  29  29  28  30  30  33  34  35  35  36  35  34 \n 32  32  32  31  31  32  32  31  31  31  31  29  31  30  29  30 \n 32  30  32  32  32  31  31  30  29  29  32  33  32  32  34  34 \n 35  36  37  36  38  40  41  41  41  42  40  36  34  34  31  28 \n 29  29  29  27  27  27  27  26  26  27  27  26  26  26  28  29 \n 28  27  27  28  28  30  30  32  31  30  30  27  27  27  24  26 \n 29  50  95  97  39  30  33  34  34  35  36  35  36  35  36  34 \n 33  30  24  22  34  63 116 116 121 133 197 230 242 245 244 246 \n234  98  24  21  25  37  32  22  23  27  40  48  50  60  57  52 \n 51  43  36  39  40  44  53 154 170 164 154 151 162 143 172 145 \n148 143 145 145 147 165 137 153 114 162 166  87  28  32  30  30 \n 28  29  30  32  32  33  37  38  34  32  29  29  28  28  28  30 \n 30  27  30  27  26  28  29  27  33  37  48 102 188 248 234 148 \n167 162 156 137 121 112 143 153  94 107  88 149 252 254 254 210 \n 28  24  19  22  21  27  34  38  52  60  59  55  52  49  47  46 \n 43  43  37  19  14  19  30  26  18  18  21  27  33  39  49  44 \n 40  33  28  30  30  30  33  31  30  30  29  25  92 175 170 161 \n141 149 162 152 148 149 149 149 143 163 149 141 148 145 142 149 \n143 166 161  51  32  30  28  29  29  32  30  26  25  26  25  24 \n 23  24  28  30  31  28  27  26  25  27  27  27  27  25  29  30 \n 31  49  58  22  21  22  31  38  42  43  45  46  42  42  43  42 \n 40  41  40  41  39  40  40  40  40  40  42  41  39  40  40  40 \n 39  40  40  40  38  37  38  38  37  39  33  19  21  27  33  31 \n 28  28  30  31  32  35  37  35  37  38  36  32  33  32  31  33 \n 33  31  30  31  32  29  75 177 139 156 157 161 167 170 171 172 \n171 171 148 147 168 168 174 174 175 174 172 162 167 170 145  68 \n 35  34  33  35  32  32  32  29  29  29  31  31  31  30  32  32 \n 35  34  34  35  36  36  38  38  35  35  36  35  33  40  67  37 \n 36  36  36  37  38  37  37  35  36  36  35  35  35  36  36  38 \n 38  37  38  39  38  39  41  41  39  39  39  38  36  36  37  37 \n 38  37  36  37  36  36  36  37  40  30  21  23  32  29  23  23 \n 25  29  31  31  31  31  34  35  33  33  32  32  34  31  29  29 \n 28  30  29  27  27  26  59  80  77  72  62  60  53  48  45  43 \n 40  42  39  38  37  39  36  38  37  37  38  35  35  35  36  35 \n 36  31  32  31  29  31  31  32  31  29  30  31  34  34  32  32 \n 33  35  37  38  39  39  39  41  41  42  39  37  35  35  33  28 \n 30  30  29  28  28  28  28  27  27  27  27  27  26  28  29  29 \n 27  28  29  31  30  31  31  32  31  31  29  28  27  27  25  25 \n 28  37  79 101  64  32  34  35  35  38  39  37  36  34  32  31 \n 30  29  25  21  29  48 108 116 115 118 131 157 195 211 214 213 \n208  86  24  19  24  36  32  21  22  28  42  50  49  60  60  54 \n 51  43  36  37  40  43  46 144 173 173 174 172 170 168 171 168 \n166 165 164 165 163 169 161 159 144 164 171 108  28  32  32  30 \n 28  29  31  32  33  36  39  40  34  32  32  31  31  31  30  30 \n 32  29  30  28  26  28  28  29  30  35  43  82 161 243 246 173 \n147 168 159 171 157 102 145 152 114 175  84 114 236 254 253 207 \n 28  25  21  23  21  26  34  37  51  59  57  54  52  50  45  44 \n 42  39  37  21  14  18  28  25  18  18  22  28  36  37  47  45 \n 39  32  29  30  31  31  32  30  29  30  30  27  78 174 174 171 \n168 169 174 174 172 171 170 168 164 167 166 165 162 161 162 161 \n161 163 164  62  33  29  27  28  29  32  31  27  26  26  25  25 \n 23  25  29  33  32  28  27  26  25  27  28  28  28  26  28  27 \n 31  37  68  26  21  23  30  36  43  43  45  46  43  40  41  42 \n 42  42  41  41  40  41  39  38  39  38  40  41  39  40  41  41 \n 38  39  39  40  39  38  38  39  38  40  33  18  22  28  31  29 \n 27  27  30  32  33  35  35  36  36  37  36  33  32  33  32  32 \n 34  32  33  33  33  35  70 175 143 158 148 144 143 156 151 148 \n159 158 135 127 165 168 164 162 169 171 162 137 162 169 152  69 \n 37  35  34  35  34  32  31  29  30  30  32  31  31  32  32  32 \n 36  36  34  34  37  37  37  37  36  34  35  34  33  34  68  41 \n 36  36  38  38  36  38  39  36  37  38  36  35  35  37  37  38 \n 38  38  38  39  39  40  40  40  40  41  40  39  36  37  37  37 \n 38  37  37  37  37  34  36  37  38  28  20  24  32  29  22  22 \n 24  28  31  33  31  30  32  34  34  33  32  30  35  33  31  30 \n 29  29  30  30  28  26  97 167 161 157 154 149 140 132 124 114 \n108 101  94  91  86  81  79  72  64  67  62  59  55  55  51  47 \n 44  34  30  31  30  30  30  30  30  29  30  31  34  34  33  33 \n 35  35  36  39  42  40  40  41  41  42  41  39  36  36  34  29 \n 32  32  29  28  28  29  29  27  26  28  27  28  28  28  28  30 \n 30  30  30  31  30  32  32  33  33  31  30  29  26  26  25  24 \n 26  32  59  92  91  45  38  37  37  39  38  38  37  34  32  30 \n 32  31  28  27  29  35  77 115 112 115 121 125 138 152 160 159 \n151  77  22  19  22  34  32  23  22  27  42  52  50  57  59  55 \n 52  44  39  37  40  41  41 114 176 172 171 172 173 173 172 171 \n172 173 172 172 173 172 169 172 171 169 173 132  30  33  32  29 \n 31  31  32  32  34  35  36  41  37  32  32  30  32  30  33  34 \n 33  32  29  30  27  28  28  30  31  31  38  57 128 219 251 205 \n125 172 152 191 202 103 147 146 133 231 106  80 197 253 252 199 \n 25  25  19  22  23  26  34  37  50  55  57  55  50  46  44  44 \n 40  40  38  19  14  19  27  24  18  18  22  28  35  37  45  47 \n 40  33  31  30  31  31  30  31  30  30  30  27  67 170 173 173 \n172 174 174 175 175 174 177 173 173 173 174 174 175 175 174 173 \n171 173 171  68  32  29  26  27  30  32  31  27  26  26  26  26 \n 25  25  28  31  30  27  26  26  24  25  27  30  31  29  25  28 \n 33  31  66  39  21  25  30  34  41  43  45  46  45  41  40  41 \n 42  42  41  39  40  41  40  41  40  40  40  40  40  40  41  40 \n 39  40  40  40  39  39  39  38  39  41  32  19  23  30  31  29 \n 26  27  30  32  33  36  38  37  36  40  35  34  32  33  33  33 \n 33  32  33  34  33  33  63 170 166 168 143 144 155 161 148 148 \n151 141 146 131 167 157 144 143 154 145 144 134 157 168 152  53 \n 39  34  33  33  33  32  32  31  31  32  34  33  32  32  31  32 \n 36  37  34  33  35  34  36  36  35  35  34  35  33  31  57  46 \n 37  36  37  37  36  37  39  38  38  38  37  38  37  39  38  39 \n 39  38  39  40  40  40  39  39  40  40  38  39  37  35  37  38 \n 39  36  37  37  37  35  37  37  38  27  20  23  30  27  22  22 \n 25  29  32  31  31  31  32  33  35  33  31  31  33  31  31  30 \n 29  28  31  31  30  29  97 170 171 172 173 175 175 175 174 175 \n173 175 177 172 173 173 170 172 171 168 168 165 163 160 161 163 \n 99  35  31  29  29  30  27  28  30  30  30  30  33  33  34  35 \n 35  36  35  38  40  43  40  39  41  42  41  40  38  37  35  31 \n 31  31  28  26  28  30  30  28  28  30  29  30  28  29  28  29 \n 30  31  31  30  32  31  31  33  34  31  31  29  28  27  26  24 \n 26  30  44  82 101  64  41  36  36  36  39  39  38  36  35  35 \n 35  35  37  39  37  36  52  99 112 114 119 119 124 126 128 125 \n122  77  21  20  21  32  33  24  24  26  44  53  49  57  61  55 \n 54  46  40  38  39  41  38  95 176 173 173 172 174 174 171 171 \n173 172 172 172 172 173 171 170 172 169 172 152  29  32  31  31 \n 32  32  31  32  34  35  36  40  36  32  31  31  33  32  34  34 \n 34  32  29  29  28  29  30  30  31  31  37  42  96 163 220 201 \n135 182 144 192 213 116 155 142 146 243 146 100 175 232 219 152 \n 20  24  20  23  24  26  33  38  49  55  58  55  50  44  44  44 \n 42  42  37  19  15  18  27  24  19  18  22  28  34  37  44  46 \n 41  33  30  31  31  30  30  31  28  29  28  29  58 167 170 167 \n170 173 174 163 152 169 176 175 175 174 173 175 175 175 174 173 \n175 172 172  74  30  30  28  28  28  31  31  28  26  27  27  27 \n 27  26  29  32  32  29  28  27  26  26  27  31  32  32  28  30 \n 33  31  58  52  21  24  30  34  41  44  45  47  46  42  41  41 \n 42  42  41  39  39  41  41  43  40  41  40  39  42  41  42  40 \n 40  40  40  39  37  39  40  40  40  40  30  18  23  30  32  29 \n 26  27  32  32  33  35  38  37  36  37  36  35  35  35  34  34 \n 33  31  33  31  32  32  55 165 176 176 162 162 170 175 171 170 \n169 165 160 156 165 163 163 159 156 154 157 147 163 161 158  52 \n 41  37  33  34  34  31  31  31  31  31  32  33  32  32  31  30 \n 35  36  35  34  35  34  35  35  34  34  35  35  32  33  49  49 \n 38  38  38  37  37  38  38  38  38  37  37  38  38  37  37  37 \n 39  39  39  39  40  39  38  39  41  41  39  39  38  36  36  38 \n 38  37  36  37  36  37  36  35  38  24  20  23  30  26  22  23 \n 25  31  33  31  31  30  32  34  33  32  32  30  31  31  30  29 \n 28  27  30  30  30  28  95 169 164 165 159 176 175 175 173 174 \n174 175 176 174 174 174 175 175 175 175 175 175 176 174 173 176 \n109  36  33  30  28  29  30  30  31  31  30  32  32  32  32  34 \n 34  37  37  39  42  43  42  40  40  42  41  40  39  37  34  30 \n 32  30  31  29  30  30  31  29  28  30  31  30  30  29  30  30 \n 29  29  29  31  33  31  31  33  34  33  31  30  30  28  25  24 \n 26  27  36  65  98  93  38  32  31  31  31  32  34  33  32  36 \n 37  42  47  51  47  42  40  63 118 118 117 117 117 120 122 117 \n114  83  23  19  18  29  35  24  22  24  41  55  52  54  60  55 \n 53  45  40  39  40  40  40  59 129 133 147 152 160 165 166 168 \n168 170 170 171 173 170 170 170 169 170 171 164  44  33  31  30 \n 32  32  33  35  34  34  37  39  38  34  32  31  33  34  35  35 \n 36  33  29  29  30  29  30  31  31  31  33  39  65 124 149 171 \n164 187 147 167 171 142 170 161 169 206 193 190 191 185 175 117 \n 26  24  23  28  32  28  31  35  46  53  56  54  49  47  44  42 \n 42  41  36  19  12  17  26  25  18  19  22  28  36  37  42  45 \n 39  33  31  31  30  29  30  31  29  28  29  30  48 162 170 151 \n151 164 155 172 122 165 160 162 165 165 166 168 171 164 146 151 \n143 170 174  87  29  29  28  28  32  32  33  29  27  27  27  26 \n 28  29  30  33  32  30  28  26  27  26  28  31  33  32  28  28 \n 32  31  45  71  18  25  28  32  37  44  45  47  45  42  41  42 \n 42  42  43  40  40  40  40  42  41  41  39  39  40  42  39  39 \n 41  42  39  39  40  40  41  41  37  39  27  18  21  30  30  26 \n 25  29  32  31  33  35  39  40  38  36  34  35  34  34  33  33 \n 32  31  30  30  31  33  51 161 176 177 176 176 178 176 176 177 \n176 176 173 171 171 173 176 177 177 176 176 176 175 174 160  57 \n 40  35  34  35  32  31  32  31  30  29  32  29  32  31  32  32 \n 32  36  36  34  32  32  34  34  35  34  33  31  31  31  45  60 \n 36  39  40  39  40  39  38  36  37  35  37  37  37  37  37  37 \n 37  38  36  38  38  38  39  40  42  42  41  40  37  37  36  36 \n 37  37  38  38  38  37  38  39  36  23  20  27  30  27  20  21 \n 25  31  36  34  29  30  33  35  34  32  30  29  30  32  30  28 \n 29  28  28  27  31  28  92 175 131 158 146 168 173 175 176 173 \n175 175 169 158 161 168 173 174 175 175 174 174 168 167 167 175 \n115  39  35  32  30  30  29  31  32  30  31  31  30  32  33  34 \n 36  36  37  41  42  42  40  41  41  40  41  40  39  37  35  33 \n 35  34  34  32  31  31  32  30  30  32  30  30  30  29  29  31 \n 29  31  32  33  35  33  33  36  35  33  33  31  30  29  26  26 \n 28  27  32  47  92 104  61  32  31  30  30  31  32  31  31  34 \n 39  41  47  50  48  43  39  45 110 128 118 118 118 119 121 116 \n113  91  24  19  17  27  35  25  22  24  40  58  53  52  59  56 \n 53  47  42  39  41  41  42  39  40  45  54  57  75  85  86  96 \n108 118 126 129 135 138 143 146 148 149 149 149  51  32  32  31 \n 31  33  34  35  35  36  38  40  37  34  32  32  33  33  35  36 \n 36  33  31  31  30  29  30  31  31  31  32  35  49 107 140 147 \n170 187 187 196 199 196 197 195 187 178 170 166 151 140 138  96 \n 30  26  24  28  34  29  30  33  42  52  56  55  49  48  45  43 \n 43  42  37  19  13  17  26  23  19  19  23  28  36  38  41  46 \n 39  33  30  31  32  29  29  31  32  31  29  30  42 157 174 166 \n159 157 154 171 143 174 148 151 147 147 155 152 160 169 128 128 \n123 166 176  98  31  31  31  29  31  31  32  30  29  29  28  26 \n 28  29  30  32  31  30  28  27  27  28  30  30  31  33  30  27 \n 28  32  38  76  26  26  29  32  40  45  45  44  44  42  40  42 \n 43  43  42  40  41  40  40  42  42  42  40  41  41  41  41  40 \n 40  40  41  40  38  38  40  39  38  40  27  18  21  29  30  26 \n 25  27  32  32  34  34  38  40  38  36  34  35  33  33  33  32 \n 33  33  30  31  32  33  49 160 175 176 177 177 177 177 171 174 \n178 179 176 174 174 177 176 178 177 178 178 177 176 178 164  56 \n 40  35  34  34  33  32  31  30  32  30  30  30  32  32  31  32 \n 32  35  35  32  34  33  36  35  33  34  33  32  33  33  38  69 \n 37  39  41  40  37  37  36  35  36  35  37  36  35  36  35  36 \n 36  36  34  36  36  38  37  37  39  41  41  40  39  38  38  38 \n 38  37  38  39  38  38  38  38  34  23  21  28  31  27  21  21 \n 24  31  39  36  30  30  34  35  35  32  30  29  30  32  30  29 \n 27  26  26  28  31  29  92 181 126 157 151 147 148 153 161 163 \n162 165 160 137 137 166 170 173 168 172 170 169 155 155 164 178 \n115  36  34  31  30  31  31  31  30  30  30  31  31  32  34  35 \n 36  36  37  39  41  41  39  40  41  41  42  41  39  37  34  33 \n 40  38  33  36  36  38  37  36  37  35  36  36  35  35  33  33 \n 35  34  35  36  38  39  37  38  36  33  33  31  30  29  28  28 \n 27  26  26  34  78  95  96  42  33  30  31  33  33  34  33  36 \n 41  44  47  50  46  40  36  38  64  95 123 125 125 121 121 121 \n122 106  29  18  17  24  33  26  23  24  38  59  54  52  60  58 \n 51  49  43  42  42  44  43  38  35  36  36  36  40  38  35  35 \n 39  44  38  35  34  32  34  31  33  33  34  38  39  37  36  37 \n 37  36  37  38  38  39  40  41  39  36  35  36  35  36  37  39 \n 38  36  35  33  30  30  29  31  31  30  32  34  38  78 137 138 \n141 149 163 165 158 152 147 140 139 141 142 142 137 132 132  94 \n 30  28  27  30  39  34  27  31  42  50  55  56  51  47  44  44 \n 44  44  36  19  14  18  27  23  19  19  22  29  37  38  42  47 \n 41  35  32  31  31  31  32  31  30  30  31  29  40 148 175 174 \n174 176 174 174 175 176 173 170 165 162 164 164 161 174 155 157 \n136 169 177 108  27  33  32  29  30  30  32  30  29  28  28  29 \n 28  30  30  32  31  30  28  26  27  29  27  29  31  31  30  29 \n 28  30  32  67  50  25  30  34  41  44  46  46  45  42  40  42 \n 43  42  42  38  38  38  38  39  41  41  41  40  41  41  39  40 \n 41  40  41  40  38  39  39  38  39  40  27  17  21  27  32  27 \n 22  24  30  32  35  35  37  39  37  36  35  36  35  35  35  33 \n 35  33  33  31  30  33  46 155 176 158 158 164 172 172 145 126 \n179 173 172 174 171 174 175 174 176 160 176 163 173 179 167  61 \n 41  36  35  34  35  33  30  31  32  32  32  31  30  32  32  32 \n 32  32  33  31  36  33  35  35  33  34  32  34  34  33  33  72 \n 41  38  35  35  35  35  34  34  35  35  36  37  36  36  36  36 \n 36  34  36  35  35  35  36  36  38  40  39  39  36  37  39  39 \n 40  40  39  39  40  40  39  38  34  21  20  26  30  25  20  21 \n 24  29  35  36  32  32  34  34  34  32  29  30  30  31  29  29 \n 29  27  27  27  30  28  88 175 150 166 137 147 151 160 147 142 \n151 126 157 145 131 168 160 149 143 154 152 133 157 146 168 178 \n116  36  34  30  30  31  30  30  31  30  31  31  31  32  34  36 \n 39  38  38  42  42  43  41  42  42  42  43  43  39  37  33  32 \n105  99  91  80  72  68  64  58  51  46  43  40  38  37  33  35 \n 39  40  41  42  44  45  40  41  40  36  34  33  31  29  28  28 \n 27  25  26  30  57  92 103  66  34  34  34  37  37  37  38  41 \n 44  47  49  49  42  38  40  46  63  73  99 128 134 132 131 129 \n112  92  35  21  16  22  33  28  22  24  39  61  54  50  59  59 \n 54  48  42  43  44  43  44  39  36  36  35  35  34  33  34  34 \n 33  33  34  35  34  37  36  33  30  32  31  30  34  38  39  39 \n 41  42  40  41  41  41  42  44  41  38  36  36  35  36  37  39 \n 40  37  38  34  32  32  32  33  32  32  34  34  36  57 127 141 \n137 134 136 135 133 131 137 138 141 142 145 140 135 126 118  86 \n 32  31  32  31  42  40  30  34  45  48  51  53  50  47  45  45 \n 44  43  35  19  15  17  27  24  18  19  21  28  39  40  42  48 \n 42  36  34  32  32  32  31  30  31  30  28  28  38 145 175 174 \n174 174 173 175 177 176 176 175 177 175 174 174 176 176 175 174 \n173 174 177 121  23  34  31  29  29  30  32  31  28  26  27  29 \n 29  29  29  30  31  31  31  28  27  28  28  30  29  30  31  29 \n 26  29  32  51  77  27  30  34  40  44  46  47  46  46  41  41 \n 42  42  41  39  40  41  40  39  42  42  42  41  43  41  41  41 \n 40  39  37  38  39  40  39  38  40  38  26  18  21  27  30  25 \n 23  25  31  33  36  35  37  39  37  36  34  35  34  33  32  33 \n 33  32  30  30  31  34  42 153 178 160 159 151 156 158 159 149 \n171 144 153 154 153 156 157 161 174 125 171 123 151 180 170  68 \n 42  34  37  34  34  33  31  32  32  31  32  32  32  32  35  33 \n 31  31  31  30  33  32  32  35  35  35  34  35  33  32  32  61 \n 52  36  35  34  33  33  33  33  35  34  36  37  37  36  34  35 \n 33  35  36  36  35  36  36  35  36  38  39  38  37  39  38  39 \n 39  40  40  40  40  41  39  38  31  21  21  27  29  23  19  20 \n 24  28  33  36  35  33  35  35  35  32  29  31  31  31  29  30 \n 30  28  27  27  30  28  82 172 171 172 154 156 164 171 165 160 \n163 152 162 156 149 168 156 154 151 152 147 141 156 156 164 178 \n116  35  34  30  28  30  30  30  29  31  31  31  31  32  34  36 \n 37  36  38  40  42  42  41  42  42  42  43  42  40  37  33  32 \n133 140 147 150 158 160 165 168 170 169 165 162 158 154 142 134 \n120 106  95  89  78  73  62  51  44  41  36  34  32  30  27  28 \n 27  27  26  27  38  77  99 101  41  40  39  42  42  41  44  47 \n 50  50  50  44  43  54  70  81  87  83  80  81  95  98 104 116 \n111 103  47  22  19  21  33  29  22  24  37  58  59  52  59  59 \n 53  50  48  58  86 111 134 142 142 142 141 139 139 139 135 136 \n134 134 133 129 127 123 120 120 119 118 117 117 118 113 106  98 \n 89  82  79  75  67  62  56  55  49  46  42  40  38  38  37  39 \n 44  43  40  38  37  35  35  35  36  36  36  34  38  39 102 138 \n137 136 136 137 136 136 139 142 142 140 134 133 127 115 138 106 \n 30  39  36  35  38  39  34  40  54  49  50  51  50  49  46  46 \n 45  43  37  20  14  18  26  24  16  20  20  27  39  39  40  47 \n 41  36  32  30  31  32  31  30  30  29  28  28  32 134 177 174 \n174 173 173 174 175 175 176 174 176 175 175 175 177 176 173 175 \n175 175 176 129  22  32  30  30  29  30  32  29  28  26  28  31 \n 31  32  31  31  30  29  29  28  27  25  29  30  30  29  31  31 \n 27  27  32  35  91  40  29  34  39  45  46  45  47  46  42  42 \n 42  43  41  40  41  41  41  42  44  41  42  42  43  41  41  41 \n 40  39  38  40  40  39  37  37  41  38  24  20  20  26  29  24 \n 23  25  30  32  34  34  36  39  37  36  36  36  34  34  33  34 \n 32  31  29  30  32  33  43 150 178 178 177 175 175 176 168 173 \n174 168 161 155 154 160 156 154 181 146 164 126 145 178 172  66 \n 41  38  37  36  34  33  33  32  30  31  32  32  32  33  35  33 \n 32  32  31  31  30  31  31  36  35  34  31  31  31  32  30  42 \n 70  36  37  35  34  34  34  33  35  33  34  37  37  36  35  35 \n 35  35  37  35  35  35  36  37  37  37  39  36  36  38  37  37 \n 39  40  42  42  42  41  39  38  28  18  22  27  28  22  19  21 \n 24  27  31  35  37  34  34  36  35  31  30  30  30  31  30  29 \n 29  28  28  28  31  30  80 175 176 176 172 175 177 178 176 178 \n177 175 176 176 176 176 175 176 174 174 173 174 172 172 174 181 \n117  37  32  31  29  30  29  30  31  31  31  32  32  31  34  36 \n 36  37  38  39  41  42  42  43  42  42  41  40  38  36  31  31 \n 60  62  64  67  76  82  86  94 102 103 116 122 128 139 155 166 \n172 182 193 196 196 192 154 103  55  46  40  36  33  31  31  29 \n 28  26  25  25  31  58  94 114  67  47  46  47  46  47  51  51 \n 48  46  44  50  70  84  84  82  76  75  75  59  55  60  85 118 \n164 168  61  23  18  19  31  28  23  24  37  55  61  53  58  59 \n 53  55  98 119 133 134 128 126 125 119 117 119 121 117 115 108 \n107 103  99  97  97  93  97  96  95  93  91  94 103 105 112 122 \n135 143 146 151 153 154 151 150 141 135 125 117 107  95  83  73 \n 66  56  45  42  40  36  34  35  37  40  39  37  38  39  81 128 \n136 134 137 138 136 136 142 144 138 133 150 182 115 101 144 115 \n 34  46  45  41  38  39  39  45  64  56  50  50  50  48  46  46 \n 46  43  39  19  13  16  25  23  17  18  19  27  40  39  40  46 \n 42  36  31  30  30  31  31  29  30  31  30  27  29 103 155 164 \n171 176 176 177 176 176 176 176 174 174 174 174 174 176 173 174 \n176 174 177 139  17  31  31  31  30  32  32  30  29  28  29  30 \n 33  33  33  33  31  30  29  28  27  25  28  30  31  31  33  33 \n 27  27  31  31  87  58  29  34  41  46  47  45  45  45  45  44 \n 42  42  42  41  41  41  40  42  43  41  43  42  40  41  40  40 \n 41  40  39  40  39  39  40  38  40  38  24  18  20  26  27  23 \n 22  25  30  32  34  34  36  39  38  37  37  36  35  35  33  33 \n 32  31  32  31  32  34  40 147 179 177 181 179 179 178 180 180 \n179 177 176 176 173 174 172 170 180 172 178 170 169 177 175  71 \n 40  37  36  39  35  32  33  33  31  32  31  32  33  35  35  35 \n 33  34  31  30  31  31  34  37  35  32  31  29  32  32  31  35 \n 72  40  35  34  34  34  36  35  34  35  35  36  38  36  34  35 \n 37  36  37  37  36  35  35  37  35  36  39  38  37  36  35  37 \n 38  39  42  43  42  42  39  38  26  17  22  28  28  23  19  20 \n 24  28  31  34  37  36  34  35  33  32  30  30  29  29  30  28 \n 28  28  28  28  30  29  77 172 177 178 178 179 179 178 179 177 \n176 179 177 179 179 178 178 177 178 179 177 175 178 178 177 181 \n117  37  34  32  29  30  29  32  32  31  32  31  33  33  35  36 \n 36  38  38  38  41  42  42  43  42  41  41  41  40  36  34  33 \n 47  45  45  46  44  43  44  46  49  53  53  55  61  67  72  75 \n 84  95 114 139 208 249 253 240 173 102  47  38  34  32  30  28 \n 28  27  26  25  29  40  83  98 112  57  53  53  51  56  57  59 \n 64  68  79  88  92  85  72  61  58  60  73  86  95 104 121 149 \n232 251 122  22  18  17  28  26  22  24  35  57  63  54  58  59 \n 57  75  71  55  49  47  48  47  48  50  51  49  48  47  47  48 \n 51  51  49  48  46  44  43  47  47  50  48  47  47  44  46  44 \n 45  46  50  51  55  67  77  81  90  94 103 108 121 130 142 149 \n154 158 161 158 154 148 144 133 122 112  99  88  81  77  89 123 \n142 140 146 133 137 140 142 157 138  92 171 173  96  93 141 133 \n 42  54  58  53  46  43  40  48  72  70  50  49  45  42  41  41 \n 44  46  40  19  13  14  26  23  17  18  20  26  40  40  41  46 \n 44  38  32  32  31  33  31  30  30  31  30  30  26  26  27  35 \n 53  67  85  97 112 119 130 138 147 150 157 164 169 170 170 171 \n172 172 176 146  21  31  29  30  30  31  32  30  30  30  30  30 \n 32  32  34  34  33  33  29  29  27  26  28  30  33  32  34  34 \n 29  26  29  31  71  94  29  35  41  45  46  45  43  45  43  41 \n 42  44  42  41  41  41  42  41  41  40  41  41  40  41  39  39 \n 39  42  41  39  40  41  39  37  40  39  21  17  19  26  26  23 \n 22  25  30  32  33  34  37  40  40  38  37  36  34  34  33  33 \n 33  32  30  30  33  33  37 140 180 177 179 179 178 177 178 176 \n175 175 176 176 176 175 177 178 177 178 177 180 177 177 174  78 \n 42  37  36  40  37  34  35  34  32  33  32  34  36  36  37  36 \n 34  34  32  32  34  35  36  36  34  34  32  31  30  31  29  32 \n 68  45  37  36  34  33  37  36  35  37  36  36  38  36  35  34 \n 35  36  36  37  37  35  37  38  36  38  39  37  36  35  36  37 \n 37  39  42  42  41  41  41  38  23  17  21  28  27  22  19  19 \n 24  28  32  35  40  39  35  35  31  31  31  30  30  29  28  28 \n 30  29  29  28  28  28  74 173 176 171 173 176 178 177 158 146 \n175 177 179 179 178 175 176 178 178 177 174 177 173 175 176 183 \n114  38  35  32  30  30  29  32  31  31  33  34  34  36  35  35 \n 38  39  38  37  40  41  41  41  42  42  40  40  39  36  34  32 \n 49  50  50  50  50  49  50  50  50  50  49  50  49  48  49  50 \n 53  56  58  68  97 143 193 215 220 201 130  58  40  34  30  28 \n 29  29  27  26  27  32  67  91 116  67  58  71  78  78  94  97 \n 93  89  92  93  86  73  66  75  96 109 120 131 139 135 127 125 \n144 184  95  21  18  18  29  28  22  26  36  55  66  56  58  60 \n 56  51  42  38  37  39  38  39  39  42  47  45  44  45  46  48 \n 50  50  49  47  45  44  44  43  45  44  44  44  46  44  46  48 \n 51  52  52  53  54  57  55  57  55  55  55  48  49  52  52  54 \n 63  68  74  80  92  99 111 122 141 153 169 175 178 181 182 186 \n191 190 188 178 173 170 161 184 119  92 122  80  89  99 134 148 \n 58  51  60  63  56  49  47  60  83  80  56  46  42  42  39  39 \n 44  49  40  20  14  16  25  23  18  18  21  26  40  40  41  45 \n 43  39  32  31  32  32  31  31  31  31  29  28  26  26  26  28 \n 31  30  32  31  33  36  39  44  48  50  54  62  69  72  82  88 \n 97 104 110  97  28  32  31  30  30  33  32  31  30  31  31  31 \n 33  33  33  34  34  32  29  29  27  27  29  28  32  33  34  37 \n 27  22  28  31  52 113  36  39  44  47  45  45  44  46  45  44 \n 43  42  43  42  42  43  43  42  43  43  42  41  42  41  40  40 \n 42  42  41  42  42  41  41  39  40  38  21  17  20  26  24  21 \n 23  26  30  32  33  35  38  41  40  38  37  36  34  34  34  33 \n 32  31  30  32  32  32  35 139 179 179 178 180 180 177 179 179 \n176 176 176 177 176 175 174 177 177 179 178 179 177 178 175  84 \n 41  38  37  41  37  35  35  34  33  34  33  34  36  35  36  35 \n 35  34  32  33  36  36  35  36  36  35  32  30  29  29  30  32 \n 66  55  38  36  36  35  37  38  36  36  37  37  37  37  36  35 \n 36  37  37  37  37  36  38  39  39  39  38  37  36  34  35  36 \n 37  39  41  42  42  42  40  37  22  18  21  27  26  20  19  20 \n 25  28  31  33  39  39  35  33  30  30  30  29  31  31  28  28 \n 32  30  30  29  28  30  76 173 172 149 155 166 165 171 158 123 \n177 165 167 168 169 170 170 173 176 168 130 151 130 152 179 184 \n115  37  35  33  29  30  28  29  31  32  32  34  35  35  35  35 \n 38  39  39  39  40  42  39  40  42  42  42  41  39  38  34  32 \n 50  51  51  51  52  54  52  51  49  50  50  49  48  48  50  52 \n 51  52  54  54  60  68  59  61  79 119 176 165  67  35  32  29 \n 30  29  28  26  24  29  50  91 107 104  57  67  66  74  77  72 \n 69  67  73  77  87  98 114 131 150 173 212 232 239 238 221 201 \n158 134  78  28  21  18  26  29  21  25  32  49  67  58  58  60 \n 51  33  27  31  35  38  36  35  35  38  44  43  42  42  42  45 \n 51  52  56  55  52  50  47  46  45  46  47  50  50  51  52  53 \n 56  55  53  52  53  54  54  54  54  54  52  51  49  51  48  49 \n 50  49  50  47  46  45  47  46  45  48  54  56  69  76  87 102 \n122 136 152 161 173 186 202 208 209 211 210 178 163 150 146 159 \n 98  49  53  58  59  63  86 119 113 102  69  44  40  42  40  38 \n 40  45  40  19  14  15  24  23  17  18  23  27  40  41  42  45 \n 41  38  33  34  33  31  32  30  32  29  29  27  26  27  24  26 \n 30  30  28  27  30  32  31  30  27  28  27  27  28  31  30  31 \n 32  29  29  30  32  31  32  31  30  32  32  30  30  29  29  30 \n 34  34  34  35  34  34  30  28  29  29  29  29  32  33  34  35 \n 28  21  25  31  37 110  62  44  50  50  46  45  44  45  45  42 \n 42  41  44  44  43  43  43  43  42  42  42  42  41  42  41  40 \n 41  40  42  41  40  42  40  40  42  39  23  19  21  27  24  21 \n 22  26  30  31  34  35  39  41  40  38  38  36  36  34  32  31 \n 33  32  29  30  30  31  37  76 113 124 139 150 158 166 172 170 \n171 174 173 174 174 173 176 176 177 176 178 177 177 176 175  82 \n 38  37  36  39  36  35  35  34  30  31  32  33  35  35  35  35 \n 35  35  31  34  36  35  36  37  38  36  34  31  26  27  30  30 \n 55  67  37  35  35  36  34  35  35  34  37  37  36  35  35  35 \n 35  35  36  37  38  38  39  40  39  39  38  38  36  35  35  35 \n 37  38  39  41  42  41  40  36  21  18  24  28  25  19  18  21 \n 24  28  31  33  37  39  33  33  31  28  29  30  30  29  29  29 \n 30  29  29  30  28  28  75 175 176 166 163 159 152 160 159 154 \n176 148 150 153 144 157 151 154 158 171 131 128 126 132 182 182 \n118  37  36  33  30  31  29  30  32  32  32  34  35  36  34  36 \n 37  39  41  39  41  41  41  41  41  41  42  42  40  37  32  31 \n 52  50  49  49  54  54  52  52  48  51  48  50  50  48  49  50 \n 50  50  52  52  55  55  51  53  54  58  80 140 144  63  33  31 \n 31  30  29  29  26  28  35  76 100 118  57  40  47  52  55  55 \n 70 106 125 121 121 124 156 194 230 243 249 249 246 246 247 245 \n234 195  88  27  22  19  24  29  21  25  34  48  64  59  56  62 \n 41  25  24  30  36  40  35  32  31  35  44  46  43  43  44  45 \n 47  53  56  56  58  57  54  53  52  52  51  52  53  53  55  56 \n 57  56  54  53  54  53  54  54  55  55  53  55  52  52  53  54 \n 52  53  56  55  53  53  52  53  52  52  53  52  52  52  49  51 \n 53  57  64  68  82  91 107 125 152 164 201 235 246 242 223 196 \n141  65  46  66 106 131 148 154 131 100  80  56  42  41  38  38 \n 38  42  38  20  15  14  25  22  16  19  22  28  40  43  42  47 \n 39  37  33  32  32  31  31  30  31  29  28  28  27  26  26  27 \n 27  29  28  29  29  31  30  27  26  27  27  26  27  27  28  28 \n 28  28  29  30  31  30  30  30  29  30  32  29  28  30  30  31 \n 31  33  34  35  33  33  31  29  29  29  29  30  32  32  34  34 \n 27  21  22  30  31  86  92  50  54  53  47  46  46  44  45  42 \n 44  43  45  44  44  44  44  43  44  42  42  42  41  42  40  41 \n 41  42  43  41  41  43  42  42  41  40  23  19  20  25  24  21 \n 22  27  31  32  35  36  39  40  38  38  37  36  36  35  33  32 \n 33  33  32  31  30  30  31  37  37  39  42  54  69  80  88  88 \n 97 111 119 127 136 149 156 161 165 167 171 173 174 176 173  82 \n 37  37  38  38  35  33  32  32  30  31  33  34  34  33  34  35 \n 34  33  31  34  35  34  35  36  37  36  34  30  25  26  29  30 \n 44  77  35  36  35  35  33  32  32  33  35  35  35  33  33  33 \n 34  35  35  34  36  37  38  38  40  38  36  36  36  35  36  35 \n 37  36  39  39  40  42  39  34  20  18  23  28  24  20  18  22 \n 23  28  31  32  36  38  36  33  31  28  27  29  30  29  31  30 \n 28  27  28  28  29  27  73 173 176 178 176 175 175 176 174 173 \n177 171 169 164 161 164 166 163 163 166 125 154 126 146 181 184 \n120  38  35  33  32  32  29  29  29  30  31  34  35  34  35  34 \n 37  38  39  39  39  39  40  41  41  41  42  43  41  38  30  29 \n 54  54  51  51  52  51  50  50  51  49  53  51  50  49  48  49 \n 49  50  48  49  49  51  52  51  49  47  49  47 108 130  53  31 \n 32  31  29  30  26  26  30  52  92 106  99  51  54  66  95 132 \n159 144 133 145 174 204 234 239 241 240 240 242 241 241 242 245 \n246 245 136  32  21  17  21  30  22  24  34  47  66  59  58  61 \n 34  22  22  28  38  38  31  28  28  33  41  45  47  47  46  47 \n 47  49  54  59  60  60  59  57  56  55  55  55  56  55  54  55 \n 56  55  55  56  53  51  54  55  54  53  55  56  51  51  51  52 \n 49  54  56  55  55  55  54  54  54  55  55  55  54  54  54  53 \n 55  53  52  52  54  53  52  53  51  55  65  96 176 212 232 236 \n219 185 146 147 151 149 124  94  77  70  85  79  57  45  40  38 \n 39  43  39  21  14  16  23  21  18  19  23  28  38  41  43  45 \n 39  38  34  33  33  31  29  31  32  30  27  27  29  27  27  28 \n 27  29  28  29  30  30  29  30  28  29  27  25  25  26  28  28 \n 28  28  29  28  31  31  31  31  30  32  33  32  30  30  30  31 \n 31  33  34  33  34  32  30  29  29  28  29  31  32  31  34  36 \n 31  21  20  25  28  49 116  63  58  57  50  47  46  44  43  43 \n 44  45  46  46  44  44  46  46  45  45  43  41  41  42  41  43 \n 41  42  43  43  39  40  43  42  40  38  19  17  21  27  25  21 \n 22  26  32  34  35  37  39  40  38  37  35  35  35  33  32  32 \n 34  32  31  31  32  32  32  36  35  29  31  33  34  34  35  32 \n 32  30  28  28  29  33  32  39  43  47  54  57  63  66  73  55 \n 38  34  36  34  33  33  31  32  33  31  33  35  32  32  35  36 \n 36  32  32  33  33  33  35  35  38  36  34  30  24  25  28  30 \n 37  81  37  34  35  34  33  32  30  32  32  33  34  32  32  33 \n 33  33  32  34  35  35  36  37  40  39  35  38  38  36  36  36 \n 35  35  39  38  38  39  38  32  18  17  23  26  22  20  19  22 \n 23  27  31  33  36  37  36  34  32  29  28  29  29  29  31  30 \n 31  31  31  29  30  30  71 173 177 176 178 178 179 180 180 178 \n178 177 178 179 178 178 177 178 179 179 177 180 176 176 178 182 \n119  40  36  33  32  31  30  31  32  32  33  35  36  36  34  35 \n 38  37  38  38  38  40  39  41  41  41  43  40  38  37  28  26 \n 54  53  52  53  52  52  51  52  52  50  51  49  49  48  47  48 \n 49  49  49  50  50  51  51  51  49  47  49  49  55  99 102  39 \n 33  30  29  29  28  25  26  40  80  93 115  99 130 151 164 150 \n139 144 184 217 244 247 245 246 244 243 243 243 244 241 241 244 \n241 244 139  35  22  17  20  30  22  25  35  47  66  60  58  64 \n 35  21  23  28  37  38  30  25  27  32  38  42  49  48  45  46 \n 48  52  55  58  59  60  59  58  55  56  54  55  55  55  54  56 \n 57  57  57  56  52  51  52  54  53  52  53  53  49  51  51  51 \n 51  52  53  54  55  54  53  53  54  55  54  55  52  52  51  52 \n 54  53  51  52  54  54  53  53  55  53  54  56  72  88 107 123 \n155 189 196 168 145 143 123  83  45  43  64  77  75  60  45  42 \n 42  46  41  20  15  16  24  21  18  18  23  29  38  42  42  45 \n 37  37  33  33  33  32  31  30  33  31  28  27  27  27  28  28 \n 28  30  28  29  29  28  28  29  29  29  28  28  25  27  30  30 \n 30  29  31  29  32  31  31  30  33  31  31  31  31  30  31  33 \n 33  33  35  33  34  33  29  29  30  28  29  30  32  32  34  37 \n 34  24  20  23  29  38 112  79  66  61  54  50  45  44  44  42 \n 42  43  46  45  45  45  45  46  44  44  43  41  42  42  43  41 \n 40  41  41  42  40  39  41  41  42  38  20  17  24  27  23  21 \n 21  25  33  35  36  36  38  40  39  39  36  35  34  32  32  32 \n 33  32  31  30  32  31  31  34  32  30  32  33  31  31  32  32 \n 29  29  30  30  28  29  30  30  31  31  31  31  33  34  37  40 \n 36  34  33  33  32  31  31  31  32  32  33  34  31  33  36  35 \n 35  31  31  33  34  34  36  37  38  38  36  31  24  23  26  30 \n 33  80  49  33  33  32  32  31  32  31  31  32  32  31  30  29 \n 30  33  32  34  34  35  37  37  40  38  36  37  38  36  36  36 \n 34  35  37  37  38  39  39  32  19  18  23  26  21  20  19  22 \n 26  28  31  34  35  36  37  35  33  31  29  31  30  30  30  30 \n 30  30  31  30  29  29  73 174 177 178 178 179 179 179 177 177 \n178 178 178 179 176 177 177 179 179 180 179 179 180 180 179 184 \n121  40  35  33  32  31  31  32  32  32  35  37  36  35  36  35 \n 35  34  36  37  38  39  39  41  41  42  41  39  38  36  27  23 \n 53  51  51  51  52  52  51  51  52  51  52  50  50  48  47  49 \n 48  47  48  50  51  51  50  48  50  49  47  48  46  48 100  79 \n 35  31  31  29  28  25  25  30  61  87 110 153 156 143 152 165 \n204 237 249 251 250 251 251 251 250 251 251 251 250 250 250 250 \n250 248 144  40  20  18  20  29  23  24  34  46  66  61  58  60 \n 42  24  24  26  36  42  32  24  27  29  38  41  47  50  48  48 \n 50  53  56  58  59  59  60  59  58  59  58  57  57  55  56  56 \n 55  56  56  54  54  52  52  53  52  52  52  52  50  52  51  51 \n 53  50  50  51  55  54  54  53  55  52  54  53  52  52  52  51 \n 52  52  53  53  53  52  51  52  53  53  53  53  54  55  57  57 \n 59  69 123 163 189 188 110 103  81  48  41  56  78  76  65  55 \n 56  58  42  21  12  14  24  20  17  18  23  28  39  43  43  44 \n 39  38  35  32  32  34  32  31  31  30  29  27  28  28  27  27 \n 29  29  29  28  29  28  28  27  26  26  28  28  26  29  31  31 \n 33  31  31  32  35  34  32  32  34  34  31  30  31  31  32  32 \n 32  34  36  38  37  34  32  31  32  31  31  31  32  33  36  39 \n 37  30  20  21  27  35  86 114  74  70  59  51  47  44  44  45 \n 44  44  45  45  45  45  43  44  43  42  42  42  42  40  41  41 \n 40  41  42  41  40  40  40  42  43  37  20  18  26  28  23  21 \n 22  27  32  35  38  39  39  40  38  38  37  37  34  33  32  32 \n 32  32  31  31  31  32  32  32  32  32  31  32  32  31  33  34 \n 32  30  32  32  31  31  32  31  30  31  32  32  30  32  34  34 \n 33  33  32  32  32  33  34  33  33  33  32  30  31  34  35  35 \n 35  31  30  31  32  36  36  38  38  38  38  34  26  24  25  31 \n 32  60  75  34  34  31  31  30  30  31  32  30  31  32  30  30 \n 30  34  33  33  34  35  35  37  37  37  39  38  36  35  36  35 \n 35  36  36  38  39  37  37  30  18  19  25  26  20  19  20  23 \n 29  30  32  33  36  35  35  35  33  31  31  33  32  29  30  31 \n 29  29  30  30  30  27  70 171 176 176 178 178 179 177 176 180 \n178 175 177 177 177 176 176 176 178 178 178 179 178 179 180 185 \n119  39  36  33  33  33  32  32  31  33  36  36  36  36  36  36 \n 36  35  35  36  37  39  39  42  44  41  41  42  39  35  28  23 \n 54  50  50  50  52  52  51  50  52  52  52  50  50  49  49  48 \n 48  48  49  50  51  50  49  49  51  49  49  48  45  45  65  92 \n 50  32  31  31  30  29  27  29  47  78 102 125 137 170 212 237 \n249 251 250 251 251 250 249 249 250 251 249 249 249 251 249 248 \n249 244 146  44  21  19  19  29  25  25  34  45  64  63  57  59 \n 49  26  24  26  35  44  35  25  26  28  37  41  43  50  52  50 \n 54  55  56  58  60  60  59  60  61  60  60  61  60  59  57  57 \n 57  56  57  57  56  53  53  53  52  52  54  51  53  53  52  51 \n 51  51  51  53  55  55  53  54  55  54  54  54  53  52  52  51 \n 51  52  53  52  52  53  51  51  50  50  52  50  52  51  53  51 \n 51  52  62  89 155 125  70  71  98  76  44  43  92  84  66  65 \n 63  62  44  21  14  14  24  20  16  18  25  29  41  44  44  44 \n 39  37  34  32  33  33  32  32  33  32  29  28  28  28  28  28 \n 28  29  29  30  29  29  28  27  28  28  28  30  29  32  32  32 \n 35  34  36  36  37  35  36  36  36  35  34  34  35  34  35  35 \n 35  36  38  39  40  37  36  33  32  33  33  34  35  34  36  38 \n 38  33  22  21  27  36  64 145 101  74  65  56  49  47  45  44 \n 43  45  46  45  46  46  44  43  41  40  42  41  40  40  40  41 \n 39  40  41  40  40  41  40  40  42  36  20  20  25  27  24  22 \n 24  27  33  37  39  41  39  41  38  37  38  39  35  34  32  32 \n 32  35  33  31  32  32  30  32  31  31  33  33  33  31  32  34 \n 32  32  33  33  33  34  33  31  32  34  34  31  31  33  33  34 \n 34  33  33  33  33  32  31  31  31  32  33  32  33  35  35  36 \n 37  34  32  31  34  36  36  38  38  37  37  34  27  24  24  29 \n 32  46  88  36  33  31  31  31  31  32  32  32  32  31  31  31 \n 32  35  33  34  34  35  34  36  36  37  40  37  36  37  36  34 \n 36  37  37  37  39  40  37  29  17  19  26  26  21  19  19  23 \n 31  32  32  33  35  35  34  34  31  31  30  32  32  30  30  31 \n 29  29  30  29  30  30  53 125 142 152 161 165 171 174 176 177 \n178 177 176 178 177 177 176 177 176 177 176 177 178 178 180 184 \n120  35  36  34  31  32  32  32  32  34  35  36  37  36  35  36 \n 36  35  34  36  37  39  42  42  44  42  41  42  39  35  29  24 \n 53  49  51  51  51  52  52  52  51  51  49  49  50  47  47  50 \n 48  47  49  48  50  47  49  47  48  50  48  47  47  48  48  66 \n 84  42  32  31  32  30  27  26  35  60  96 111 191 248 250 250 \n250 251 250 249 251 252 251 252 251 251 250 248 249 250 251 249 \n249 241 148  47  23  19  18  25  25  26  31  42  62  62  56  58 \n 53  27  22  25  31  43  36  26  25  27  35  39  41  49  56  53 \n 55  56  58  55  56  58  57  59  61  61  63  62  60  61  63  62 \n 61  60  59  56  55  53  52  52  51  51  52  51  51  51  51  50 \n 51  54  53  54  54  54  53  53  53  54  51  53  53  50  48  50 \n 51  51  50  50  50  52  51  51  51  49  50  48  51  51  52  52 \n 51  51  49  55  79 119  75  46  82 135  66  47  83 163 154  92 \n 57  54  41  22  13  13  23  19  18  20  26  30  39  42  43  42 \n 39  37  34  33  31  31  31  31  31  30  28  27  28  28  28  27 \n 27  28  29  29  29  29  30  28  27  28  28  31  31  33  43  49 \n 55  59  57  55  52  52  52  52  49  48  47  46  44  43  43  43 \n 41  42  44  46  42  39  38  36  34  35  36  37  36  36  39  40 \n 43  37  26  23  27  35  46 135 103  75  69  62  53  50  50  48 \n 46  46  45  46  47  46  43  40  41  42  41  40  39  39  40  40 \n 41  41  41  40  39  40  39  39  43  37  21  20  27  30  25  23 \n 25  28  34  37  38  40  40  41  39  39  38  36  35  34  32  32 \n 31  34  32  30  31  31  30  30  32  33  30  33  31  29  31  33 \n 30  32  33  34  33  33  33  34  33  33  34  31  30  33  33  32 \n 35  34  33  31  31  30  30  31  32  32  34  34  33  35  37  36 \n 36  32  32  35  37  36  36  37  39  38  38  35  28  23  23  28 \n 31  34  94  44  33  32  33  32  33  33  33  34  32  31  32  33 \n 33  35  34  34  33  32  34  36  36  39  38  36  34  36  36  35 \n 34  34  35  36  38  38  33  27  19  21  26  24  20  18  20  24 \n 31  33  32  34  33  35  34  35  32  32  30  31  31  31  31  30 \n 31  28  28  28  29  30  29  26  33  39  45  54  62  70  78  87 \n 97 104 109 113 123 125 132 136 147 145 151 152 156 158 158 165 \n104  35  34  32  30  31  32  32  31  33  35  37  35  34  37  36 \n 36  34  36  37  38  38  40  42  41  40  41  40  37  36  29  22 \n 52  50  52  51  52  53  55  54  52  52  50  49  49  48  47  50 \n 49  47  48  48  47  46  49  47  46  48  50  49  46  47  48  48 \n 85  60  32  32  32  31  27  25  31  44  88 102 161 242 250 249 \n251 251 251 250 251 253 251 251 250 251 250 249 250 249 250 249 \n250 237 145  55  23  20  18  24  26  25  32  41  62  61  57  58 \n 56  32  20  22  30  44  37  27  25  25  33  39  41  48  58  57 \n 54  55  59  60  57  56  57  58  61  60  62  61  64  67  72  67 \n 65  64  62  60  58  57  58  56  54  53  53  53  50  51  53  53 \n 54  54  51  54  53  55  54  53  54  53  51  52  52  50  48  49 \n 51  51  50  49  51  53  51  51  51  49  48  49  51  51  52  52 \n 52  51  50  49  55  83  93  51 157 190  91  65  59 191 241 204 \n 93  51  49  21  16  15  23  19  19  21  25  30  42  43  43  41 \n 37  37  34  34  31  30  30  32  33  32  28  26  27  27  28  28 \n 28  29  29  29  29  28  29  29  28  28  30  35  59  97 135 152 \n162 167 167 165 162 162 160 158 155 154 148 145 143 143 138 133 \n131 126 123 119 112 105  97  95  85  76  74  70  62  57  51  47 \n 46  42  33  29  28  33  42 109  92  75  80  73  63  58  53  52 \n 50  49  49  49  48  47  47  43  42  43  43  44  42  41  41  40 \n 41  42  40  40  41  42  42  41  44  36  22  22  29  30  26  25 \n 27  29  33  36  41  41  41  42  39  39  37  36  35  32  33  31 \n 31  34  32  31  31  32  31  30  31  31  32  32  31  31  30  33 \n 30  30  33  34  33  33  33  34  34  33  34  32  30  32  34  34 \n 35  34  32  32  31  31  31  32  32  33  35  33  32  35  34  37 \n 36  33  34  35  36  36  37  37  39  39  39  35  29  25  21  25 \n 30  30  84  58  40  36  37  36  34  34  37  38  36  36  36  36 \n 36  35  35  34  35  34  35  35  35  37  38  36  34  35  35  35 \n 33  34  34  35  37  38  34  25  18  20  25  23  19  17  19  24 \n 30  31  33  33  32  35  34  36  33  32  32  32  32  32  32  30 \n 33  32  29  28  31  29  28  29  32  34  34  35  33  30  32  34 \n 35  35  35  39  43  45  45  51  55  54  56  60  62  59  59  62 \n 51  35  32  30  31  32  32  32  32  33  36  36  38  36  35  36 \n 39  37  36  36  37  38  39  42  40  40  40  40  37  34  29  23 \n 50  52  50  52  49  51  53  54  55  53  51  50  49  50  48  49 \n 50  50  49  49  48  48  46  46  48  49  49  46  48  46  45  48 \n 65  85  35  31  32  32  27  26  28  35  69  97 125 207 250 249 \n251 250 251 252 250 250 250 250 251 249 246 247 248 249 248 251 \n251 230 148  62  21  18  17  22  26  24  31  40  59  62  58  57 \n 60  35  18  20  28  43  40  29  26  27  31  38  40  41  54  58 \n 55  56  58  57  55  56  58  59  61  59  63  62  65  70  77  68 \n 67  66  65  64  63  61  63  66  65  63  61  59  58  57  60  58 \n 57  57  56  56  54  56  55  54  54  52  51  51  52  51  49  50 \n 50  48  50  49  50  50  51  51  50  50  48  49  51  51  53  52 \n 51  49  50  51  50  56  85 130 245 244 150  92  58 106 237 249 \n223 126  36  22  15  15  24  21  19  20  23  30  40  46  45  41 \n 35  36  34  36  33  32  32  33  32  32  28  28  28  29  29  27 \n 27  28  28  29  31  29  28  25  27  30  53  99 132 126 108 102 \n 96  93  98  97  99 101 105 105 108 111 113 117 115 117 120 123 \n124 130 139 145 145 143 151 153 155 161 167 170 168 170 168 176 \n171 166 160 157 150 149 144 152 149 118 119 113 103  96  85  77 \n 69  65  64  60  55  51  50  48  44  43  45  46  45  45  45  47 \n 46  45  44  45  44  43  44  45  48  38  28  27  33  34  29  28 \n 30  32  36  39  42  42  42  43  40  40  38  37  34  32  32  32 \n 32  33  31  31  31  31  30  31  30  31  32  32  30  32  30  32 \n 31  32  34  34  33  33  34  32  33  32  31  32  32  32  34  35 \n 36  34  33  32  30  32  31  32  33  33  33  32  33  34  34  36 \n 36  35  35  36  37  37  37  38  40  39  37  35  28  24  21  23 \n 30  32  67  78  45  45  43  44  42  43  44  44  44  42  41  42 \n 41  41  40  40  39  39  38  38  38  37  38  39  36  34  35  34 \n 34  33  34  35  34  36  34  25  17  21  25  21  18  17  18  24 \n 28  31  32  32  34  36  34  34  31  31  32  32  32  31  31  29 \n 30  28  27  28  31  28  29  30  31  32  34  34  32  30  30  29 \n 31  31  32  30  30  32  33  34  33  35  33  33  33  38  35  32 \n 30  31  32  33  32  33  31  30  32  32  34  36  38  38  37  38 \n 38  37  37  39  38  38  40  41  41  40  40  38  37  35  30  23 \n 48  51  52  52  52  51  53  53  54  52  50  50  50  51  51  51 \n 50  50  50  51  49  48  47  47  48  49  49  47  48  47  46  48 \n 54  83  60  34  34  32  29  27  28  32  55  88 113 160 249 248 \n250 250 251 248 249 248 252 249 250 249 246 247 248 247 242 231 \n221 205 150  67  20  18  17  21  26  26  31  42  57  60  56  59 \n 60  41  17  21  29  41  40  28  26  25  30  39  40  39  51  58 \n 58  57  59  57  56  56  59  60  60  61  62  65  71  72  76  74 \n 72  72  69  67  67  67  68  70  68  70  69  68  66  63  63  66 \n 64  64  63  62  61  62  60  59  55  53  50  51  50  49  48  49 \n 52  50  49  50  49  49  49  50  51  51  50  50  51  50  52  51 \n 49  48  51  52  51  56  62 139 246 244 205 124  90  66 186 244 \n249 203  36  21  14  15  24  20  19  22  25  31  40  46  43  39 \n 36  36  34  35  40  32  30  32  34  31  29  30  29  29  29  28 \n 29  29  29  29  30  29  29  27  29  50  77  73  56  55  51  52 \n 51  50  52  52  54  56  55  51  50  52  52  54  55  57  55  52 \n 54  58  61  61  63  60  65  67  71  73  79  82  82  84  87  98 \n103 101  99 107 110 122 140 140 149 150 156 166 174 174 174 176 \n172 166 160 155 148 138 128 119 107  97  88  77  67  62  54  54 \n 53  48  47  44  41  44  51  53  54  43  33  35  40  38  35  33 \n 35  37  38  40  43  43  42  42  40  39  38  36  33  32  32  32 \n 33  33  31  31  31  31  29  30  30  32  30  31  31  30  30  32 \n 31  32  35  34  32  33  33  32  33  32  31  31  31  32  33  35 \n 37  36  33  32  31  31  31  33  32  33  35  34  34  35  37  36 \n 35  33  35  36  39  38  36  38  40  40  39  36  30  25  24  23 \n 29  33  58  91  44  45  44  43  43  46  47  47  46  43  42  44 \n 42  45  44  43  44  45  43  43  43  43  44  42  40  37  35  35 \n 35  35  36  37  38  40  35  24  19  24  27  23  20  19  20  24 \n 29  32  32  32  34  36  34  34  31  31  31  32  32  30  30  30 \n 31  29  29  29  30  30  30  30  31  32  34  33  33  32  30  29 \n 31  31  33  30  31  31  30  31  31  32  31  32  31  34  32  29 \n 31  30  32  34  33  33  32  30  34  34  36  37  37  37  36  37 \n 37  37  36  37  37  39  41  41  41  41  41  40  37  36  31  24 \n 47  51  52  51  53  52  53  53  53  52  51  50  51  50  51  51 \n 49  49  51  50  49  50  49  47  48  48  49  48  48  48  49  46 \n 47  66  87  44  34  33  31  29  27  30  40  71 106 123 217 251 \n251 250 250 250 250 248 250 248 250 247 242 235 218 201 186 178 \n172 178 148  75  20  16  16  19  24  22  31  41  55  59  57  58 \n 58  46  19  20  29  41  42  28  24  24  27  35  42  40  46  55 \n 58  57  60  61  59  58  58  59  59  62  62  63  90 140 128 116 \n105  92  83  78  77  76  69  70  69  69  71  70  71  69  70  69 \n 68  67  68  67  66  66  63  61  57  54  53  53  52  51  50  50 \n 51  50  48  49  47  47  49  50  49  49  51  50  50  51  51  52 \n 49  49  50  50  51  54  57  77 223 244 244 189 127 124 117 158 \n191 155  35  24  15  15  23  20  18  21  26  32  41  46  44  39 \n 36  34  33  33  35  33  32  34  34  32  30  30  30  29  29  29 \n 29  28  30  32  29  29  28  28  35  53  43  34  31  34  36  32 \n 30  34  37  40  43  47  47  45  44  43  40  41  42  43  42  43 \n 42  41  43  43  46  47  53  56  61  62  65  61  53  55  54  51 \n 50  48  46  47  46  45  47  46  51  56  61  59  64  69  74  83 \n 95 104 116 125 137 145 154 161 171 177 186 189 194 192 193 186 \n181 178 171 165 157 149 136 126 109  95  81  70  64  59  50  45 \n 43  42  44  41  46  44  42  40  39  38  38  37  35  33  32  33 \n 34  34  33  32  30  31  32  33  32  31  31  33  31  30  31  32 \n 31  31  35  35  31  30  31  32  32  31  30  31  31  31  33  35 \n 36  36  33  32  30  31  29  30  31  32  32  33  33  34  37  37 \n 33  33  33  35  40  39  36  38  41  41  39  36  33  26  21  21 \n 27  31  44 101  37  37  35  36  37  37  39  40  38  37  36  38 \n 39  39  41  44  45  44  46  47  47  46  47  47  45  43  42  40 \n 39  39  38  41  42  42  34  21  17  22  25  21  19  19  21  27 \n 31  32  32  33  35  34  31  31  29  28  29  31  31  30  31  32 \n 31  29  31  29  29  29  30  31  33  34  32  33  34  32  30  30 \n 30  30  31  31  31  32  33  32  33  31  31  30  32  31  31  32 \n 31  30  33  33  32  32  32  32  34  33  36  38  39  39  37  36 \n 37  37  36  35  37  39  41  40  41  41  41  40  38  35  32  25 \n 48  52  51  50  51  53  53  53  52  52  52  51  51  51  50  50 \n 51  49  50  50  50  50  50  49  48  49  47  48  49  47  50  48 \n 48  51  89  60  35  34  31  29  28  29  34  54 101 119 172 245 \n250 251 250 250 248 245 247 247 235 220 201 189 180 179 178 174 \n177 176 132  76  19  17  15  19  24  23  33  41  54  61  58  57 \n 59  46  22  20  27  41  45  30  24  24  25  33  40  40  45  52 \n 59  57  59  61  60  60  59  60  60  60  61  66  93 195 201 198 \n191 185 174 163 155 148 126 113 102  95  87  80  76  77  76  71 \n 70  69  70  70  70  70  66  63  56  56  53  53  52  50  51  50 \n 49  49  49  49  49  50  50  50  51  51  50  51  50  50  51  52 \n 50  49  49  49  51  54  58  58 175 246 245 236 168 145 152 160 \n165 144  48  21  15  15  25  22  20  21  27  32  40  44  43  38 \n 36  34  33  33  32  32  32  34  34  33  31  30  30  29  29  28 \n 28  29  30  31  29  28  31  31  39  40  27  25  26  32  34  30 \n 28  33  36  36  39  42  45  48  51  50  46  43  42  44  45  46 \n 45  45  45  45  49  52  60  62  61  61  66  64  58  57  55  54 \n 53  50  48  48  48  47  47  47  47  46  49  49  52  49  48  49 \n 49  51  54  56  60  63  67  72  78  85  99 107 115 110 129 142 \n153 162 178 190 205 216 223 225 225 217 211 201 186 171 144 114 \n 70  49  46  47  45  45  41  38  39  38  37  37  36  33  32  34 \n 37  35  33  31  32  32  33  33  32  31  31  32  31  31  32  32 \n 32  33  33  33  32  32  32  32  31  31  32  31  30  31  33  35 \n 38  37  35  33  30  30  30  32  32  34  35  35  34  36  37  36 \n 36  36  36  38  39  39  36  40  40  41  40  37  35  29  22  22 \n 24  29  38  96  46  34  32  31  32  31  34  32  34  34  34  35 \n 34  35  35  36  38  39  43  47  48  47  47  49  48  46  48  45 \n 42  41  40  41  42  42  34  20  17  21  26  21  18  19  21  27 \n 32  32  33  34  34  35  33  32  31  30  31  31  32  32  32  32 \n 32  30  31  31  30  31  30  31  34  35  33  33  32  32  30  31 \n 30  31  32  32  30  31  34  34  33  33  32  31  33  32  31  31 \n 32  31  33  32  33  34  32  33  33  33  37  37  39  40  37  35 \n 35  35  35  34  36  39  41  40  41  41  41  41  39  37  32  27 \n 49  52  52  51  51  52  51  51  52  50  51  52  52  52  52  52 \n 50  50  51  52  51  50  49  51  50  48  45  44  47  46  48  47 \n 48  49  70  84  41  33  33  33  29  27  31  38  83 106 133 209 \n247 249 244 240 230 219 207 196 181 182 181 180 178 178 177 186 \n202 155  56  55  27  18  15  17  24  23  34  43  54  61  58  58 \n 57  45  22  20  25  38  48  35  24  25  24  30  43  41  42  49 \n 58  59  59  61  59  59  60  60  60  59  63  66  79 184 203 203 \n203 203 202 204 205 205 206 206 203 201 198 194 187 183 173 163 \n153 146 140 135 126 120  90  63  57  54  53  54  52  51  50  49 \n 50  50  51  48  49  50  50  51  51  50  50  49  49  48  50  49 \n 49  49  50  50  50  53  57  59 105 226 246 246 235 189 135 129 \n142 138  51  21  16  17  24  20  19  21  26  34  40  44  44  38 \n 36  35  31  32  32  33  31  32  32  31  30  29  28  29  29  28 \n 29  30  30  29  29  29  30  32  42  29  20  21  29  35  34  28 \n 30  34  35  37  37  40  43  46  51  53  55  53  52  54  52  51 \n 52  50  51  52  57  59  62  63  62  61  62  61  56  56  53  53 \n 51  51  53  53  54  53  56  57  55  56  54  56  60  59  56  59 \n 59  58  59  59  61  59  59  59  60  60  57  56  57  57  55  63 \n 66  76  80  83  95 103 116 135 162 173 192 210 236 250 253 248 \n222 180 102  58  48  48  40  38  37  39  37  35  35  33  33  34 \n 38  35  32  31  32  31  32  31  32  31  31  31  30  33  33  33 \n 32  33  33  33  32  33  33  32  33  31  33  33  33  33  31  33 \n 37  37  37  34  30  30  31  32  32  34  35  35  36  37  36  37 \n 37  36  37  38  36  39  36  39  40  42  40  38  35  30  24  21 \n 23  29  33  78  79  31  28  27  30  29  31  30  30  30  30  30 \n 33  32  31  31  32  33  34  38  43  46  48  50  48  47  48  46 \n 41  39  36  35  32  35  33  22  19  24  25  21  19  20  22  27 \n 31  34  35  34  35  36  33  31  31  31  32  29  32  30  31  33 \n 31  30  31  30  31  31  31  31  31  33  33  34  33  32  32  30 \n 28  30  31  31  31  30  30  33  32  34  34  34  32  31  31  31 \n 31  32  32  32  33  33  34  32  32  34  36  37  37  39  38  37 \n 35  35  37  36  38  41  44  43  42  41  40  41  42  39  33  27 \n 49  51  52  51  51  50  50  51  53  51  49  50  51  53  52  51 \n 50  51  50  50  50  49  50  49  49  49  46  45  47  46  48  48 \n 48  48  54  87  59  35  33  33  32  28  29  32  62  96 119 162 \n249 239 216 198 189 184 178 181 181 183 180 179 178 179 175 171 \n149 102  88  82  24  16  14  18  25  26  35  43  52  58  56  59 \n 54  47  17  18  22  34  48  36  25  26  26  30  40  41  43  46 \n 56  61  60  60  60  60  62  58  60  61  63  66  74 175 201 199 \n189 197 204 204 205 205 205 204 204 202 204 204 204 204 204 204 \n203 201 204 203 199 201 130  58  58  56  54  54  52  52  50  51 \n 51  51  51  49  49  51  51  52  52  51  50  49  49  48  50  50 \n 49  51  50  51  51  52  54  59  73 189 242 237 242 240 207 184 \n165 143  48  18  15  17  23  20  20  22  27  33  40  45  44  39 \n 36  35  32  33  32  31  31  33  33  32  31  31  29  27  29  30 \n 29  28  28  28  30  31  30  36  42  23  19  23  33  39  32  26 \n 25  30  33  36  40  41  42  43  49  53  55  56  59  58  56  58 \n 57  55  56  57  61  59  62  61  61  60  61  58  54  54  53  53 \n 52  51  53  53  52  52  54  56  53  55  55  56  57  60  58  60 \n 62  59  60  60  60  59  60  59  60  61  63  61  62  59  61  57 \n 53  51  49  47  49  52  55  55  63  71  83  98 122 156 200 225 \n230 225 210 163  66  47  42  40  38  38  37  37  35  34  33  33 \n 38  36  32  31  31  32  32  31  33  32  32  31  31  33  32  33 \n 30  32  35  34  32  33  32  31  33  32  32  32  33  32  32  33 \n 36  36  36  34  31  30  32  32  30  33  37  37  38  39  37  36 \n 37  36  39  38  35  39  37  39  39  43  42  40  37  31  24  22 \n 23  27  32  62 102  33  29  28  29  28  29  29  29  30  30  29 \n 31  32  30  28  28  31  31  34  37  40  45  47  47  47  47  46 \n 42  37  35  33  29  33  32  21  21  25  25  21  20  20  24  28 \n 30  33  35  35  35  34  32  31  32  34  32  30  32  30  30  33 \n 32  30  32  32  31  31  32  32  33  33  33  33  33  34  33  31 \n 31  30  30  29  30  31  30  31  32  33  35  34  32  33  32  32 \n 32  34  33  33  34  34  35  33  33  35  37  38  38  38  38  36 \n 35  36  37  37  38  43  45  45  43  42  40  42  43  38  33  27 \n 48  49  50  50  49  51  52  52  52  52  49  49  51  51  50  49 \n 50  49  49  48  49  50  50  48  48  49  49  46  46  46  45  49 \n 48  48  49  67  85  45  33  31  31  29  25  29  46  78 109 123 \n191 187 180 179 184 182 182 179 181 177 176 176 173 174 171 165 \n161 156 156 122  21  17  15  16  23  26  33  42  52  57  54  59 \n 55  52  18  16  20  32  48  38  27  25  27  31  39  40  41  46 \n 56  60  61  60  60  59  60  58  61  61  61  63  66 157 195 185 \n184 193 204 204 205 204 204 205 203 196 199 200 201 204 204 202 \n203 203 202 200 201 203 149  64  58  57  54  51  53  51  50  51 \n 51  50  50  49  48  49  50  51  49  48  48  48  48  48  49  50 \n 51  52  52  51  50  50  54  56  59 105 152 154 160 162 168 174 \n184 190  52  18  16  16  24  21  21  23  28  33  41  43  43  39 \n 35  34  32  33  31  31  31  34  34  32  31  31  29  29  29  30 \n 31  29  29  30  29  27  30  35  40  22  19  24  34  38  32  27 \n 26  31  36  38  40  40  40  40  47  53  56  57  58  58  59  58 \n 57  56  57  59  59  58  58  55  56  55  55  54  52  53  53  50 \n 52  53  53  52  51  52  51  52  52  51  51  52  54  57  55  56 \n 57  58  58  59  59  60  59  57  58  56  58  57  57  55  57  57 \n 56  54  53  52  50  50  51  48  48  47  46  47  53  60  58  66 \n 80  99 139 181 182  98  42  40  39  38  37  35  33  34  31  34 \n 38  36  32  30  31  33  32  32  32  33  33  32  31  31  31  34 \n 31  32  33  33  31  32  30  29  31  31  32  32  32  33  33  33 \n 34  38  37  35  33  32  31  30  31  33  33  36  39  38  36  36 \n 37  38  37  36  38  39  41  41  41  42  42  42  39  34  26  23 \n 22  25  33  46 113  42  31  31  29  29  30  30  30  30  31  32 \n 32  30  30  32  30  32  32  32  33  33  38  41  45  46  44  47 \n 48  42  36  32  29  34  29  19  20  25  24  21  21  21  26  30 \n 31  34  36  36  36  36  33  34  34  34  34  32  34  32  32  34 \n 32  31  30  29  29  31  31  32  34  34  32  32  31  32  33  32 \n 31  32  33  31  30  30  29  31  30  32  33  33  33  34  32  32 \n 33  34  34  35  35  36  35  33  33  35  37  38  39  40  38  36 \n 33  34  35  35  38  41  41  42  43  42  42  40  39  39  34  28 \n 49  53  49  47  49  51  51  51  51  50  50  50  50  50  51  50 \n 51  49  50  49  49  50  47  47  47  48  48  45  45  45  44  48 \n 49  50  48  52  89  64  34  33  33  29  26  28  38  63 103 116 \n138 176 177 177 180 180 178 180 177 178 176 173 171 171 165 160 \n165 168 173 144  19  17  15  15  23  24  32  42  50  58  56  59 \n 56  55  18  16  21  32  48  39  26  25  26  29  39  43  42  45 \n 53  60  60  60  62  60  60  58  59  59  61  61  66 142 202 175 \n194 187 182 187 196 199 202 205 203 176 177 195 197 203 204 203 \n203 202 197 190 194 201 162  68  60  56  55  52  53  52  51  50 \n 52  52  51  49  49  50  50  50  49  48  47  47  47  49  51  50 \n 51  50  53  52  51  50  51  51  59  82 130 135 136 135 133 133 \n135 131  47  20  16  16  24  21  21  24  27  34  42  44  43  39 \n 35  35  34  33  32  32  31  33  34  34  34  31  30  30  30  30 \n 31  30  31  32  31  29  29  35  43  23  20  25  34  38  34  26 \n 25  30  38  40  40  40  41  40  46  53  58  58  59  59  59  57 \n 56  57  57  58  58  56  56  54  55  53  53  53  51  54  53  53 \n 54  54  53  53  54  52  53  54  52  51  52  53  52  53  53  54 \n 55  56  56  57  58  58  59  57  58  57  57  55  55  54  56  56 \n 57  58  57  54  54  53  55  52  54  54  53  52  48  49  49  49 \n 44  47  56  79 133 163  75  41  41  40  37  36  35  35  32  35 \n 36  35  32  32  33  32  32  34  32  32  32  33  32  31  31  34 \n 33  32  32  33  33  31  31  30  31  32  32  32  33  33  32  31 \n 35  39  38  34  33  31  32  31  33  33  32  36  38  38  36  36 \n 38  38  37  38  37  39  41  43  42  43  45  42  41  36  29  26 \n 25  27  33  35 114  55  32  32  33  30  30  31  31  31  30  32 \n 34  32  31  33  31  31  33  32  31  32  35  36  37  41  43  44 \n 48  45  40  36  33  38  27  19  20  27  25  21  21  21  26  29 \n 33  33  35  36  36  33  35  35  32  34  34  32  33  32  32  34 \n 34  34  32  31  32  31  32  32  34  34  34  34  32  31  32  31 \n 32  31  32  32  31  32  30  32  30  32  31  31  32  34  34  34 \n 34  33  33  35  35  37  35  33  33  35  37  39  40  40  37  36 \n 36  34  35  36  36  40  40  42  42  41  41  39  37  38  34  29 \n 52  53  49  48  48  48  48  50  52  50  50  48  50  49  49  50 \n 51  51  50  49  47  47  46  47  47  46  48  48  44  46  46  46 \n 47  47  47  43  76  87  45  33  30  30  25  25  29  43  97 106 \n115 154 180 175 179 179 178 174 173 175 174 172 171 172 169 167 \n175 177 177 152  25  17  15  15  22  24  34  46  46  55  57  59 \n 58  58  19  16  21  31  44  38  25  25  27  28  37  44  43  43 \n 53  60  61  61  63  60  60  58  61  61  63  62  62 117 206 182 \n199 173 180 182 182 174 178 176 183 175 173 184 202 193 183 194 \n194 193 184 171 196 199 178  77  61  56  55  53  53  52  50  50 \n 52  53  52  49  48  49  50  49  50  49  49  50  46  48  51  52 \n 51  51  53  53  52  53  51  51  56  59 119 130 131 134 134 134 \n139 137  46  20  16  16  23  20  19  22  29  35  42  44  41  38 \n 38  34  34  34  31  32  33  33  33  33  33  32  32  31  29  30 \n 31  31  32  31  30  32  31  36  44  21  18  23  34  40  33  28 \n 27  29  41  45  43  40  41  41  45  53  59  58  56  57  56  56 \n 56  56  55  57  56  56  55  54  54  52  53  54  51  52  52  52 \n 54  55  54  53  53  54  54  54  55  54  53  53  51  52  52  53 \n 55  55  56  56  57  58  57  56  58  58  54  55  55  57  57  56 \n 57  59  58  57  59  55  55  56  57  55  56  53  50  50  49  52 \n 48  45  44  43  54  94 137  69  41  39  36  36  34  34  34  35 \n 36  35  33  34  33  31  32  32  32  31  33  32  32  32  33  33 \n 32  31  33  31  32  32  32  31  32  32  32  33  33  32  33  34 \n 34  37  39  36  33  31  33  32  31  32  34  35  37  38  37  37 \n 39  38  40  37  39  42  42  43  44  47  48  47  45  43  36  33 \n 27  28  33  37  94  84  34  34  35  33  32  34  37  36  35  34 \n 35  35  34  33  34  34  34  33  32  33  34  34  36  37  39  41 \n 45  48  44  44  40  42  28  21  23  28  24  21  21  22  27  28 \n 33  34  35  36  36  35  33  34  34  33  33  34  34  34  34  35 \n 37  34  33  31  31  30  31  31  32  34  33  35  34  33  33  34 \n 33  30  31  31  30  31  30  31  30  29  31  31  32  32  31  31 \n 34  33  34  36  38  38  36  33  34  35  37  38  39  38  37  36 \n 37  36  36  35  35  37  40  42  43  43  41  38  38  38  37  31 \n 48  47  48  47  49  50  48  49  52  51  51  49  50  50  49  49 \n 50  50  50  49  46  48  48  48  49  47  48  48  44  45  45  46 \n 48  46  47  46  58  89  67  35  33  32  25  23  28  33  77  99 \n105 126 174 174 174 175 174 173 173 174 174 171 174 178 181 180 \n183 183 180 160  26  18  16  15  20  25  31  41  46  53  57  60 \n 59  57  20  18  20  29  42  40  27  27  27  27  36  43  44  47 \n 52  61  63  62  60  61  61  60  60  58  62  62  63 104 212 201 \n198 178 182 191 191 177 181 179 178 182 169 187 197 176 170 187 \n177 182 178 166 193 199 185  81  60  55  54  52  53  50  51  50 \n 52  53  51  48  49  48  49  50  49  49  50  49  48  48  51  51 \n 52  52  53  53  54  53  52  50  54  53 103 130 132 135 134 147 \n186 207  45  20  16  16  24  20  18  21  31  36  42  43  42  39 \n 37  34  34  33  34  35  33  32  32  33  33  33  32  31  30  31 \n 31  31  31  30  31  31  32  35  44  22  18  22  33  41  33  25 \n 27  29  40  48  43  39  42  42  44  51  59  58  57  59  57  56 \n 54  55  54  54  55  59  57  57  56  54  53  55  55  55  52  52 \n 53  56  55  52  54  56  55  54  55  55  53  52  52  53  53  54 \n 55  54  56  57  57  59  59  58  58  56  55  57  56  58  58  56 \n 57  56  57  58  59  54  56  58  57  57  56  53  50  48  50  49 \n 52  48  42  45  41  47  97 108  46  36  36  35  36  35  36  36 \n 36  34  33  35  33  32  32  32  32  33  33  32  32  32  32  32 \n 32  31  33  33  33  33  33  31  32  31  32  33  32  33  32  33 \n 34  36  38  35  32  32  33  33  34  32  33  34  37  38  38  37 \n 37  37  38  39  40  40  58  79 106 119 127 128 127 123 112 107 \n101  94  90  86 114 118  72  67  64  58  50  47  44  42  40  36 \n 38  38  37  37  35  34  32  32  32  35  36  36  39  38  38  39 \n 42  48  48  48  47  45  30  23  26  30  25  21  22  24  29  30 \n 35  36  37  37  36  36  34  35  35  35  35  35  35  35  35  37 \n 36  34  33  33  32  32  32  32  35  35  34  36  35  33  33  33 \n 34  32  33  33  32  31  32  32  31  30  31  30  30  31  32  31 \n 33  33  33  34  36  36  34  33  33  33  36  38  39  39  39  37 \n 35  37  36  36  36  38  42  41  42  42  40  39  40  41  39  33 \n 51  51  50  47  47  49  48  49  52  52  52  51  51  52  51  50 \n 49  48  50  48  46  47  48  47  47  46  46  45  44  43  46  45 \n 46  45  47  49  49  73  93  46  34  33  30  25  25  31  49  81 \n 98 107 154 172 176 176 172 176 175 171 173 181 178 177 182 182 \n183 181 182 158  38  17  15  14  18  22  28  39  47  52  58  62 \n 58  57  22  18  22  29  41  39  26  26  27  28  37  43  43  45 \n 50  56  62  62  61  61  61  62  61  60  63  64  66  87 211 207 \n206 197 200 206 207 208 205 204 200 198 195 198 189 195 190 184 \n185 185 182 175 198 188 195  91  59  56  54  53  53  50  50  50 \n 51  51  51  48  49  49  50  49  49  48  48  48  47  50  51  52 \n 51  51  52  53  53  53  51  52  55  56  79 129 135 149 193 233 \n243 225  45  19  17  17  22  20  21  23  31  36  41  42  43  41 \n 38  35  34  33  33  34  33  33  34  34  33  33  32  31  30  29 \n 32  31  31  31  31  32  29  33  47  24  18  23  35  43  33  26 \n 26  26  34  48  46  40  40  41  44  49  57  58  57  59  58  57 \n 55  55  56  55  56  61  64  66  67  67  66  73  78  67  61  60 \n 61  60  60  58  57  56  55  56  57  54  54  53  53  52  54  55 \n 55  56  58  58  58  57  55  57  57  57  56  57  57  58  58  58 \n 57  57  57  57  57  57  57  57  55  55  55  53  48  49  50  47 \n 47  45  47  47  45  40  46  85  84  37  35  35  36  35  35  37 \n 37  35  34  34  32  33  33  33  34  33  34  34  33  32  33  33 \n 33  32  33  33  33  33  33  31  31  30  31  29  32  33  31  33 \n 34  35  36  34  32  33  32  32  33  32  33  34  37  38  38  39 \n 38  39  39  48  86 134 164 164 157 150 146 147 148 148 151 152 \n155 158 159 160 165 166 168 169 168 167 170 168 167 167 164 160 \n161 160 155 151 149 144 134 129 122 111  96  88  82  75  66  60 \n 56  57  58  55  52  49  33  25  31  34  28  27  29  29  33  33 \n 37  39  40  40  38  39  37  36  37  38  37  37  34  35  36  38 \n 37  36  36  36  35  35  35  35  36  37  37  38  36  33  34  33 \n 33  32  32  31  32  31  30  30  29  31  30  30  29  31  32  31 \n 31  31  31  33  33  35  34  33  33  32  37  39  40  39  40  38 \n 35  35  35  37  37  39  41  41  41  42  40  41  43  40  36  32 \n 51  51  51  50  49  51  50  48  50  50  51  51  53  50  50  48 \n 50  50  50  48  48  48  48  47  47  45  44  44  45  46  45  45 \n 45  46  46  48  48  59 101  65  36  34  30  25  24  28  40  66 \n 93  99 127 167 180 178 173 177 183 184 180 182 184 184 187 184 \n181 181 182 169  46  17  15  14  16  21  28  40  46  51  58  60 \n 58  59  26  17  21  27  40  41  27  26  28  29  36  45  44  43 \n 48  53  59  60  61  60  61  63  63  62  61  63  67  76 204 208 \n207 206 205 206 207 207 208 206 206 208 207 207 204 205 204 203 \n202 203 200 199 198 199 197  99  59  56  54  55  53  52  50  51 \n 51  50  51  47  49  50  51  51  50  49  48  48  48  49  48  51 \n 51  51  52  53  53  52  52  50  53  55  63 116 166 214 236 245 \n239 221  40  20  15  16  22  21  21  24  33  37  43  42  41  40 \n 37  34  33  32  32  31  33  33  34  33  32  32  32  30  31  30 \n 30  30  31  30  32  33  30  34  50  25  18  24  35  45  34  25 \n 23  25  32  43  49  42  38  40  43  51  57  58  58  60  59  58 \n 57  57  55  55  55  63  67  68  71  73  73  72  76  71  68  69 \n 69  67  70  65  64  67  65  61  60  59  62  59  60  57  58  59 \n 58  58  58  58  58  59  57  56  58  58  56  56  56  58  58  58 \n 58  56  56  56  56  56  57  56  54  55  54  51  49  49  49  44 \n 46  45  47  48  48  43  39  49  88  48  37  34  33  34  35  36 \n 37  36  35  32  32  32  32  31  32  32  33  33  32  31  33  32 \n 32  33  34  33  32  31  32  30  32  30  32  33  33  31  33  33 \n 34  36  35  35  32  32  33  32  33  32  33  35  38  39  37  39 \n 38  40  54  93 124 107  87  78  75  71  71  71  71  70  70  71 \n 73  74  78  79  78  81  83  89  86  89  87  85  90  98 102  95 \n 96 103 105 103 107 110 124 134 150 160 161 161 166 168 168 167 \n162 161 154 147 134 121 102  85  73  62  46  37  36  37  35  33 \n 40  42  44  45  42  42  42  39  38  39  37  37  38  40  39  40 \n 39  38  37  37  36  40  38  37  39  40  40  42  40  38  38  36 \n 36  35  33  31  32  33  32  30  31  30  31  30  30  31  31  33 \n 31  33  34  34  35  34  34  33  33  32  37  38  41  40  40  39 \n 36  36  34  36  38  38  40  41  41  42  40  42  41  38  35  33 \n 52  51  51  51  50  49  48  47  50  49  50  50  50  50  49  49 \n 49  48  47  49  49  50  49  49  49  45  45  46  46  45  45  46 \n 46  45  45  47  49  46  84  90  46  33  30  27  25  26  31  46 \n 84  92 100 132 175 183 184 183 184 180 182 181 183 184 183 182 \n179 180 178 173  56  19  16  14  16  22  29  39  44  49  56  59 \n 59  60  26  19  20  25  39  42  27  26  28  27  35  50  46  44 \n 46  53  60  58  56  58  59  62  62  62  62  62  69  71 192 208 \n208 206 207 206 208 205 205 205 207 206 206 205 206 205 206 205 \n204 204 203 203 203 200 201 116  57  56  56  55  52  51  51  51 \n 52  52  52  49  48  50  51  50  50  50  49  49  48  47  49  49 \n 51  51  52  52  52  54  54  51  50  53  54  93 165 174 191 194 \n184 166  30  21  15  17  23  21  20  23  32  36  42  42  43  41 \n 37  34  34  32  34  32  32  33  34  32  31  31  30  29  32  31 \n 30  30  31  30  32  32  31  58  57  26  19  22  35  50  36  24 \n 23  25  30  38  49  45  40  41  45  51  57  59  59  62  59  57 \n 56  55  56  56  54  64  69  84  89  86  79  78  77  76  76  74 \n 71  70  73  70  69  69  70  69  66  66  68  69  68  66  66  66 \n 61  62  63  64  61  62  61  56  56  57  56  56  55  56  56  56 \n 56  57  55  55  57  57  57  57  54  52  54  52  51  49  46  44 \n 45  46  48  48  47  48  42  40  68  75  36  36  35  36  34  35 \n 41  41  34  32  33  33  34  33  33  32  33  33  33  33  32  33 \n 32  31  31  34  34  32  32  31  32  31  31  33  32  31  31  32 \n 33  34  34  35  32  32  32  33  34  32  33  35  38  39  38  38 \n 41  48  69  61  48  43  45  46  44  42  41  41  43  43  43  43 \n 44  46  44  45  47  46  49  51  50  48  48  50  52  52  57  56 \n 52  50  51  57  51  48  52  50  45  48  50  52  53  56  65  72 \n 84  91 107 116 132 148 154 158 164 168 172 170 170 164 155 143 \n131 118 106  94  85  78  66  61  56  51  48  47  43  43  45  43 \n 43  44  43  43  45  44  44  43  44  45  44  46  46  45  43  42 \n 40  38  37  35  32  31  31  31  31  31  30  29  30  31  33  33 \n 31  34  34  33  32  32  33  32  33  34  36  40  40  41  40  39 \n 38  36  36  36  38  40  41  41  41  42  40  40  39  37  38  36 \n 53  52  51  51  50  50  49  49  50  49  49  49  51  52  48  49 \n 49  50  48  49  48  48  47  46  48  46  47  47  45  44  47  45 \n 46  45  45  45  47  49  67  96  67  34  31  28  24  27  28  37 \n 75  90  92  99 151 183 183 181 180 179 180 182 182 184 181 184 \n183 185 186 178  62  18  16  14  16  22  27  38  45  48  56  61 \n 57  60  30  19  19  23  38  40  25  26  27  27  33  49  49  44 \n 45  51  62  63  60  59  58  58  59  60  62  63  67  65 176 211 \n199 196 205 206 208 184 169 199 205 206 205 205 204 206 206 207 \n206 206 204 205 202 202 204 132  55  58  56  55  53  52  51  52 \n 52  51  51  50  49  50  49  50  51  50  50  50  48  49  50  50 \n 50  51  52  52  50  52  51  49  52  54  55  72 179 225 229 228 \n230 214  35  21  16  17  23  22  22  26  35  37  41  43  43  40 \n 37  34  35  34  34  33  34  33  33  32  32  30  30  30  30  31 \n 31  31  31  32  32  32  30  76  58  24  19  22  35  50  36  24 \n 23  22  28  36  47  49  43  43  46  51  57  59  59  61  60  59 \n 56  57  57  56  57  62  69 129 180 166 153 143 124 115 104  92 \n 81  79  78  76  73  70  69  72  71  73  71  74  73  71  70  70 \n 69  66  69  66  64  62  60  55  54  55  56  55  54  56  55  55 \n 56  56  54  55  56  55  56  56  57  55  56  54  53  51  47  46 \n 44  46  47  48  48  50  44  39  54  90  35  36  36  36  36  35 \n 40  43  35  33  33  33  34  33  31  32  33  33  33  32  33  35 \n 34  32  31  33  33  31  31  32  31  31  32  32  33  33  32  34 \n 33  35  36  37  35  33  34  34  33  33  35  36  37  37  38  39 \n 44  49  48  38  30  31  38  40  38  39  41  41  41  43  40  41 \n 42  43  43  41  41  41  42  46  46  45  44  49  50  50  50  53 \n 52  53  54  53  49  47  44  43  42  43  43  42  41  45  47  49 \n 49  45  45  46  48  54  58  63  69  72  79  89  99 106 120 131 \n151 166 172 178 185 185 181 175 167 160 145 133 117 103  88  77 \n 67  60  56  53  50  51  52  53  55  56  56  56  55  53  51  50 \n 45  41  39  38  34  33  33  32  32  32  32  29  30  32  32  34 \n 34  34  34  33  32  33  33  33  35  35  37  39  40  41  40  40 \n 39  37  36  37  40  41  41  41  42  42  39  40  41  39  38  37 \n 54  55  53  51  50  48  50  48  48  49  50  49  51  50  48  49 \n 49  48  50  50  47  47  47  45  45  47  48  45  42  44  44  45 \n 47  44  43  45  47  49  56  80  87  48  32  30  26  27  27  33 \n 60  90  88  89 104 142 176 178 182 180 179 182 178 181 186 188 \n188 187 180 181  70  19  16  14  14  20  23  34  45  50  55  60 \n 56  62  30  18  18  22  36  41  27  26  27  28  33  46  52  46 \n 46  50  60  62  62  61  58  57  58  58  59  62  63  65 157 216 \n193 184 181 198 184 211 163 205 191 194 197 198 199 198 203 203 \n195 166 179 171 185 203 206 150  53  57  56  55  53  51  50  50 \n 50  51  52  51  49  51  49  50  49  49  48  49  49  51  51  49 \n 49  52  52  52  50  50  50  50  50  52  58  58 146 241 241 242 \n246 218  34  20  16  15  21  21  22  28  36  38  39  43  44  42 \n 35  33  34  33  33  33  33  33  33  32  32  32  32  31  31  31 \n 31  31  30  31  32  32  33  38  53  25  18  21  36  51  38  25 \n 22  23  27  35  45  51  46  45  46  50  57  59  57  59  59  60 \n 56  56  54  56  59  62  68 126 212 205 206 205 206 207 204 200 \n193 189 181 171 160 154 147 141 131 128 119 117 115 114 108 108 \n104 103 102  98  69  62  63  55  52  54  52  54  54  56  55  55 \n 55  56  55  56  55  55  57  56  55  55  56  54  53  49  49  46 \n 45  45  45  47  48  46  45  42  46  82  62  32  38  36  37  36 \n 36  38  35  33  33  33  34  33  32  32  34  33  32  32  32  34 \n 33  32  33  33  30  32  32  33  32  31  33  32  31  32  33  32 \n 33  35  38  38  36  35  33  32  32  31  33  36  39  38  38  38 \n 40  39  30  29  35  37  41  41  39  39  42  43  43  43  42  43 \n 41  44  44  44  43  44  44  47  47  49  49  53  52  51  50  50 \n 51  53  51  52  52  50  47  47  48  46  43  44  43  43  45  44 \n 43  44  44  43  44  42  41  40  41  43  42  42  45  47  50  52 \n 53  55  64  69  73  81  96 113 138 158 168 185 209 207 209 213 \n217 212 204 198 185 173 161 150 136 126 115 103  93  84  75  65 \n 58  54  46  40  38  34  33  32  31  30  31  32  29  30  31  33 \n 35  33  33  31  31  33  31  33  35  34  36  40  40  42  42  41 \n 41  38  38  39  40  40  40  42  42  42  41  41  40  39  39  36 \n 53  53  53  52  51  49  50  49  47  47  49  48  48  49  48  47 \n 49  47  49  47  48  49  48  46  47  47  47  45  43  43  44  46 \n 46  44  43  43  46  47  49  64  92  68  35  30  27  29  29  29 \n 48  81  93  90  94 106 149 173 181 181 182 181 180 182 183 182 \n183 183 176 175  87  20  16  15  14  20  24  35  43  49  53  60 \n 55  61  29  17  19  23  36  45  28  24  27  28  34  46  57  46 \n 48  50  61  62  63  64  60  59  59  59  60  60  62  65 145 213 \n205 204 187 186 186 206 167 213 174 177 188 178 183 182 186 185 \n204 169 162 179 156 204 207 161  54  56  56  56  54  52  52  50 \n 49  50  51  50  49  50  51  51  49  51  48  47  50  50  48  49 \n 49  52  51  53  51  50  50  50  49  51  57  58 110 225 245 246 \n245 202  27  19  14  15  20  20  23  30  36  38  38  41  44  44 \n 37  33  34  33  32  34  33  35  35  34  32  32  33  31  30  30 \n 32  32  31  31  33  33  34  37  50  25  19  23  35  52  40  25 \n 23  25  27  35  42  50  47  47  47  51  59  59  56  57  58  58 \n 60  58  58  58  57  64  69 114 213 205 207 206 206 206 206 206 \n206 206 205 203 204 202 204 202 201 200 200 199 197 195 195 192 \n190 189 190 177  74  63  63  56  52  52  52  53  54  56  57  57 \n 54  56  56  56  56  58  56  56  56  54  54  54  53  51  49  47 \n 48  45  44  47  47  47  46  41  42  63  86  37  35  37  36  36 \n 36  36  33  33  33  33  34  33  32  33  34  34  33  33  33  34 \n 34  33  33  33  32  34  34  33  33  33  33  33  33  31  31  32 \n 35  36  39  39  39  35  34  34  33  32  35  37  39  38  38  38 \n 39  31  27  32  38  40  41  41  38  37  41  40  40  42  43  45 \n 43  42  44  44  43  44  46  49  50  50  52  53  53  51  50  51 \n 53  54  52  53  52  53  51  50  50  49  49  49  47  47  47  46 \n 47  48  46  46  46  47  44  44  44  44  44  43  45  44  46  45 \n 48  49  51  52  53  52  50  53  56  64  72  85 109 107 112 131 \n158 181 203 228 245 247 247 245 243 239 232 225 211 194 171 143 \n106  79  52  47  40  36  34  33  32  32  31  32  30  30  31  31 \n 35  35  34  31  32  32  32  32  32  33  35  40  41  42  42  41 \n 41  42  39  40  41  40  39  42  42  42  40  40  41  39  38  37 \n 51  51  51  51  51  52  49  49  49  49  48  49  49  50  48  49 \n 48  49  48  46  46  45  46  45  47  47  45  44  44  45  47  45 \n 44  44  44  43  44  45  47  52  87  89  45  29  28  30  32  31 \n 37  61  91  90  90  92 106 126 163 179 184 187 186 185 176 173 \n172 172 170 178 106  22  17  16  15  19  27  34  41  48  55  61 \n 56  62  34  17  20  21  35  43  29  23  25  27  33  44  56  49 \n 46  48  58  63  63  61  61  62  62  61  62  60  60  67 123 211 \n207 207 210 208 205 206 203 209 203 203 187 187 186 195 193 183 \n197 142 181 148 175 205 204 180  52  55  56  56  54  52  52  51 \n 50  51  50  50  50  51  48  47  49  49  49  47  48  49  49  48 \n 50  51  51  51  51  49  51  50  50  50  54  56  72 167 221 200 \n168 116  25  18  16  14  21  19  22  29  34  37  36  41  45  42 \n 36  34  34  33  34  34  34  34  34  33  32  31  31  30  30  30 \n 31  33  32  32  33  34  34  36  48  25  20  21  35  51  43  26 \n 22  24  25  33  39  48  52  49  47  52  59  61  58  60  58  59 \n 61  62  60  59  58  67  79 103 215 191 197 183 198 207 207 207 \n206 206 206 205 203 204 204 204 205 204 204 202 203 201 203 202 \n202 202 203 199  71  67  67  59  51  52  53  53  55  56  55  57 \n 58  58  59  57  57  58  58  56  56  56  54  54  55  53  52  48 \n 47  46  47  47  47  48  51  45  37  50  91  47  38  37  36  34 \n 35  36  33  32  33  33  33  34  33  32  34  33  32  32  33  34 \n 31  32  32  34  33  34  35  35  33  32  32  34  34  34  32  34 \n 33  36  37  39  38  34  33  34  33  33  34  36  38  38  38  40 \n 35  25  27  32  38  39  40  39  37  35  39  39  40  41  42  46 \n 47  44  45  45  43  46  48  50  52  52  51  51  52  50  50  51 \n 53  54  52  51  51  51  51  51  52  52  52  51  50  50  50  49 \n 49  49  48  48  49  49  51  50  49  52  50  49  49  50  49  48 \n 51  51  52  52  51  50  47  49  49  51  48  46  47  48  50  52 \n 56  55  65  75  93 110 143 167 191 214 230 241 251 254 254 254 \n241 214 162 107  57  40  37  34  34  32  31  31  31  30  32  32 \n 34  37  35  34  31  32  31  32  32  32  35  37  38  43  42  42 \n 42  41  40  41  41  40  39  40  41  40  41  42  41  40  39  37 \n 52  51  53  53  50  50  50  49  49  48  47  48  49  51  49  49 \n 50  49  47  47  47  45  46  44  46  47  46  46  45  46  46  46 \n 46  45  45  45  43  41  48  50  70  91  66  31  29  32  34  33 \n 33  47  84  91  88  89  94  97 117 140 165 181 189 191 186 182 \n178 176 169 160 101  23  17  15  18  19  34  40  39  47  54  60 \n 56  59  38  18  17  20  32  41  30  25  26  26  34  40  53  50 \n 44  48  56  63  62  61  62  63  61  60  61  61  61  68 110 207 \n208 208 207 208 207 208 207 207 207 207 206 206 205 207 202 201 \n205 193 195 188 190 202 202 191  57  56  57  55  54  52  51  50 \n 49  50  50  49  48  50  49  48  48  49  49  48  49  48  49  47 \n 49  49  51  51  50  47  51  51  50  51  52  53  60 118 163 145 \n138 111  24  16  15  15  21  20  24  29  33  33  40  42  45  43 \n 36  35  34  34  34  34  35  34  34  33  32  31  31  30  30  31 \n 31  32  31  32  32  33  35  37  45  25  19  22  33  48  43  25 \n 20  23  27  35  38  47  55  51  47  52  59  61  62  61  61  62 \n 61  61  61  60  60  62  75  92 213 179 195 188 196 206 205 206 \n205 206 205 206 203 190 190 198 198 205 204 202 204 204 202 204 \n204 203 203 204  78  74  72  59  52  54  53  53  53  54  55  56 \n 58  60  60  60  57  59  59  58  57  56  56  54  53  53  52  50 \n 49  50  49  49  49  49  49  46  38  46  83  60  40  36  36  36 \n 35  36  34  32  32  33  34  34  33  32  34  35  33  33  34  33 \n 33  33  33  33  32  34  34  35  34  32  33  35  34  35  34  34 \n 35  36  38  39  39  35  33  34  34  33  33  34  36  38  39  42 \n 35  25  25  29  35  39  37  36  35  34  37  38  39  42  44  47 \n 47  48  46  47  46  47  50  51  51  51  51  51  50  49  49  50 \n 52  53  52  51  50  51  51  51  52  51  51  50  50  51  50  50 \n 49  51  50  48  49  49  50  49  51  51  49  48  49  49  50  50 \n 52  53  52  51  52  50  47  50  49  50  47  46  45  44  45  44 \n 45  46  46  48  52  51  54  62  75  91 110 128 151 179 215 235 \n245 247 226 203 159  94  37  38  35  34  32  29  31  30  31  32 \n 32  35  34  33  33  32  32  32  33  34  34  36  39  41  41  42 \n 42  41  39  42  40  41  39  41  41  42  42  43  42  41  39  38 \n 52  51  51  52  51  49  50  49  49  47  48  49  48  48  47  49 \n 49  47  47  48  47  46  45  45  47  47  46  46  44  43  43  46 \n 45  45  45  44  44  44  43  47  57  83  86  45  33  37  38  36 \n 34  37  67  93  91  88  91  90  93 100 108 118 124 117 112 108 \n101 100  99 100  82  32  19  18  20  20  32  39  36  46  55  57 \n 55  58  41  17  17  20  30  38  30  24  25  26  30  42  51  53 \n 45  46  56  62  62  61  61  63  63  62  61  60  63  66  95 201 \n206 207 207 206 208 207 208 207 207 207 207 205 206 206 206 206 \n205 207 204 205 204 204 206 199  64  67  59  53  53  52  51  50 \n 49  50  50  49  49  50  50  50  49  48  49  49  49  48  46  46 \n 47  48  51  51  51  48  49  50  51  50  48  51  58  85 125 137 \n140 104  23  18  13  14  19  20  25  30  31  32  40  43  46  43 \n 36  35  33  34  31  32  33  33  34  33  33  33  32  31  32  32 \n 32  31  31  31  31  35  36  38  49  24  20  21  33  47  40  24 \n 21  23  29  35  38  46  57  55  48  52  60  60  63  64  65  65 \n 65  63  61  61  59  61  74  82 204 188 176 200 182 181 183 188 \n193 196 191 194 201 169 174 190 194 202 201 199 203 203 202 192 \n169 190 198 207  93  67  66  57  54  54  54  53  54  54  54  55 \n 57  59  58  58  57  58  60  59  55  55  56  55  54  54  52  50 \n 49  50  51  51  50  48  47  45  41  45  73  86  36  38  38  35 \n 35  35  36  34  33  34  34  33  33  33  35  36  35  35  35  33 \n 33  32  33  33  33  34  33  32  33  32  34  34  34  35  35  33 \n 35  35  38  40  40  37  33  35  35  33  33  33  36  38  40  43 \n 34  24  25  30  39  40  36  34  32  32  36  37  38  42  45  47 \n 48  49  46  46  48  46  47  47  51  51  51  50  50  49  48  49 \n 50  52  51  50  51  52  52  51  52  50  50  50  51  53  51  50 \n 51  51  50  49  52  53  52  51  54  52  52  51  52  51  52  51 \n 52  53  51  48  48  46  46  48  49  50  49  47  47  48  47  45 \n 44  43  45  45  45  45  46  46  49  51  55  56  61  63  73  72 \n 79  90 104 123 153 176 123  53  36  34  31  31  29  31  31  32 \n 33  34  35  33  32  33  30  32  32  33  34  36  40  42  41  40 \n 41  39  39  39  39  40  39  40  41  41  41  41  42  42  40  37 \n 53  53  53  53  52  51  51  49  48  48  49  50  48  49  50  50 \n 48  49  47  48  47  45  47  46  48  48  47  45  47  45  42  45 \n 45  45  45  45  45  44  41  45  53  73  91  66  34  38  42  42 \n 37  38  53  86  95  92  92  90  87  90  93  97 103 104 104 105 \n 97  98  99 100  86  37  22  22  24  23  26  32  35  43  53  56 \n 54  56  43  18  18  20  30  40  29  24  24  25  32  42  52  53 \n 45  46  56  63  63  62  61  62  61  61  60  60  62  66  86 194 \n207 206 207 207 207 206 206 206 208 206 206 206 206 205 205 205 \n206 206 204 205 205 204 203 203  77  86  57  53  54  52  52  50 \n 51  49  50  50  48  47  47  48  49  48  48  49  49  49  47  47 \n 47  48  51  52  51  49  49  51  50  51  50  50  55  70 126 150 \n138 103  22  15  13  15  20  20  23  31  31  34  40  43  48  45 \n 38  36  34  34  34  34  34  33  33  32  33  32  33  31  32  33 \n 32  32  33  33  31  34  36  35  51  22  19  21  34  47  39  24 \n 21  23  30  36  38  44  55  55  49  52  60  62  64  65  64  64 \n 65  65  61  62  60  59  72  75 195 193 187 198 172 191 178 190 \n178 183 176 170 184 172 174 178 200 189 184 180 193 184 185 187 \n158 192 202 209 104  63  66  57  53  55  53  52  54  56  55  56 \n 58  59  58  57  57  58  58  58  55  54  54  55  55  55  52  52 \n 51  50  50  51  50  48  48  47  43  42  60 104  32  37  37  37 \n 36  34  34  33  32  34  34  33  34  33  35  35  35  36  36  33 \n 35  35  34  34  33  34  32  31  33  33  34  35  36  37  36  34 \n 35  36  38  39  40  38  33  34  34  33  35  35  36  36  41  45 \n 36  24  25  31  39  41  36  33  31  31  35  36  38  39  44  48 \n 50  49  48  49  50  49  48  49  51  49  51  50  50  50  49  49 \n 49  51  51  51  51  50  50  50  51  50  50  52  52  53  53  52 \n 51  51  51  51  53  54  53  54  56  53  53  51  51  51  51  51 \n 50  51  50  48  48  48  47  46  49  50  49  49  48  48  48  47 \n 47  47  48  48  49  48  47  48  49  48  48  49  49  51  54  56 \n 55  53  52  55  71  92 133 116  43  34  32  32  30  31  31  32 \n 33  35  35  35  33  31  29  30  32  33  32  36  39  42  41  40 \n 40  39  38  38  39  39  40  40  43  42  43  42  42  41  39  37 \n 53  53  53  52  49  50  51  50  47  48  50  50  48  48  49  50 \n 49  49  46  48  47  47  47  48  48  47  46  47  47  46  43  44 \n 45  44  45  45  45  43  42  44  49  57  89  84  43  42  47  46 \n 45  42  42  66 101  95  93  91  87  87  88  88  92  97  99  98 \n 94  93  97 101  92  44  29  27  29  27  32  36  39  46  55  55 \n 50  56  44  17  18  20  29  40  31  26  26  26  32  41  50  54 \n 48  47  56  62  62  60  59  60  61  60  61  61  61  65  82 147 \n177 187 195 201 204 206 207 208 208 208 207 206 206 206 206 207 \n206 206 204 204 204 205 203 212  98 106  57  53  54  52  51  50 \n 50  49  49  48  47  46  47  47  46  47  48  48  49  46  47  45 \n 47  49  51  52  51  50  49  48  50  50  48  48  53  54 115 163 \n179 123  20  17  14  14  20  18  22  30  31  31  37  43  47  43 \n 38  37  34  34  33  34  36  34  34  33  32  31  30  32  32  33 \n 32  32  34  34  33  31  34  37  52  23  18  20  34  48  39  24 \n 22  22  28  36  42  43  52  58  52  54  60  63  65  65  65  64 \n 64  64  61  62  61  59  74  69 181 211 208 201 177 180 189 200 \n190 181 187 178 188 180 174 192 191 182 176 179 186 170 186 193 \n161 197 197 212 113  61  66  61  55  54  58  54  54  54  53  54 \n 56  57  57  57  55  58  57  57  56  54  55  54  56  56  53  53 \n 52  51  51  49  51  48  47  47  46  40  52 105  47  38  36  37 \n 35  34  32  32  32  33  33  33  34  34  35  35  34  34  34  34 \n 33  32  33  32  31  35  31  31  33  33  33  34  37  36  36  35 \n 34  35  38  39  42  39  34  34  34  34  35  36  36  36  39  48 \n 35  21  26  32  38  41  36  32  30  33  37  39  40  40  44  48 \n 51  51  51  52  52  51  50  51  52  49  51  49  50  51  50  50 \n 51  50  52  51  51  49  49  49  49  49  51  51  51  51  52  51 \n 51  52  53  52  50  53  53  54  53  51  51  51  51  52  52  50 \n 52  51  52  49  47  47  48  49  50  50  48  47  47  47  47  49 \n 48  49  51  47  49  49  49  50  51  50  49  50  52  49  49  47 \n 47  45  44  43  42  45  54  91  91  42  32  32  31  30  30  31 \n 33  34  35  34  33  31  31  29  34  34  34  36  39  40  41  40 \n 39  38  38  38  40  40  39  42  43  43  41  42  43  42  40  37 \n 53  54  52  52  50  49  50  49  50  49  52  50  48  49  50  48 \n 50  50  47  48  47  47  48  48  47  47  45  47  47  46  45  45 \n 45  45  45  45  45  45  43  44  46  47  83  92  63  42  48  48 \n 47  45  41  45  92 102  97  91  87  86  91  90  91  94  94  98 \n 95  98 106 106 103  50  38  38  39  39  45  48  42  45  58  55 \n 50  52  43  18  18  20  26  38  31  24  26  26  30  42  48  57 \n 49  47  58  64  62  61  60  62  62  61  60  59  61  63  69  74 \n 90  98 108 116 138 154 167 183 191 197 203 207 208 208 208 209 \n205 205 204 204 204 203 205 212 109 124  61  53  52  52  50  50 \n 50  48  50  47  46  46  45  46  46  47  47  47  47  48  48  45 \n 46  48  49  51  51  48  48  48  50  51  44  47  48  52  94 166 \n190 119  21  14  12  14  19  19  22  29  29  31  37  41  47  45 \n 40  37  37  35  34  35  36  36  36  35  33  32  30  31  30  32 \n 32  34  33  33  34  33  35  39  50  22  17  19  35  47  38  24 \n 23  23  26  34  41  43  51  58  54  56  60  62  64  65  64  64 \n 63  62  62  62  60  58  70  68 171 211 207 208 198 200 205 208 \n207 205 205 206 204 203 198 199 197 199 198 196 195 194 195 194 \n182 195 195 210 127  61  65  60  57  55  58  57  55  55  56  56 \n 55  56  58  59  57  59  58  58  56  53  54  54  54  55  55  54 \n 54  53  51  51  52  50  46  47  48  44  46  85  75  36  37  36 \n 34  33  34  33  33  34  33  32  34  34  36  35  35  34  32  31 \n 34  34  33  32  32  33  32  32  33  32  33  34  36  35  35  35 \n 36  37  39  41  40  37  33  33  33  34  35  36  37  36  38  46 \n 37  21  26  32  39  39  34  33  32  34  37  40  40  40  42  46 \n 52  52  53  56  52  51  49  49  51  50  50  48  48  49  49  51 \n 57  55  56  55  55  53  51  52  50  51  53  51  51  52  52  52 \n 51  50  53  52  53  52  54  54  54  54  53  53  51  53  54  53 \n 53  54  53  51  51  49  49  49  50  49  49  48  47  49  47  51 \n 49  51  52  50  49  48  44  46  49  49  49  49  50  50  49  47 \n 47  44  43  42  42  40  40  55  84  63  34  33  31  31  29  31 \n 32  34  35  35  32  31  31  32  34  34  34  36  39  41  41  41 \n 40  37  39  37  37  40  41  42  43  43  41  42  45  43  39  36 \n 53  53  52  52  52  50  50  49  50  51  49  49  50  49  50  51 \n 48  47  47  47  47  49  47  45  44  45  44  45  46  45  46  44 \n 43  44  44  44  45  46  45  42  45  45  66  93  80  57  50  51 \n 48  45  40  41  63  96 106  95  90  87  93  91  96  97  99 105 \n113 114 116 113  99  63  53  52  52  54  55  56  50  48  64  54 \n 49  50  49  20  20  20  25  38  32  24  25  25  31  43  45  54 \n 54  51  58  61  62  62  60  61  60  60  61  59  59  61  67  68 \n 71  75  73  67  69  69  68  74  77  79  89  99 114 128 144 150 \n160 169 173 177 182 185 190 196 109  97  79  51  53  51  50  51 \n 50  51  50  49  47  45  45  46  46  46  44  46  49  51  46  45 \n 45  47  49  50  50  48  48  48  51  50  47  48  47  51  69 118 \n143  96  21  13  14  16  26  26  24  28  30  32  37  42  46  44 \n 39  38  36  33  35  34  35  36  35  34  33  32  32  31  30  32 \n 33  33  33  34  34  34  36  40  49  21  19  21  32  44  38  23 \n 22  22  28  36  42  44  50  57  55  58  61  62  64  63  64  65 \n 65  63  61  61  60  57  68  72 157 211 210 209 208 208 208 208 \n207 208 207 208 207 206 207 206 206 206 207 208 206 206 206 205 \n205 205 205 209 143  65  62  60  55  55  55  55  55  56  57  55 \n 56  58  58  57  57  57  56  55  56  55  55  54  54  54  53  52 \n 52  53  52  52  49  49  48  47  48  45  44  61 100  40  36  34 \n 34  33  32  34  35  33  33  33  35  35  36  36  36  35  33  32 \n 34  32  32  32  31  31  31  32  31  31  33  34  35  35  34  34 \n 36  37  38  40  40  39  37  34  34  33  35  36  37  36  40  48 \n 37  22  24  32  40  41  34  34  33  34  37  40  41  41  43  45 \n 50  51  54  55  54  50  52  49  52  51  51  49  50  50  50  51 \n 58  61  62  62  61  61  62  61  61  60  60  61  60  59  55  56 \n 56  54  55  55  54  55  58  58  56  57  59  57  57  57  58  58 \n 57  55  53  50  51  51  48  49  52  49  48  48  49  50  49  50 \n 51  50  49  47  46  46  46  45  47  49  49  50  50  48  47  46 \n 46  46  46  43  42  42  39  40  58  77  45  34  32  30  30  31 \n 31  35  36  36  34  33  32  33  32  32  33  35  38  40  42  42 \n 41  37  38  38  38  40  42  42  42  40  41  42  43  43  40  38 \n 49  52  51  52  51  51  49  50  49  49  47  48  51  50  49  48 \n 49  47  47  48  49  49  46  46  45  44  45  47  48  44  44  44 \n 45  45  45  44  44  45  44  43  42  45  54  83  90  72  51  50 \n 48  44  38  39  46  67  98 105  99  96  98 100 103 109 111 119 \n122 117 119 104  78  72  71  68  62  62  60  59  56  50  65  60 \n 48  50  51  23  17  18  23  36  32  24  26  26  30  41  47  57 \n 55  52  58  59  63  61  61  61  60  61  61  60  60  60  62  62 \n 68  74  72  67  70  67  68  70  70  68  67  66  67  66  69  72 \n 77  78  79  80  84  89  94  96  78 105  73  51  53  51  50  51 \n 50  49  49  49  46  45  44  44  46  44  44  45  45  47  47  46 \n 46  48  50  51  51  51  48  47  48  49  46  46  46  50  60 108 \n130  88  23  15  15  16  29  37  26  30  32  33  38  45  44  43 \n 41  38  36  36  35  35  36  35  34  32  33  31  33  32  32  33 \n 33  34  33  33  35  36  36  40  52  23  19  21  33  43  38  24 \n 24  23  30  37  43  45  48  55  57  58  61  61  63  62  63  63 \n 65  63  63  60  59  61  68  73 148 211 208 209 209 210 209 208 \n208 207 209 207 209 208 208 208 208 207 208 206 208 206 206 206 \n205 205 205 209 151  66  63  60  57  57  57  56  56  55  57  56 \n 56  58  57  56  55  57  58  55  55  56  54  54  55  54  53  53 \n 54  54  53  50  48  48  48  46  47  48  44  50 107  48  37  37 \n 35  32  33  32  33  33  33  34  35  35  34  34  34  34  34  33 \n 31  32  32  31  31  31  31  32  31  32  33  33  34  34  33  34 \n 35  36  38  40  41  38  36  34  33  33  35  37  38  38  41  50 \n 34  22  26  33  42  39  33  34  32  33  35  38  40  42  43  44 \n 48  49  52  53  53  53  53  52  52  51  52  52  49  50  51  52 \n 59  63  65  67  69  68  68  68  68  66  68  70  67  66  60  60 \n 64  64  62  61  60  62  66  65  66  66  65  63  65  65  64  64 \n 63  58  54  52  51  50  48  48  49  48  48  47  49  50  50  50 \n 51  51  48  46  46  49  48  48  49  49  48  50  47  47  46  45 \n 45  45  44  44  41  40  39  35  38  63  68  36  30  32  30  30 \n 31  34  37  37  35  33  32  32  30  30  32  34  39  41  42  40 \n 41  41  40  40  39  40  43  42  40  41  43  44  44  44  41  38 \n 53  55  53  53  53  52  54  50  51  52  48  50  51  50  49  51 \n 49  49  48  48  47  48  47  47  45  45  45  44  45  45  45  45 \n 44  42  43  44  42  45  43  42  41  41  48  60  94  89  54  50 \n 45  39  37  45  59  66  71  91 105 106 118 117 116 117 126 136 \n136 131 137  99  91 127 108  84  66  60  61  62  60  55  64  72 \n 49  52  53  23  19  19  23  36  33  26  25  25  31  39  46  54 \n 58  53  62  62  62  61  61  61  60  59  60  60  58  58  59  57 \n 61  61  61  65  67  64  63  66  64  65  66  66  64  65  64  65 \n 64  65  63  64  64  64  63  63  60  74  59  53  49  49  51  49 \n 48  47  47  49  48  45  44  45  47  44  45  45  46  47  48  45 \n 45  44  48  50  50  52  51  48  49  50  46  43  45  48  55  93 \n115  80  20  18  16  20  26  34  28  29  30  30  38  47  43  41 \n 41  40  37  36  37  37  36  34  34  33  33  32  33  33  32  33 \n 33  32  31  33  34  36  36  39  51  22  18  20  31  43  35  25 \n 24  25  28  36  43  43  47  55  58  60  62  60  63  62  63  63 \n 63  62  60  60  61  61  69  70 132 208 208 196 201 203 209 207 \n199 170 179 208 208 207 208 208 209 207 208 207 207 203 201 205 \n201 204 205 206 161  70  65  61  56  55  57  56  55  55  55  55 \n 57  56  58  56  55  58  58  57  56  56  55  54  54  54  54  54 \n 54  51  52  51  48  47  47  46  48  50  42  49  98  62  34  35 \n 33  34  34  34  36  35  34  33  35  35  34  34  34  35  35  34 \n 32  34  33  32  32  32  32  31  31  32  33  32  32  32  32  34 \n 35  35  36  39  41  40  36  36  32  34  35  36  37  38  42  48 \n 31  21  25  31  39  38  32  33  32  33  34  36  39  41  44  45 \n 49  50  52  54  53  54  52  52  52  52  51  50  49  49  51  54 \n 61  87 114 107 104  96  87  83  80  78  76  84  76  72  66  70 \n 72  73  70  67  68  69  70  72  71  71  72  70  69  70  69  66 \n 69  63  55  53  52  49  48  47  48  48  47  46  49  50  50  51 \n 51  50  47  46  46  46  46  47  47  48  51  49  49  48  45  46 \n 47  45  44  44  41  40  39  36  32  41  74  44  32  31  30  31 \n 31  34  36  37  35  33  31  30  30  33  34  34  36  39  41  41 \n 42  42  40  40  39  39  41  39  40  41  41  42  43  43  41  38 \n 53  54  54  53  52  53  54  52  53  52  51  51  48  49  49  50 \n 48  49  48  48  48  48  47  46  44  45  45  45  46  45  44  43 \n 42  43  43  41  43  42  43  42  40  38  45  51  85  92  68  49 \n 37  40  52  64  72  76  76  73  78  87 101 104 144 180 209 223 \n222 203 160 113 150 225 192 122  62  54  54  60  61  56  67  79 \n 58  56  55  23  19  19  22  33  32  26  25  27  31  38  45  51 \n 58  55  62  63  63  62  61  61  61  60  59  59  59  59  58  56 \n 58  59  55  55  55  57  58  59  62  64  62  63  64  65  62  62 \n 62  62  62  62  63  62  62  62  62  59  61  55  49  49  49  49 \n 51  48  50  48  46  44  44  45  46  45  46  45  45  47  47  47 \n 46  44  48  51  51  51  52  50  49  49  46  43  41  47  49  74 \n116  76  22  20  20  21  27  32  35  30  28  31  38  46  43  41 \n 42  44  39  37  38  37  35  33  34  34  33  32  33  33  32  33 \n 33  33  33  32  34  34  35  38  48  20  18  20  30  43  35  24 \n 22  26  31  38  45  44  47  56  58  59  60  60  63  62  65  65 \n 63  61  59  61  62  62  67  71 122 210 210 180 187 185 205 183 \n212 174 176 206 189 197 198 204 203 204 204 205 206 170 162 198 \n158 188 206 207 171  75  64  66  56  54  55  54  54  54  54  54 \n 57  56  56  58  58  59  58  57  57  57  56  53  54  54  56  55 \n 52  53  54  52  49  47  45  44  46  49  43  48  82  85  32  32 \n 31  35  35  35  34  33  34  33  35  36  35  35  36  35  34  34 \n 31  32  33  33  33  32  33  32  31  31  32  32  31  31  32  34 \n 36  37  37  39  40  41  37  37  33  34  35  37  37  38  44  47 \n 30  20  23  30  38  38  32  33  32  32  35  35  38  41  43  45 \n 49  50  52  56  54  53  54  51  53  53  52  50  51  49  50  54 \n 62 106 181 193 185 179 170 162 151 142 126 117 113 103  96  92 \n 89  92  91  89  83  85  85  86  81  80  85  86  80  80  81  77 \n 77  71  58  55  52  50  51  51  48  46  46  47  49  50  48  50 \n 51  50  47  47  46  45  45  47  48  48  48  48  49  47  44  44 \n 44  47  45  43  40  39  38  36  31  35  62  56  33  31  30  31 \n 31  33  38  38  36  33  30  30  31  32  32  33  36  39  42  41 \n 41  42  41  42  41  41  40  40  41  42  41  42  42  42  41  39 \n 56  53  53  53  53  53  53  53  52  53  50  51  49  50  49  49 \n 48  46  47  47  47  47  47  46  46  46  45  45  46  43  44  42 \n 42  41  42  43  43  42  41  42  40  35  36  47  69  90  85  53 \n 56  65  73  77  84  85  82  68  51  51  55  81 156 192 227 240 \n235 216 171 135 194 248 253 169  65  43  41  41  47  56  92  92 \n 82  57  51  24  17  21  22  32  31  25  25  26  31  40  47  53 \n 61  60  62  62  64  63  62  61  61  59  59  60  60  58  58  58 \n 58  58  56  56  55  57  56  57  57  55  57  58  57  58  58  58 \n 59  58  59  61  61  61  60  65  69  72  66  54  50  50  50  49 \n 49  49  49  49  48  45  43  44  45  44  46  46  46  46  48  49 \n 45  46  47  49  51  51  51  49  49  48  47  43  41  43  49  53 \n113  78  25  29  30  35  43  44  40  32  29  35  40  41  41  41 \n 44  45  40  40  39  37  34  33  35  34  32  33  32  31  30  32 \n 33  32  33  33  33  33  33  37  52  22  17  18  31  43  34  24 \n 22  23  29  37  44  44  47  57  59  60  61  60  60  61  63  64 \n 61  59  62  63  63  63  63  73 108 206 207 202 202 188 194 179 \n206 166 209 205 173 177 188 173 181 182 183 184 201 198 157 180 \n131 170 208 206 181  87  69  63  56  56  56  55  55  54  54  55 \n 57  57  55  57  59  57  56  56  57  56  55  55  55  53  55  54 \n 52  52  53  55  52  48  46  44  45  48  45  45  62 112  27  34 \n 34  34  34  34  34  35  35  34  36  37  36  36  37  36  34  34 \n 33  31  33  31  33  32  34  33  32  30  31  32  31  32  33  33 \n 34  36  37  38  40  40  38  37  34  34  36  34  37  39  44  47 \n 27  21  24  32  41  38  30  32  33  33  35  35  38  40  40  42 \n 46  49  52  54  53  55  54  53  51  53  52  51  50  50  53  55 \n 62 105 182 204 202 203 204 205 206 206 206 207 205 203 199 195 \n195 189 180 177 170 166 162 159 153 151 147 145 140 140 141 138 \n139  98  58  59  52  51  52  52  52  49  47  47  48  48  47  49 \n 51  49  48  47  46  45  47  48  46  45  47  47  48  46  46  46 \n 46  45  45  42  41  42  39  42  36  34  49  66  32  31  32  33 \n 32  34  39  38  36  34  33  32  30  31  33  35  36  39  41  41 \n 41  41  40  42  42  42  40  40  41  41  41  43  44  44  41  39 \n 55  53  52  51  52  53  53  53  52  52  51  50  51  51  50  49 \n 49  49  49  48  48  47  46  46  46  45  45  45  45  44  44  42 \n 42  43  42  42  42  43  42  43  42  37  30  39  56  88  92  78 \n 76  82  86  79  67  59  51  46  55  65  76  89 114 155 233 249 \n239 203 176 147 184 246 254 179  74  49  41  40  74 104 127 118 \n100  62  51  24  19  19  21  33  33  24  24  24  30  38  46  52 \n 60  62  62  62  63  63  62  62  60  59  58  59  59  58  57  58 \n 58  57  56  56  56  56  57  57  57  55  56  56  56  56  56  56 \n 56  56  56  57  58  57  56  59  60  60  60  54  50  50  49  49 \n 49  48  48  49  48  45  45  45  45  45  46  47  46  44  45  48 \n 45  46  48  49  51  50  50  49  47  47  47  45  39  43  48  48 \n101  88  33  43  48  55  60  57  50  38  30  39  45  41  39  39 \n 46  48  44  43  39  38  32  32  33  33  31  32  31  32  31  33 \n 34  33  33  33  33  34  33  36  49  22  18  18  31  42  35  24 \n 23  24  29  37  45  45  47  56  58  60  62  63  61  62  63  62 \n 61  63  63  65  65  64  66  70  97 202 209 210 208 209 208 208 \n207 198 210 208 203 201 193 191 187 196 193 184 199 170 144 183 \n154 166 209 206 188  98  80  69  59  59  56  57  56  56  55  57 \n 57  57  57  56  57  57  57  58  59  56  56  56  54  52  54  55 \n 52  51  52  52  50  49  45  43  45  46  46  43  53 119  41  35 \n 34  34  34  34  35  35  35  35  37  38  36  37  37  37  35  34 \n 32  31  32  32  32  31  33  32  34  32  33  34  33  34  34  32 \n 33  35  36  37  40  40  39  36  33  34  37  36  38  38  43  45 \n 27  21  23  32  42  38  29  31  33  35  35  36  37  40  40  41 \n 46  51  52  52  54  55  54  51  53  53  52  53  52  52  55  55 \n 60 106 186 206 203 203 202 205 205 205 206 205 204 204 204 205 \n205 204 202 204 202 201 203 204 206 203 202 204 201 200 200 201 \n199 126  56  59  54  51  51  51  52  50  47  46  49  48  48  49 \n 49  48  50  49  47  45  46  47  46  46  46  44  44  46  45  45 \n 45  46  44  43  43  42  41  42  37  33  42  68  35  31  32  33 \n 34  36  39  38  36  36  34  33  32  33  34  33  36  39  41  41 \n 40  41  41  40  41  40  41  40  41  42  41  43  45  45  41  39 \n 57  55  54  55  55  54  52  53  52  52  52  50  52  51  50  49 \n 49  50  48  47  49  46  45  46  44  44  45  45  46  47  45  43 \n 42  42  42  42  43  41  42  43  44  40  30  30  45  74  94  90 \n 81  72  59  56  62  70  92 116 129 134 145 145 149 152 174 211 \n242 249 212 154 155 235 253 190 126 119 100 111 118 121 125 135 \n120  80  56  25  18  20  22  33  34  24  24  25  30  38  47  52 \n 61  62  63  61  62  63  62  61  60  59  59  60  60  61  59  58 \n 58  56  56  56  55  54  57  56  56  55  56  57  56  55  56  55 \n 54  54  54  54  55  56  55  54  53  52  53  51  50  49  50  49 \n 50  49  46  47  48  46  44  43  46  47  47  46  46  44  46  47 \n 46  46  48  48  50  51  50  49  47  47  48  45  39  40  45  47 \n 75 104  45  60  66  69  67  61  52  43  33  41  56  46  39  41 \n 50  50  42  40  37  37  35  34  33  34  33  34  33  34  34  35 \n 36  35  34  34  34  33  31  35  51  21  18  19  30  42  33  23 \n 23  25  30  38  46  47  50  56  60  59  62  63  64  62  60  61 \n 65  64  64  64  65  64  65  69  94 193 209 209 209 210 210 209 \n209 208 208 206 208 208 208 209 207 209 209 207 208 206 203 205 \n205 203 206 206 191  93  75  71  58  59  60  60  57  57  57  58 \n 57  60  57  56  57  58  58  57  58  56  55  55  52  52  54  53 \n 53  52  52  51  50  49  46  46  44  43  47  41  46  94  78  30 \n 34  32  33  31  33  34  35  36  37  36  36  37  38  37  35  32 \n 34  34  32  32  32  32  32  32  34  33  32  32  32  30  30  32 \n 34  35  35  35  38  39  40  38  35  36  37  36  37  39  44  51 \n 26  20  24  31  40  35  28  28  33  34  36  36  40  41  42  43 \n 46  52  54  54  54  55  55  53  52  52  51  54  54  52  53  54 \n 62 114 205 209 186 195 181 180 208 205 207 205 205 205 206 205 \n204 204 204 203 204 203 205 203 204 204 207 206 204 203 203 203 \n205 135  58  59  54  53  52  50  51  52  49  48  49  49  49  48 \n 48  48  49  47  48  47  46  47  49  49  47  44  45  46  46  46 \n 45  44  43  42  40  41  39  40  37  32  37  59  46  31  32  31 \n 34  35  38  37  37  36  34  34  34  35  35  33  37  39  39  41 \n 40  41  42  42  42  41  41  42  42  42  42  42  44  43  42  41 \n 56  54  54  55  55  54  53  53  52  52  54  53  51  51  51  49 \n 49  49  48  47  49  47  47  47  45  44  45  45  46  46  45  45 \n 42  43  41  41  43  42  44  45  44  40  33  26  39  56  91  90 \n 71  66  76  87 107 117 128 137 158 168 173 162 155 151 147 161 \n175 214 248 212 153 222 253 196 161 185 124 120 121 121 142 157 \n120  93  62  25  20  19  22  31  34  25  25  26  31  38  46  51 \n 61  62  62  62  64  64  63  61  59  58  58  60  59  60  58  59 \n 59  57  57  56  54  54  55  54  56  55  55  55  56  57  56  55 \n 55  53  53  53  53  55  55  53  54  53  52  52  52  49  49  51 \n 49  48  49  48  46  46  43  43  45  46  47  45  47  46  47  46 \n 46  46  47  48  51  51  51  49  47  48  49  44  37  35  42  46 \n 62 105  67  65  66  71  68  62  57  48  37  42  63  55  41  43 \n 53  49  40  35  37  37  37  39  37  37  36  36  36  37  39  41 \n 38  36  35  35  33  34  34  39  49  22  18  18  29  43  31  23 \n 22  24  30  39  46  47  51  54  59  59  62  64  62  58  61  63 \n 66  63  65  64  66  65  63  68  95 188 210 210 210 210 210 211 \n211 210 209 209 207 209 208 209 209 208 208 209 209 209 208 209 \n207 207 208 208 197  95  65  64  60  59  61  61  60  58  57  58 \n 59  60  58  58  58  58  57  58  58  57  58  56  55  54  53  52 \n 51  51  51  51  50  50  45  44  43  43  45  43  47  68 107  36 \n 35  33  33  33  34  34  35  35  36  36  36  38  38  37  35  33 \n 33  34  33  32  33  33  31  32  33  32  32  32  32  32  32  33 \n 33  33  34  35  37  39  40  37  36  36  36  36  37  40  46  53 \n 22  20  24  32  39  33  28  28  32  34  37  37  40  40  42  43 \n 47  50  52  53  53  54  55  54  53  54  52  55  54  52  54  56 \n 60 111 211 208 174 191 189 183 205 206 206 207 205 205 206 205 \n206 190 188 195 194 205 205 203 205 204 205 204 202 200 201 205 \n208 141  57  58  55  54  51  49  51  52  51  49  49  49  50  48 \n 50  49  48  46  50  49  47  48  50  49  47  45  47  46  46  45 \n 45  44  44  42  41  41  40  39  38  33  38  53  54  33  32  33 \n 36  37  37  38  38  38  34  33  35  36  35  35  35  36  41  40 \n 41  42  42  42  42  42  41  42  42  42  43  42  42  42  42  41 \n 56  55  55  54  56  55  55  54  53  52  51  50  51  49  49  51 \n 47  46  50  48  48  48  46  47  46  43  44  45  46  45  45  45 \n 42  41  41  40  40  43  41  41  43  42  34  27  30  46  76  90 \n 93 111 122 129 134 151 169 180 196 187 180 164 149 151 149 147 \n154 151 178 223 199 214 250 211 164 180 116 124 128 125 176 145 \n101  97  64  28  18  18  22  28  34  25  26  26  30  37  47  50 \n 62  62  63  64  61  61  61  61  60  59  58  60  59  58  58  59 \n 59  58  58  56  55  54  56  55  55  56  56  56  56  56  55  55 \n 54  54  54  53  55  56  54  52  51  52  52  51  51  48  49  49 \n 48  48  48  48  47  45  43  45  46  45  47  45  46  44  45  44 \n 46  46  45  46  49  50  51  49  47  48  47  46  36  30  34  42 \n 53  93  91  61  63  68  70  66  63  63  51  50  69  70  47  48 \n 48  41  36  36  34  36  38  42  43  42  41  40  42  42  42  40 \n 37  35  36  36  35  34  37  43  48  20  17  17  29  40  31  23 \n 25  25  31  39  45  47  49  54  61  61  61  63  61  59  64  65 \n 65  65  64  64  65  64  65  69  88 182 211 209 207 209 209 208 \n209 209 208 208 209 208 208 207 207 210 209 210 208 207 207 207 \n207 206 205 206 203 100  66  62  60  59  59  59  59  59  57  59 \n 59  58  59  58  57  56  56  56  59  58  59  55  55  55  52  53 \n 52  51  49  52  51  50  43  41  40  43  44  46  42  47 118  47 \n 35  33  33  35  35  36  37  36  36  37  37  37  36  36  34  33 \n 32  34  34  33  33  33  32  31  32  33  33  34  33  32  32  32 \n 33  32  34  36  37  38  39  37  34  35  36  37  40  41  45  51 \n 21  20  24  33  39  33  28  28  31  33  37  39  39  40  41  43 \n 46  51  53  53  53  55  54  54  54  55  53  54  54  54  54  55 \n 57 105 212 208 176 175 195 177 179 173 181 185 188 190 191 199 \n201 164 178 184 195 203 203 199 200 202 203 200 194 168 197 189 \n208 150  55  60  55  55  51  50  52  52  52  48  49  50  52  50 \n 50  49  49  48  47  48  46  47  48  49  48  47  47  46  46  46 \n 45  43  43  43  42  41  41  38  40  36  36  46  60  36  33  34 \n 34  35  37  39  40  38  34  32  34  36  35  36  37  34  39  41 \n 41  43  41  42  42  42  42  43  43  42  42  42  43  43  42  41 \n 57  55  56  54  55  55  56  54  54  53  51  51  51  50  50  50 \n 49  47  49  48  47  48  46  46  45  44  43  43  44  43  45  45 \n 43  42  42  41  41  41  42  44  46  45  38  29  26  38  63  88 \n 92 113 140 178 207 212 212 170 154 144 142 145 145 142 142 142 \n146 153 167 152 192 228 232 192 177 175 113 124 132 139 162 104 \n 72 102  67  32  20  19  21  27  37  27  28  27  31  39  48  51 \n 61  64  63  62  63  61  62  61  60  59  59  59  60  59  58  59 \n 58  59  58  57  56  56  55  54  54  54  56  55  56  54  54  54 \n 53  55  53  54  55  53  53  51  53  51  52  51  49  49  50  49 \n 49  49  48  48  47  46  44  45  47  46  47  46  46  47  47  46 \n 46  45  45  46  51  50  49  49  48  48  48  48  39  29  30  38 \n 49  75 106  61  50  57  70  69  69  66  80  87  82  83  58  47 \n 42  37  35  35  34  35  36  41  46  47  46  45  45  44  42  41 \n 37  35  36  36  34  34  35  40  50  20  17  16  29  42  29  22 \n 23  25  32  42  48  46  48  54  59  63  61  62  63  62  64  68 \n 69  66  64  67  68  67  64  67  81 168 212 210 210 210 209 209 \n208 208 208 208 207 207 207 207 208 208 208 208 209 208 208 207 \n206 206 208 206 204 108  63  62  58  57  58  59  58  56  58  59 \n 59  57  58  58  58  57  58  57  59  60  59  56  53  56  53  51 \n 53  51  50  51  50  50  45  43  40  40  42  44  44  46 109  61 \n 36  35  36  35  36  36  37  36  36  37  37  37  36  37  34  34 \n 33  34  35  34  35  34  32  31  33  32  33  32  33  34  32  32 \n 34  33  34  38  38  39  40  37  35  37  37  37  42  43  46  47 \n 20  21  25  36  39  31  26  27  30  35  38  41  41  43  42  44 \n 46  49  53  52  52  55  53  55  54  54  53  54  52  53  54  54 \n 59  98 212 208 183 188 195 169 185 178 181 177 178 176 183 166 \n184 170 171 176 194 197 187 178 186 192 193 181 191 163 195 201 \n209 155  52  58  56  54  52  50  52  53  52  48  51  51  52  52 \n 51  51  49  48  48  49  47  46  48  49  48  49  45  47  46  46 \n 43  41  43  44  42  41  39  37  41  39  34  41  66  38  32  33 \n 35  37  40  40  40  39  34  32  33  35  35  34  35  35  39  40 \n 42  42  41  42  42  42  43  42  41  41  40  42  44  44  42  40 \n 57  52  54  54  55  54  55  55  55  53  50  51  51  52  51  48 \n 49  48  49  50  48  47  46  47  47  44  43  43  44  44  44  42 \n 40  41  40  41  40  40  42  43  45  46  40  31  23  29  52  77 \n 88 114 235 247 239 218 163 135 154 149 148 148 148 143 137 137 \n145 149 165 162 146 214 243 186 177 171 111 125 131 145 115  79 \n 58  90  84  32  17  18  19  25  35  27  25  25  30  37  47  51 \n 61  64  62  62  62  61  62  61  61  59  56  58  60  60  58  58 \n 58  58  58  57  56  54  54  56  53  55  55  55  55  54  55  56 \n 54  53  53  52  52  53  54  52  52  51  52  51  49  49  51  49 \n 50  49  47  49  45  46  43  43  45  46  45  45  44  45  47  46 \n 45  44  44  46  49  49  48  49  48  49  46  45  41  29  26  33 \n 46  57 107  68  32  37  47  66  97 157 226 215 107 100  70  45 \n 37  34  34  33  36  34  36  44  49  49  49  50  45  42  39  36 \n 34  34  33  31  31  32  31  37  52  20  16  18  26  41  31  25 \n 23  27  35  43  48  48  49  55  61  62  62  62  65  65  65  67 \n 65  66  64  66  67  66  64  67  74  84 100 114 138 151 162 173 \n182 185 193 196 200 202 204 206 207 207 207 207 207 208 207 206 \n206 205 204 204 207 117  58  62  56  56  58  58  57  56  56  59 \n 60  57  56  56  59  58  59  59  61  59  56  54  54  56  55  55 \n 52  51  49  50  51  50  46  43  40  38  41  46  45  48  87  90 \n 34  38  35  35  36  38  38  36  36  37  37  37  36  37  36  34 \n 31  33  35  34  31  34  32  32  32  33  33  33  34  33  33  32 \n 33  32  35  39  39  38  37  36  37  39  38  38  42  44  49  46 \n 21  21  25  34  39  29  26  25  29  34  38  41  41  43  42  46 \n 47  50  53  54  53  53  54  54  55  54  53  53  51  53  54  56 \n 55  86 211 208 206 204 199 174 181 182 190 183 187 177 189 172 \n186 180 168 183 197 183 173 171 185 187 171 169 191 163 205 200 \n207 170  53  58  54  54  52  52  52  53  49  49  50  51  50  50 \n 51  50  51  49  48  49  49  46  49  48  47  46  46  46  47  47 \n 45  43  44  44  42  40  40  38  39  41  37  43  63  45  34  34 \n 35  36  38  38  39  40  36  34  33  34  33  33  35  35  38  41 \n 41  41  40  40  42  43  42  43  42  43  41  42  44  43  44  42 \n 56  55  54  54  56  55  55  56  55  53  52  52  52  52  50  48 \n 48  50  49  48  49  47  47  47  45  43  43  43  43  45  43  42 \n 40  39  39  39  40  40  40  43  45  44  40  33  25  24  45  64 \n 90  90 215 220 188 175 153 133 141 149 151 147 148 145 144 144 \n151 153 144 173 142 195 248 206 170 164 113 128 134 143 113  81 \n 61  57  89  34  18  17  18  23  37  27  25  25  30  38  47  52 \n 60  62  63  61  62  61  62  60  61  59  57  59  58  59  59  57 \n 59  57  58  57  57  54  52  55  55  55  55  55  55  54  56  55 \n 54  53  53  53  52  52  53  52  51  51  50  50  50  50  49  49 \n 49  49  49  48  46  47  45  44  45  46  46  44  44  46  46  45 \n 45  43  44  46  50  50  48  46  48  48  45  46  41  30  22  28 \n 42  51  99  93  37  38  54 128 210 236 239 240 149 105  76  52 \n 38  35  34  32  35  34  38  46  54  54  53  51  45  39  35  33 \n 32  32  33  32  30  31  30  40  49  21  17  18  26  40  30  28 \n 28  29  36  43  48  50  53  57  62  64  62  62  65  65  65  64 \n 65  67  67  66  68  68  66  68  72  70  69  70  77  79  82  90 \n101 106 106 107 109 119 132 141 151 161 169 177 187 190 194 194 \n198 200 203 205 206 123  58  60  58  57  56  57  56  55  56  58 \n 59  60  56  58  59  58  60  60  59  57  57  55  57  58  55  55 \n 55  53  51  50  51  49  45  44  41  37  36  42  45  45  74 114 \n 30  39  38  39  39  39  38  36  37  38  38  37  36  35  36  34 \n 33  34  34  33  32  34  33  33  32  33  34  33  34  34  33  32 \n 32  31  35  38  38  38  38  38  38  38  37  38  42  42  48  42 \n 22  22  25  33  36  28  24  25  30  34  39  41  43  43  43  44 \n 47  50  52  54  55  53  52  54  54  54  53  53  51  53  55  53 \n 56  79 210 208 208 208 207 193 199 199 202 203 203 203 206 205 \n203 199 192 199 196 196 198 191 190 190 183 183 189 176 201 188 \n211 179  54  57  55  55  53  52  52  53  50  51  50  49  50  50 \n 52  52  50  49  46  47  50  48  48  48  47  46  46  45  47  46 \n 44  43  44  43  41  39  40  39  39  40  38  42  61  48  34  32 \n 33  37  40  39  39  39  36  34  33  34  33  33  35  36  39  39 \n 40  40  42  42  43  44  43  42  42  43  41  42  43  44  43  41 \n 56  54  54  56  56  55  55  55  56  54  53  52  50  51  49  49 \n 48  50  49  48  50  48  47  47  47  46  44  43  43  44  42  41 \n 40  39  38  38  39  40  40  41  44  42  40  37  26  24  33  51 \n 84  87 116 156 160 162 156 153 136 136 145 143 144 146 147 149 \n159 142 130 161 170 205 212 230 186 159 111 126 134 145 110  84 \n 62  34  80  37  18  19  19  22  36  26  24  26  33  40  48  52 \n 60  61  62  62  62  62  62  62  61  58  58  59  58  58  58  59 \n 59  58  57  57  57  55  56  53  53  54  53  53  54  55  54  55 \n 55  54  55  54  51  52  53  53  51  51  52  52  48  50  49  50 \n 48  49  47  46  47  47  46  44  44  46  47  46  47  48  46  45 \n 46  43  44  46  50  49  50  48  48  46  46  47  43  33  22  24 \n 35  47  77 107  88  97 129 158 170 163 137 120  85  85  79  75 \n 48  38  36  34  34  36  39  43  55  56  55  49  39  35  34  31 \n 32  32  31  31  30  29  30  42  46  21  17  18  28  41  29  24 \n 25  28  35  46  50  51  54  57  63  65  64  64  66  65  65  63 \n 64  66  66  67  68  67  66  68  73  70  67  70  70  72  70  71 \n 73  72  76  71  67  66  71  68  63  66  71  80  94  92  91  87 \n 90  94  97 101 105  82  59  59  59  58  56  57  56  56  57  57 \n 59  58  56  58  59  58  61  60  60  58  58  57  58  57  55  56 \n 56  54  51  51  49  47  47  44  41  36  33  37  42  42  58 123 \n 51  44  43  42  42  40  37  37  38  38  37  37  38  36  36  37 \n 36  34  37  38  35  36  34  35  33  32  34  36  35  35  34  34 \n 33  33  34  34  36  38  40  39  38  39  38  37  41  41  48  36 \n 21  20  27  34  35  28  24  25  29  33  38  41  43  43  45  45 \n 46  50  53  54  55  53  53  54  53  53  53  53  53  52  55  55 \n 60  74 204 209 208 208 207 205 205 204 203 204 206 204 207 206 \n207 209 205 205 207 204 204 205 208 209 206 205 207 207 207 206 \n210 184  59  60  55  54  52  50  50  52  52  50  50  49  49  50 \n 51  50  48  49  47  49  49  50  48  50  47  47  46  45  46  44 \n 42  43  42  41  41  41  39  39  40  41  38  40  53  51  35  33 \n 34  37  40  40  39  40  38  34  34  34  36  34  35  34  36  39 \n 40  42  43  44  43  44  44  44  42  42  44  43  44  44  44  42 \n 55  55  56  55  55  57  55  52  53  55  53  52  50  51  52  50 \n 50  50  50  49  49  48  47  47  47  46  44  42  42  43  39  40 \n 41  40  37  38  38  40  39  39  42  42  42  40  30  24  26  44 \n 71  87  95 142 156 156 158 158 153 138 119 130 144 143 146 146 \n156 133 112 148 176 147 194 188 170 150 112 127 136 137 103 105 \n 52  39  84  38  18  19  20  23  36  27  25  27  33  40  49  51 \n 61  61  63  64  63  61  61  61  59  59  59  58  57  58  58  58 \n 58  59  56  57  57  54  55  53  55  54  54  55  55  54  54  55 \n 53  53  53  52  53  54  54  54  53  52  52  51  50  50  51  51 \n 49  48  46  48  49  46  46  45  44  46  46  47  46  46  47  46 \n 46  45  44  46  50  49  48  47  48  47  48  47  44  35  22  21 \n 29  45  63 107 120 130 130 132 134 136 102  69  44  52  74  87 \n 69  48  37  36  36  37  39  43  57  59  54  46  37  34  33  31 \n 31  32  31  30  29  30  30  40  51  19  17  18  28  39  27  20 \n 20  25  34  45  50  51  53  56  62  62  63  63  65  65  65  65 \n 65  66  66  67  67  67  67  67  68  69  68  68  69  70  68  69 \n 72  74  71  69  65  64  67  68  65  64  66  69  77  73  71  70 \n 73  76  80  84  84  72  60  60  60  58  58  58  59  58  58  56 \n 57  58  58  60  59  58  60  58  59  58  57  57  58  57  56  57 \n 58  55  52  51  50  47  48  45  40  39  32  34  42  44  51 109 \n 79  43  45  43  41  41  39  38  38  38  38  37  39  38  36  39 \n 38  37  38  38  38  40  38  39  37  36  36  38  37  38  36  34 \n 35  34  34  35  37  38  40  40  39  39  38  40  42  41  51  35 \n 21  22  27  36  34  27  24  25  28  33  38  42  42  42  44  44 \n 46  49  52  54  53  53  55  54  54  54  54  53  54  52  53  54 \n 59  79 191 208 210 208 207 206 206 207 206 208 210 207 208 208 \n209 209 207 207 208 209 207 205 208 208 207 205 205 205 204 205 \n209 184  63  60  56  55  53  51  50  51  51  50  51  50  47  48 \n 49  49  49  48  46  48  48  50  48  48  46  47  46  44  46  44 \n 41  43  41  40  41  41  39  38  39  41  39  39  51  59  33  33 \n 34  36  39  40  40  41  38  35  35  34  35  33  33  34  36  37 \n 39  42  43  44  44  44  44  44  42  41  43  42  42  43  44  42 \n 56  56  55  54  56  57  54  52  54  55  53  53  50  50  50  51 \n 49  49  48  48  48  48  47  47  47  47  45  43  41  41  40  40 \n 41  39  39  39  38  39  38  41  42  43  42  41  34  24  21  33 \n 58  82  90 112 157 154 156 154 156 157 139 125 138 142 147 144 \n153 124 107 144 179 123 172 163 161 150 116 127 135 142 115 130 \n 37  56 111  37  20  19  19  23  35  27  24  27  33  38  47  50 \n 61  63  65  63  62  61  61  61  62  61  58  58  57  57  58  57 \n 58  56  56  56  56  53  55  54  53  54  54  53  52  52  53  53 \n 53  53  52  51  53  53  53  52  52  52  52  52  52  50  50  49 \n 48  48  49  48  48  48  45  43  45  46  45  44  43  44  45  45 \n 45  44  43  44  48  49  46  46  48  48  48  47  42  36  23  21 \n 25  37  55  93 118 127 131 141 188 160  98  85  68  44  53  69 \n 81  73  52  43  40  39  41  49  58  58  52  41  35  34  31  30 \n 28  30  31  29  29  30  30  39  51  20  15  16  28  37  25  20 \n 21  25  35  47  53  53  55  56  62  63  64  65  65  66  66  67 \n 65  63  64  64  64  66  66  66  67  65  64  63  65  65  67  66 \n 66  68  68  65  63  64  65  63  64  65  66  66  69  67  64  64 \n 67  74  75  70  71  81  59  60  57  58  59  60  60  58  58  58 \n 58  58  58  59  59  60  59  59  57  58  58  56  57  56  56  56 \n 57  55  54  54  50  50  48  44  41  38  32  31  40  41  46  81 \n112  44  42  42  42  40  38  38  37  37  39  38  38  36  36  38 \n 38  37  38  37  38  40  42  41  40  41  39  41  39  41  39  40 \n 40  39  40  39  40  41  41  40  39  41  42  41  44  39  49  33 \n 19  20  26  36  33  27  23  25  27  32  38  42  43  42  43  44 \n 47  48  52  54  53  55  55  54  53  53  53  54  52  52  52  55 \n 59  88 180 210 210 209 204 205 207 206 207 207 180 177 202 209 \n208 209 209 210 209 209 209 207 208 207 207 206 206 205 206 206 \n210 191  63  58  55  52  52  51  51  50  49  48  51  50  49  48 \n 48  48  49  48  48  47  48  50  48  48  46  45  45  45  46  45 \n 42  42  42  42  40  40  38  38  40  41  40  37  48  58  37  35 \n 33  34  38  38  39  40  39  37  34  34  33  33  32  34  36  36 \n 37  40  43  44  43  44  45  43  44  43  44  44  43  45  44  41 \n 56  55  55  55  56  57  54  54  55  53  54  54  52  51  50  50 \n 50  49  48  47  47  48  47  46  47  47  47  43  41  40  40  41 \n 41  41  41  39  39  38  39  41  40  42  41  42  36  25  21  25 \n 52  76  91  92 145 153 154 156 158 159 156 149 142 136 149 146 \n151 120 104 146 171 127 147 169 143 166 120 129 132 144 113 112 \n 32  79 116  39  19  19  19  21  33  26  24  25  33  40  49  51 \n 61  63  63  63  62  62  61  62  63  60  58  58  58  58  58  58 \n 58  56  56  57  55  53  54  54  53  54  53  52  54  54  52  54 \n 53  53  53  53  52  52  52  51  51  51  52  52  52  51  50  50 \n 50  49  50  49  48  47  45  43  45  46  46  46  45  45  43  43 \n 45  43  43  44  46  47  48  45  46  48  49  48  43  38  25  22 \n 23  31  49  80 117 126 128 161 156  94  75  72  82  64  45  50 \n 70  83  72  56  44  42  53  60  57  56  46  39  32  32  31  29 \n 28  30  29  28  28  28  31  40  52  19  16  16  28  37  24  21 \n 22  25  35  45  53  53  55  57  62  62  64  64  66  66  65  68 \n 63  62  62  65  64  65  66  65  65  63  60  58  58  60  60  60 \n 60  62  63  63  63  62  62  63  63  61  63  64  66  65  63  64 \n 65  69  69  65  69  78  60  59  58  58  59  59  60  58  58  60 \n 59  59  60  59  60  60  59  59  58  58  59  58  57  57  57  58 \n 56  55  53  53  50  51  48  45  43  39  32  30  37  43  49  63 \n126  52  42  38  39  37  38  39  37  38  39  38  37  37  36  37 \n 36  35  36  36  36  38  38  39  40  39  39  41  39  40  41  44 \n 45  44  41  41  42  43  42  42  42  43  45  41  41  40  49  32 \n 22  22  28  36  32  26  22  24  26  31  38  42  43  44  45  45 \n 47  49  51  53  53  54  55  55  52  54  53  54  51  53  51  56 \n 61  77 190 211 211 208 179 191 201 210 199 210 177 136 202 207 \n207 208 208 208 207 210 209 209 207 204 179 195 198 183 203 207 \n211 197  68  57  55  53  52  52  51  51  50  49  50  50  49  49 \n 49  49  47  47  46  47  48  51  49  48  47  44  44  44  44  44 \n 45  42  42  42  41  41  40  40  39  40  40  34  45  57  42  35 \n 34  36  38  39  39  40  39  36  33  34  34  34  34  34  35  37 \n 37  40  42  42  44  44  45  44  42  43  44  45  45  46  44  43 \n 56  54  57  57  55  55  55  54  53  53  53  52  52  52  50  51 \n 49  49  48  48  49  47  48  48  46  45  45  43  41  39  38  39 \n 41  42  41  39  39  38  39  41  42  42  43  44  39  29  23  23 \n 37  58  86  87 114 151 152 157 157 156 154 152 150 136 129 136 \n146 116 109 147 147 144 142 158 137 159 136 131 124 129 114  90 \n 35  98 117  43  19  20  21  20  31  27  25  25  33  38  46  50 \n 62  62  63  62  63  63  61  61  61  60  58  58  58  58  57  58 \n 58  57  56  55  56  56  53  53  53  53  51  52  54  53  52  52 \n 52  52  52  51  52  52  54  52  53  54  51  51  52  51  49  49 \n 49  50  49  48  48  48  46  44  45  46  46  46  43  42  41  42 \n 44  43  42  42  44  46  47  45  47  48  48  48  44  39  26  20 \n 22  27  42  58 112 121 128 124  97  75  79  76  90  94  52  41 \n 42  58  75  72  56  58  66  65  58  55  41  37  33  32  30  31 \n 31  29  30  29  29  28  28  40  49  19  15  15  27  37  24  21 \n 21  24  36  45  52  51  57  58  61  63  65  65  66  63  66  66 \n 62  62  65  65  64  65  65  65  62  62  59  56  55  56  56  55 \n 56  59  58  59  58  57  55  57  54  56  59  57  57  59  58  58 \n 59  59  58  60  61  60  60  60  58  60  59  57  58  58  58  57 \n 58  60  60  59  59  58  58  58  58  57  58  56  57  58  58  59 \n 58  57  55  54  51  50  49  46  42  39  30  27  32  40  44  50 \n128  70  40  39  37  35  36  37  38  39  39  38  38  38  36  36 \n 34  34  33  34  34  35  34  34  35  35  36  37  37  37  40  42 \n 44  43  44  44  44  43  43  42  42  46  50  46  43  40  51  31 \n 21  20  27  36  28  22  20  24  29  32  38  41  44  44  43  46 \n 46  46  51  53  54  53  53  54  54  54  53  52  51  52  53  55 \n 59  66 188 210 209 207 185 192 182 200 167 204 188 171 212 177 \n174 178 184 182 186 183 192 191 201 199 165 152 151 138 185 207 \n211 199  74  57  56  54  53  53  51  51  49  49  48  49  49  48 \n 49  49  46  47  46  47  48  49  48  48  47  46  44  44  45  45 \n 44  43  43  41  41  39  38  37  38  38  38  36  41  53  50  36 \n 34  35  36  39  40  40  39  38  34  32  32  33  33  35  35  37 \n 37  39  39  40  44  43  44  45  46  44  43  45  44  44  44  44 \n 57  55  57  58  56  55  55  55  53  53  53  53  51  51  51  52 \n 53  52  50  50  48  46  48  47  45  45  46  44  42  40  39  40 \n 40  41  40  38  39  39  40  39  42  42  43  43  41  34  25  21 \n 29  47  75  85  92 141 152 155 152 153 152 154 152 149 145 137 \n146 116 115 145 142 166 123 146 143 132 154 137 121 119 110  83 \n 37 101 122  45  20  20  21  20  30  27  25  25  32  40  46  53 \n 62  62  63  62  62  63  60  61  61  60  59  57  58  59  57  57 \n 58  56  56  55  57  56  56  54  53  55  52  54  54  52  53  52 \n 53  53  51  51  53  53  53  52  53  53  52  51  53  52  50  49 \n 49  50  48  48  47  48  47  43  44  46  45  45  43  42  39  41 \n 42  43  40  40  42  43  45  44  46  46  46  47  45  41  28  22 \n 21  22  37  49 106 122 125 120  93  79  88  82 110 105  71  51 \n 38  42  80  73  60  62  66  67  60  53  44  38  35  32  32  31 \n 32  31  29  30  29  29  31  41  48  20  14  14  27  37  24  22 \n 22  26  36  44  51  51  55  59  64  64  64  63  64  65  65  65 \n 63  64  65  63  64  66  64  65  64  64  58  56  56  56  54  54 \n 54  56  56  59  58  59  56  53  53  55  55  54  54  56  54  55 \n 55  55  54  57  59  60  61  60  61  61  59  59  58  56  58  60 \n 60  61  61  61  60  57  59  59  60  60  58  58  59  58  59  58 \n 59  57  56  54  52  49  49  47  45  41  29  25  29  36  44  49 \n114  93  36  36  35  35  37  38  39  38  38  40  42  39  37  34 \n 35  34  33  34  34  32  33  33  33  33  32  33  36  36  36  37 \n 40  42  45  44  46  44  46  46  43  47  47  47  44  42  52  28 \n 20  20  29  35  28  22  20  24  28  32  37  43  46  46  43  47 \n 46  49  52  55  56  55  54  55  55  56  52  52  51  51  52  53 \n 59  63 184 210 210 209 209 208 196 197 195 205 188 192 209 186 \n191 186 188 178 183 183 190 194 186 206 152 178 150 156 170 210 \n211 200  77  56  57  54  51  52  50  51  50  51  49  48  47  48 \n 48  50  46  46  47  49  49  48  48  47  46  44  44  44  46  46 \n 45  44  43  41  41  39  37  36  37  36  36  35  39  47  56  35 \n 36  34  34  37  39  39  38  37  34  33  32  31  33  36  35  38 \n 36  39  40  42  43  43  44  44  46  47  45  46  45  46  45  45 \n 54  55  58  57  55  56  55  55  54  56  55  54  54  52  52  51 \n 52  51  50  51  48  48  48  46  45  46  46  45  43  40  39  39 \n 42  42  40  38  40  40  41  39  42  43  43  43  41  38  27  22 \n 21  37  63  79  84 116 156 155 152 153 151 151 155 155 155 155 \n151 117 119 144 147 176 119 131 118 111 171 139 132 115  99  77 \n 40  99 124  47  18  20  19  20  30  27  25  27  32  39  44  53 \n 60  62  64  63  63  63  60  62  61  59  59  59  58  57  57  57 \n 56  56  54  56  55  56  54  55  55  54  54  53  54  53  52  52 \n 55  53  51  53  53  52  50  50  50  51  52  49  52  51  51  50 \n 50  50  49  47  46  47  47  43  43  43  42  42  41  40  40  41 \n 41  44  42  42  40  41  44  44  44  45  46  46  43  42  33  23 \n 21  22  30  46  82 119 119 121  92 103  66  88 122 119  93  71 \n 50  36 101 158 149  79  55  61  67  67  57  49  42  39  36  34 \n 35  33  33  32  31  33  32  43  47  18  17  16  28  36  24  21 \n 23  27  36  44  52  53  55  60  65  64  66  67  67  65  67  68 \n 66  67  65  64  66  67  65  64  64  63  62  56  57  55  54  55 \n 55  54  55  55  55  55  55  54  53  55  55  55  56  58  56  56 \n 53  52  52  56  59  60  57  60  61  59  60  59  58  59  59  57 \n 57  57  59  61  60  58  60  58  58  59  58  58  60  57  58  59 \n 58  57  56  53  53  50  48  47  44  42  32  26  28  32  43  50 \n 84 126  31  35  36  34  38  39  39  41  41  40  41  41  36  36 \n 35  34  32  31  33  32  32  32  32  31  33  33  34  35  34  35 \n 37  39  41  45  48  48  44  42  45  47  44  44  41  44  49  25 \n 20  20  30  35  27  21  21  23  28  33  39  42  43  46  43  44 \n 48  48  52  55  56  55  54  56  53  54  54  53  52  52  52  55 \n 62  62 177 212 211 212 211 211 210 210 210 210 206 210 209 208 \n209 207 203 201 202 204 204 198 202 206 163 175 188 163 193 210 \n211 204  83  57  56  54  51  52  50  49  49  50  48  48  49  48 \n 46  47  47  47  48  48  48  47  47  47  47  47  47  46  45  45 \n 44  43  41  41  39  37  37  37  36  36  38  34  36  45  58  39 \n 35  33  34  34  35  37  38  36  35  35  33  31  34  35  35  37 \n 36  39  39  40  42  44  43  45  46  46  46  47  47  46  46  45 \n 54  56  58  58  56  55  53  54  55  55  54  54  51  51  52  52 \n 52  51  50  50  48  48  47  46  47  47  47  45  43  42  41  42 \n 40  41  42  40  38  40  39  40  42  43  43  44  41  40  31  23 \n 19  29  53  73  84  99 145 153 156 157 156 155 158 158 155 156 \n150 110 127 144 151 165 121 135 115 113 157 147 133 114 101  70 \n 45  91 127  47  20  21  19  19  28  26  25  27  32  38  45  54 \n 59  61  63  62  63  63  60  61  61  59  59  59  58  57  57  57 \n 57  55  55  57  56  56  55  53  55  54  54  53  54  54  52  53 \n 53  51  52  53  52  52  52  50  51  51  52  51  50  52  51  51 \n 50  50  48  46  48  48  46  44  43  42  42  41  39  40  41  43 \n 42  43  40  40  38  39  42  44  44  48  49  47  44  43  37  23 \n 19  21  25  39  67 114 117 115  93 113  44  99 128 129 113  88 \n 62  49  78 209 241 190  65  49  54  45  47  51  53  52  45  44 \n 44  43  40  42  41  40  40  49  43  18  16  16  27  35  24  22 \n 23  28  35  43  52  53  56  60  65  66  66  66  67  66  67  67 \n 67  67  66  66  65  66  67  66  64  63  64  59  60  57  56  56 \n 54  51  53  52  54  53  53  54  56  58  58  56  53  56  57  57 \n 52  51  51  58  61  60  59  60  61  59  60  58  59  57  57  56 \n 58  58  60  60  60  60  61  59  59  59  58  60  60  57  58  59 \n 59  57  57  56  53  51  48  48  47  44  35  27  27  31  38  45 \n 68 139  41  35  37  36  39  43  42  44  43  42  42  41  37  35 \n 35  35  32  32  33  31  33  33  33  30  33  34  32  32  31  33 \n 36  35  36  38  42  44  43  44  45  45  45  43  41  45  53  26 \n 21  22  32  35  26  21  22  24  30  35  40  40  44  47  45  46 \n 47  51  53  54  54  54  54  55  52  53  54  55  53  54  52  55 \n 59  62 171 213 212 214 212 212 212 212 211 211 211 211 209 208 \n212 211 211 209 211 210 210 211 211 211 209 209 208 209 207 209 \n212 205  87  57  57  54  51  50  48  48  49  50  49  48  49  48 \n 49  46  46  47  47  48  48  48  47  46  45  44  44  44  44  43 \n 44  45  43  42  41  39  38  38  37  37  40  38  35  46  57  41 \n 35  33  34  32  32  35  38  38  35  35  32  31  33  33  36  38 \n 37  39  40  41  42  44  43  44  47  47  48  49  48  46  46  45 \n 55  57  56  56  56  56  54  56  56  55  52  52  51  53  53  52 \n 51  49  50  52  50  49  49  48  48  47  46  46  44  43  41  42 \n 42  41  42  40  38  40  40  41  42  41  41  43  43  42  35  25 \n 20  19  40  58  82  90 114 149 160 163 166 164 161 161 162 160 \n146 101 136 139 156 153 134 149 127 115 128 144 142 112 102  78 \n 51  80 127  51  19  21  19  20  26  25  26  29  34  41  46  54 \n 58  61  64  63  61  61  60  61  60  60  58  57  56  56  58  59 \n 57  57  56  55  56  56  53  53  54  54  53  53  53  54  54  55 \n 53  51  51  51  52  52  50  50  51  51  52  51  50  52  51  51 \n 48  48  47  46  49  47  45  43  41  39  41  37  38  39  38  40 \n 41  41  38  39  39  41  43  43  45  46  47  46  44  42  38  26 \n 20  20  21  30  57 102 118 111 113  91  53 122 135 137 134 119 \n 85  63  52 151 206 201 133  55  32  27  34  68  95  88  73  63 \n 56  54  55  59  59  57  57  60  43  19  15  16  28  35  23  20 \n 20  25  33  40  52  54  55  59  65  65  66  66  67  66  68  69 \n 68  67  68  67  66  66  66  66  66  66  65  63  61  59  58  56 \n 55  55  55  53  54  54  53  54  53  53  55  54  52  53  56  56 \n 54  53  53  55  60  62  59  59  60  60  59  59  57  56  56  56 \n 58  57  60  60  59  59  61  61  59  59  58  59  58  58  57  58 \n 59  58  57  56  53  52  51  48  45  44  38  29  26  30  34  41 \n 56 124  80  41  40  41  42  47  45  45  47  46  44  43  36  34 \n 35  35  33  34  34  32  32  32  32  33  33  33  33  33  31  32 \n 34  33  33  33  33  37  39  42  45  45  45  46  44  50  50  26 \n 21  21  32  35  24  22  21  23  30  34  39  40  45  46  43  44 \n 47  50  50  52  53  55  55  54  54  55  53  54  53  53  52  53 \n 61  59 159 213 213 213 212 213 212 211 212 212 211 211 211 211 \n212 211 210 210 212 212 210 211 211 211 211 211 210 208 210 210 \n212 206  93  57  57  53  52  52  50  50  50  50  49  48  49  47 \n 49  48  47  46  47  48  49  50  48  46  44  44  44  45  46  44 \n 43  43  42  42  40  37  37  36  36  36  39  37  34  42  58  45 \n 34  33  34  34  35  34  36  35  35  34  33  33  33  33  35  37 \n 37  39  39  39  41  43  43  44  47  47  47  47  48  47  47  45 \n 54  55  54  54  54  56  55  56  55  55  52  53  52  53  52  52 \n 52  51  51  50  50  49  48  49  48  46  46  46  44  44  40  41 \n 41  42  39  41  40  40  42  41  42  42  43  43  44  43  36  27 \n 20  20  30  47  79  86  96 142 163 163 166 162 164 165 169 169 \n139 101 144 144 166 146 144 159 129 108 133 136 147 106 113  91 \n 58  79 120  55  20  20  18  18  27  27  26  30  35  41  45  53 \n 58  60  62  63  62  61  61  62  61  60  59  58  57  56  57  58 \n 57  57  57  56  55  57  54  54  54  56  54  53  53  54  53  53 \n 54  54  51  49  50  50  50  50  51  51  50  50  49  50  51  50 \n 48  48  48  47  48  46  45  43  42  41  41  40  40  39  39  39 \n 41  41  40  40  40  41  43  42  45  46  47  44  44  43  39  30 \n 22  20  20  26  47  88 120 115 108  69  80 138 139 143 172 161 \n103  83  60  66 163 185 176 147  34  27  32  41  56  79 106 122 \n117 100  75  61  52  48  40  52  44  18  15  16  28  35  23  20 \n 21  25  34  43  54  54  55  60  64  65  65  65  67  67  68  70 \n 68  66  68  68  66  67  68  66  66  67  67  65  64  61  57  56 \n 55  56  57  57  56  56  56  57  56  55  58  58  57  55  57  56 \n 56  55  55  53  59  59  58  59  60  60  58  57  56  57  56  56 \n 59  58  59  58  60  60  59  61  58  60  60  59  59  59  58  57 \n 60  57  58  57  55  54  52  50  47  45  39  30  26  27  32  41 \n 49  99 108  48  48  47  49  50  48  47  50  52  49  44  39  38 \n 36  38  35  36  36  35  34  32  34  35  34  34  34  35  33  34 \n 36  33  32  32  35  36  37  41  43  44  44  47  46  51  48  24 \n 19  23  33  34  24  21  21  24  29  34  38  40  43  46  45  45 \n 47  50  52  53  53  53  53  55  55  56  55  55  54  53  52  55 \n 60  66 152 211 212 211 212 213 213 212 213 213 211 212 212 211 \n212 211 213 212 210 211 211 212 211 212 211 212 211 209 209 211 \n211 208  97  57  56  54  51  51  50  51  51  50  51  50  49  49 \n 49  47  47  47  46  48  48  47  45  47  46  46  45  45  46  46 \n 44  44  42  41  40  37  35  36  34  34  39  38  34  41  57  49 \n 34  34  34  34  34  36  37  36  35  33  34  33  34  34  36  35 \n 35  37  38  39  41  42  44  42  45  45  45  47  49  48  47  48 \n 54  55  55  56  55  56  56  55  54  55  54  52  51  52  51  51 \n 52  52  52  49  48  49  47  48  48  47  48  46  44  45  41  40 \n 42  43  42  42  40  41  41  41  42  42  43  41  42  43  39  32 \n 23  19  22  40  66  88  90 112 163 167 165 166 169 168 169 173 \n128 105 152 154 172 141 158 148 128 100 128 144 148 101 131 125 \n 67  78 106  61  19  19  18  18  26  28  26  30  36  41  46  53 \n 57  58  61  60  61  62  59  61  61  60  59  57  56  57  56  57 \n 57  56  58  58  53  54  55  55  52  53  54  53  52  53  54  54 \n 52  52  53  51  50  49  48  49  50  51  50  48  48  48  50  49 \n 46  47  48  47  47  46  45  43  41  40  40  40  39  39  38  39 \n 40  42  41  40  40  40  40  41  45  46  47  47  46  45  42  33 \n 23  19  19  21  36  60 115 115 104  50 114 164 202 220 230 229 \n148 108  95  70 134 215 239 221  45  32  75 107 114 119 120 127 \n134 135 136 140 139 135 125  99  40  18  17  17  26  35  23  22 \n 22  26  34  43  55  57  57  59  64  66  66  68  68  68  67  68 \n 68  68  69  66  65  66  67  68  67  68  65  64  64  62  60  58 \n 57  57  56  58  57  58  58  57  55  57  57  57  57  56  57  57 \n 57  58  55  50  59  59  60  60  60  61  60  59  58  56  56  56 \n 56  57  57  57  58  59  59  60  59  60  59  60  59  57  58  58 \n 54  55  57  57  54  53  51  50  48  46  41  30  25  25  27  35 \n 48  71 134  66  61  57  55  57  55  52  56  55  52  48  43  41 \n 40  39  37  37  37  38  38  37  38  38  35  37  37  35  35  37 \n 36  35  33  31  33  35  37  40  40  42  44  46  49  51  45  24 \n 20  23  33  32  23  19  19  23  30  34  38  41  45  47  47  46 \n 49  50  54  55  53  54  53  53  56  56  53  54  54  54  54  54 \n 62  69 147 208 209 209 212 212 211 210 211 211 211 210 212 212 \n211 210 211 210 212 212 211 211 212 212 211 212 212 211 208 210 \n211 211 105  56  55  53  52  52  52  51  50  51  50  50  48  47 \n 46  48  48  46  47  48  48  46  45  47  45  46  46  46  45  44 \n 43  45  44  42  40  39  37  35  33  32  36  38  34  41  53  60 \n 34  34  36  35  35  36  38  38  37  35  35  32  33  36  34  33 \n 36  38  38  38  39  41  42  45  44  44  45  47  48  49  49  50 \n 54  55  57  57  53  55  56  56  54  55  55  54  53  53  53  53 \n 52  51  51  50  49  50  48  48  47  47  49  47  45  46  42  41 \n 41  42  43  44  41  39  41  42  43  43  43  43  45  45  42  37 \n 26  22  21  31  57  86  91  99 154 171 170 169 167 168 169 174 \n126 110 157 164 177 133 169 142 126 111 112 148 146 103 155 188 \n 76  71  84  56  20  19  18  18  25  29  27  31  36  40  45  52 \n 57  58  63  61  60  61  60  62  61  60  60  58  59  58  57  57 \n 57  56  58  56  54  54  53  54  55  55  55  54  53  54  53  52 \n 54  54  53  52  51  51  50  50  50  49  49  49  48  48  49  49 \n 48  46  46  45  48  47  45  43  41  40  40  41  40  39  39  41 \n 41  42  40  39  40  41  41  40  43  43  45  46  46  45  42  36 \n 24  20  18  18  31  50 105 116 104  49 172 232 249 249 248 249 \n211 136 139 143 120 126 143 129  47  47  87 111 108 113 116 119 \n119 122 122 127 130 133 133 103  40  18  18  18  27  36  24  23 \n 22  25  34  43  56  58  58  61  65  66  68  68  69  69  69  69 \n 69  67  69  66  67  68  67  68  67  67  67  66  64  63  64  61 \n 58  56  57  59  57  59  60  58  58  60  59  58  57  58  56  56 \n 61  60  56  52  57  58  61  61  60  60  59  58  58  56  56  57 \n 56  57  58  58  57  59  60  59  59  59  59  59  58  57  58  58 \n 57  57  56  56  54  54  51  50  49  46  40  32  25  23  25  32 \n 47  55 143  85  65  63  60  61  63  61  60  57  55  54  49  46 \n 42  41  41  39  41  44  43  41  41  42  40  42  41  37  37  39 \n 38  35  33  33  34  35  37  39  41  42  45  45  48  52  41  22 \n 20  23  33  29  23  20  21  25  32  35  39  41  45  47  48  47 \n 48  50  54  55  53  51  53  53  54  54  54  55  54  55  55  54 \n 65  70  97 140 154 166 182 192 201 205 207 209 211 210 212 213 \n210 210 210 210 211 210 211 210 209 211 210 210 211 212 210 211 \n210 212 112  54  54  54  52  52  51  51  51  51  51  50  48  49 \n 48  48  48  46  48  48  48  47  45  46  46  48  46  44  45  44 \n 45  45  43  41  41  41  38  35  30  29  34  36  36  38  52  64 \n 38  38  38  38  39  38  37  38  38  36  36  33  34  35  37  36 \n 37  39  39  39  39  41  43  44  44  45  46  48  47  50  51  50 \n 56  56  56  55  55  55  54  54  53  55  55  55  54  52  53  52 \n 52  51  51  51  50  49  50  48  47  48  48  48  46  44  44  42 \n 43  42  42  43  42  39  41  43  42  43  41  40  43  44  43  38 \n 29  22  21  22  46  72  95  95 120 160 168 173 177 180 177 174 \n126 112 172 164 173 129 176 137 114 123 112 145 140 106 169 235 \n109  71  63  51  21  19  19  19  25  30  27  33  38  40  45  54 \n 55  56  61  61  62  62  60  60  61  60  58  58  57  57  55  53 \n 55  55  55  54  55  54  53  54  54  54  53  53  54  55  53  54 \n 53  52  50  51  52  51  50  49  49  50  50  48  48  49  50  49 \n 48  45  44  45  47  47  46  44  42  41  41  40  40  39  40  41 \n 42  42  39  38  40  41  40  40  41  43  47  46  46  46  43  37 \n 26  20  17  17  25  44  79 114 106  58 211 248 246 249 249 249 \n247 209 133 135 154 162 158 151 129 122 104  94  84  78  73  66 \n 63  61  61  60  61  64  65  70  37  22  17  19  26  34  23  21 \n 21  26  35  44  56  57  59  62  65  66  66  66  66  65  68  69 \n 68  69  66  65  67  68  67  67  68  68  66  66  65  66  62  61 \n 60  60  60  61  61  62  61  62  61  60  59  58  56  59  58  56 \n 60  61  59  55  54  57  60  61  61  61  60  58  57  56  55  56 \n 57  56  58  59  59  60  58  58  59  60  61  60  58  56  57  58 \n 57  55  56  57  53  52  51  51  50  49  42  33  24  23  24  28 \n 44  49 128 112  64  67  63  63  66  64  61  61  60  61  59  58 \n 54  52  49  49  52  54  51  50  50  50  49  49  46  42  42  41 \n 41  40  38  38  38  41  43  42  43  43  45  43  46  54  36  21 \n 19  23  34  29  21  20  23  28  33  35  39  40  44  46  48  47 \n 48  49  51  54  53  51  53  53  54  53  52  53  54  56  55  54 \n 60  64  64  60  60  62  66  68  80  94 105 112 126 136 141 144 \n156 163 172 174 179 185 183 187 190 192 194 196 198 199 198 198 \n199 201 115  54  55  53  52  52  51  51  51  51  49  48  49  47 \n 48  47  47  47  47  48  49  47  48  47  48  47  45  46  45  46 \n 44  44  42  42  41  40  38  36  31  29  32  35  35  36  50  74 \n 39  40  41  40  39  40  39  40  40  39  37  36  36  36  37  35 \n 36  38  39  40  40  41  42  43  43  45  46  46  46  49  51  51 \n 55  56  56  56  56  56  55  54  54  55  55  55  54  55  54  54 \n 53  52  52  51  50  50  49  50  49  49  48  48  47  45  45  45 \n 43  43  44  43  43  42  41  42  43  45  43  41  43  44  42  37 \n 33  24  19  19  36  56  91  96 101 138 177 188 195 198 203 185 \n127 116 199 170 166 131 177 132 107 132 129 150 137 106 184 249 \n155  77  63  51  23  20  20  18  26  31  24  33  38  39  45  53 \n 54  57  61  63  62  62  60  59  59  59  59  57  58  57  54  53 \n 55  56  55  55  55  55  55  55  55  54  55  55  54  54  53  52 \n 54  53  52  51  52  52  52  49  48  50  49  49  49  50  48  47 \n 47  47  45  46  46  46  47  45  42  42  41  41  40  41  40  40 \n 41  41  40  40  41  40  40  42  42  43  47  46  46  45  43  40 \n 30  19  18  18  22  40  65 107 111  73 212 247 247 248 249 248 \n249 238 156 115 119 129 151 153 156 157 156 154 151 152 151 146 \n141 138 132 128 119 114 106  87  37  19  19  19  26  33  22  19 \n 22  26  34  44  57  58  61  64  67  67  66  67  67  68  68  70 \n 68  67  65  66  67  67  68  67  68  65  66  66  64  65  65  63 \n 63  64  62  62  60  64  62  62  61  60  61  62  59  60  59  56 \n 58  60  59  58  53  56  59  62  61  59  59  58  57  58  57  55 \n 58  57  58  59  59  59  59  58  59  61  62  58  60  58  57  58 \n 57  57  57  55  52  51  52  51  49  49  43  36  25  24  24  26 \n 40  51 105 136  66  71  67  66  68  66  64  63  60  62  66  65 \n 63  61  59  56  63  59  56  58  61  59  60  61  57  51  49  49 \n 47  47  44  45  43  46  47  47  50  49  49  47  48  53  32  20 \n 19  24  35  30  21  21  22  27  34  36  38  40  45  48  49  47 \n 50  50  52  52  54  52  53  53  55  53  53  52  54  55  53  54 \n 54  61  62  62  62  64  62  62  66  64  62  61  65  70  69  69 \n 73  82  89  92  93  94  91  91  94  98 105 109 113 112 112 111 \n112 117  86  55  55  54  51  51  52  53  51  51  49  48  48  47 \n 47  47  48  49  46  47  48  47  48  46  47  47  45  45  45  44 \n 45  45  43  42  42  40  38  34  30  29  31  33  36  35  48  74 \n 46  41  41  42  41  41  41  41  40  40  38  37  38  35  35  34 \n 35  37  37  38  37  39  39  42  42  44  44  45  45  46  47  49 \n 55  55  56  54  57  56  56  53  56  56  56  57  55  56  54  54 \n 53  52  50  52  52  51  50  49  49  48  48  48  47  47  45  44 \n 45  45  43  42  42  44  43  42  42  43  43  41  42  42  41  38 \n 36  28  21  20  26  43  72  97  95 122 241 247 249 250 249 194 \n127 118 212 168 160 138 176 131 105 138 143 152 125 109 196 250 \n208  93  73  55  24  21  20  19  27  30  27  35  38  39  44  53 \n 53  56  59  62  61  62  61  60  60  60  58  57  56  56  55  55 \n 56  55  54  54  55  55  56  55  53  55  54  53  54  54  54  53 \n 52  53  53  51  52  51  51  50  49  49  48  48  51  48  49  50 \n 48  46  46  46  45  45  47  46  43  42  42  40  40  40  39  38 \n 41  41  42  40  40  40  41  41  41  43  45  44  45  45  41  41 \n 36  24  22  20  20  27  53  94 119  94 197 247 247 249 244 234 \n197 160 143 140 130 133 125 111 122 125 122 120 123 124 125 126 \n128 129 132 133 140 141 141 102  35  20  16  18  26  31  22  21 \n 23  28  36  44  55  58  61  65  65  66  65  66  68  66  68  68 \n 67  68  66  68  65  67  67  68  68  65  67  66  63  65  65  64 \n 64  63  63  62  59  60  62  62  62  60  61  62  61  61  61  58 \n 57  57  59  60  54  56  58  60  60  59  58  56  56  58  58  57 \n 57  57  57  58  59  58  59  59  58  59  59  58  59  57  57  57 \n 57  57  57  57  54  51  52  51  48  48  45  38  28  22  22  24 \n 34  47  79 149 108 101  90  81  78  72  70  67  66  66  65  66 \n 65  64  59  61  61  56  48  56  64  65  66  67  64  62  59  59 \n 58  58  57  58  58  57  59  60  59  57  55  56  54  57  31  23 \n 19  26  34  28  20  20  24  28  33  38  38  41  43  46  48  49 \n 51  50  52  55  53  52  53  54  54  53  54  53  54  54  52  54 \n 54  58  60  61  61  63  62  61  61  61  58  56  61  62  62  62 \n 63  63  65  65  68  68  68  68  69  71  68  70  66  67  67  68 \n 66  65  61  57  53  52  52  51  51  51  51  49  50  50  48  50 \n 49  49  47  45  48  46  45  46  46  46  47  46  45  45  44  44 \n 44  43  42  42  41  42  39  35  29  28  29  34  37  35  46  62 \n 62  43  43  41  42  43  41  41  40  40  38  38  35  34  34  33 \n 35  35  37  36  34  35  36  38  36  39  40  40  41  42  45  47 \n 55  55  56  55  55  55  53  56  54  54  54  56  56  56  55  53 \n 54  52  51  52  52  52  50  50  51  50  50  50  48  46  46  43 \n 45  46  44  43  42  43  44  44  42  41  42  43  42  42  40  38 \n 37  31  23  20  21  35  58  91  97  99 217 249 252 252 247 188 \n130 129 217 164 155 147 178 135 104 175 160 150 127 110 195 240 \n228 124  73  57  23  21  19  19  24  28  26  33  36  38  44  53 \n 51  54  58  61  61  60  62  61  60  61  58  57  55  56  55  55 \n 56  56  54  55  55  54  56  54  53  54  54  56  53  54  54  52 \n 52  53  52  52  51  50  51  51  51  51  49  49  51  51  52  50 \n 49  48  46  47  46  46  47  46  45  43  40  39  38  37  40  38 \n 40  41  41  40  41  42  41  41  39  42  45  45  45  45  44  42 \n 38  27  22  20  21  22  46  79 118 110 168 242 235 220 196 167 \n148 147 150 152 149 151 150 143 137 136 137 127 122 120 116 114 \n104 107 106 105 106 103 106  86  36  19  16  18  27  31  23  23 \n 22  26  35  43  53  54  59  63  65  66  65  65  67  67  67  67 \n 66  66  68  67  66  67  66  67  67  66  66  66  65  65  64  63 \n 63  62  62  63  60  63  64  62  63  63  62  60  59  58  59  58 \n 58  58  58  59  55  55  56  57  57  59  57  57  57  57  58  57 \n 55  57  58  57  57  58  59  59  58  60  60  58  57  57  55  57 \n 57  57  57  56  55  53  52  51  50  49  46  40  27  23  21  24 \n 30  45  63 143 126 121 118 116 108 104  96  92  87  82  79  78 \n 75  75  72  71  71  68  64  64  66  65  67  68  67  66  65  63 \n 65  64  66  65  63  65  65  63  63  62  63  64  62  56  29  21 \n 21  26  34  27  20  20  24  27  34  38  40  42  43  47  49  48 \n 51  51  53  54  52  53  53  54  53  52  53  53  55  53  52  54 \n 54  56  57  58  60  61  61  61  60  58  56  54  58  61  61  61 \n 60  61  62  63  65  65  65  66  66  68  65  66  66  66  65  65 \n 65  64  58  56  54  53  52  51  51  50  50  50  50  50  49  50 \n 50  49  48  48  48  48  46  46  45  45  46  44  45  45  44  44 \n 43  42  41  42  40  42  39  37  31  28  29  32  35  35  43  53 \n 72  42  43  42  43  44  43  41  42  40  38  36  33  33  33  32 \n 34  34  35  35  35  35  36  37  36  36  35  36  39  42  44  45 \n 57  58  57  56  56  56  54  57  56  56  57  55  54  53  54  54 \n 53  52  51  52  51  52  51  52  49  49  49  48  49  47  45  45 \n 44  44  44  44  43  42  43  44  42  42  43  44  44  42  40  39 \n 38  33  24  18  20  26  47  74  95  98 139 237 251 251 243 183 \n136 151 208 162 147 151 182 139 112 200 197 149 124 116 166 213 \n235 176  72  59  26  21  20  21  25  28  27  33  37  38  46  53 \n 51  55  59  60  60  61  62  60  59  59  59  57  58  57  58  55 \n 55  54  56  56  54  54  55  55  55  54  54  55  54  54  55  53 \n 53  53  52  52  52  51  52  52  48  50  51  50  52  50  50  49 \n 49  49  46  46  45  46  47  46  45  43  40  40  41  41  38  40 \n 40  41  41  40  42  42  42  42  41  42  46  45  45  45  43  44 \n 41  31  20  20  19  21  38  64 115 117 124 166 159 156 155 155 \n159 157 149 147 148 149 147 151 149 147 148 149 152 151 148 147 \n142 141 142 145 143 142 140 102  33  18  18  18  26  31  21  22 \n 25  26  33  40  50  52  57  62  65  65  65  64  64  64  65  66 \n 65  66  65  65  66  66  66  66  66  68  65  65  64  64  65  64 \n 64  62  62  62  63  63  62  62  63  63  61  62  57  56  57  56 \n 56  58  57  57  56  55  55  55  56  59  56  57  56  56  57  56 \n 55  56  56  56  56  57  58  58  58  58  59  57  56  56  57  58 \n 57  59  59  57  56  54  51  51  49  46  45  42  30  24  20  22 \n 28  36  52 119 133 113 116 114 114 113 117 118 120 119 120 117 \n115 113 111 107 104 101  99  99  97  94  89  84  83  80  78  77 \n 74  73  74  71  69  67  70  70  70  73  74  75  72  58  29  22 \n 22  27  32  25  20  21  25  28  33  37  40  42  44  48  49  49 \n 52  53  54  54  53  54  54  53  54  54  54  55  54  53  54  53 \n 53  54  53  54  55  54  54  56  56  54  54  54  56  59  60  59 \n 59  60  63  63  62  62  62  63  63  64  63  63  64  65  65  63 \n 62  62  58  54  53  53  52  51  51  50  51  51  49  49  50  49 \n 49  50  49  48  48  46  46  45  46  45  46  46  44  44  44  44 \n 43  43  42  41  41  40  41  37  31  28  27  29  36  37  42  47 \n 80  41  36  38  40  43  44  43  43  43  42  40  37  35  34  34 \n 32  32  32  33  35  34  35  37  36  35  37  36  37  41  41  43 \n 55  56  56  53  56  56  56  54  56  55  56  54  55  54  53  53 \n 53  53  52  52  52  51  51  52  50  51  49  47  48  47  45  47 \n 46  46  46  44  42  43  43  43  43  42  44  45  45  43  40  39 \n 39  35  25  22  19  22  39  58  98 102 109 197 253 250 237 191 \n150 167 201 164 137 156 189 143 118 208 201 145 120 121 183 209 \n207 211  84  58  27  21  21  19  24  27  28  34  37  39  46  51 \n 52  55  61  61  61  61  61  60  58  58  58  58  57  57  57  56 \n 53  55  56  55  56  56  55  55  55  52  55  54  56  55  56  55 \n 53  53  53  51  53  54  51  51  51  50  51  50  50  51  50  48 \n 47  48  47  47  46  45  46  46  46  44  41  40  41  40  40  39 \n 40  41  41  41  41  42  43  42  42  42  45  44  44  42  42  44 \n 41  34  22  21  20  21  29  57 106 115 119 156 163 163 159 154 \n155 155 153 149 148 150 150 150 149 148 147 150 156 155 151 150 \n148 147 148 149 146 148 147 106  34  18  18  18  25  32  20  22 \n 24  26  32  39  48  50  58  63  66  66  65  65  65  64  65  63 \n 65  66  64  65  67  65  65  66  66  67  67  64  63  64  62  62 \n 62  61  62  62  62  62  62  63  62  63  62  62  59  57  58  57 \n 57  57  58  58  55  57  56  56  56  57  57  56  57  56  55  56 \n 54  55  55  56  55  57  59  59  59  58  59  58  58  55  56  57 \n 57  58  58  58  56  54  52  52  49  45  44  43  33  25  23  22 \n 26  33  47  96 139  71  63  63  68  74  89  92  97 105 113 115 \n115 125 125 126 126 127 128 142 156 127 134 118 117 114 111 113 \n112 103 100 105  94  93  93  95  98  97 100 104 106  61  29  21 \n 22  29  31  23  20  23  24  29  34  39  40  42  43  47  49  51 \n 51  52  54  53  53  53  52  52  54  54  53  55  54  53  55  53 \n 54  54  54  54  53  52  53  55  53  53  53  52  52  54  56  57 \n 56  57  58  57  57  57  56  57  59  61  60  60  62  62  63  61 \n 61  59  58  53  54  53  52  49  51  51  51  50  51  49  48  48 \n 49  50  49  49  49  48  46  45  47  46  45  46  47  45  44  44 \n 43  44  42  41  40  40  40  37  32  29  26  27  34  36  38  44 \n 83  44  37  35  39  39  41  43  42  42  42  43  40  37  35  35 \n 34  33  35  33  33  35  35  35  35  35  37  36  38  41  41  44 \n 56  56  57  55  57  55  55  56  56  56  56  56  55  54  55  55 \n 54  54  52  51  51  50  51  50  51  52  50  49  48  49  47  47 \n 47  46  46  46  44  44  44  43  43  43  43  46  44  42  40  39 \n 35  35  26  23  20  20  29  46  85 101 101 123 241 249 232 189 \n145 187 189 166 127 161 192 140 122 219 193 150 111 123 167 243 \n224 208 118  64  28  23  21  20  22  25  27  33  38  40  44  49 \n 52  54  60  61  60  61  60  60  60  59  57  57  58  58  56  56 \n 58  55  55  56  57  58  55  54  54  53  53  53  54  53  55  55 \n 54  54  56  55  53  52  51  52  52  51  50  50  50  51  50  47 \n 48  48  47  47  45  46  46  46  46  44  42  41  40  40  41  39 \n 38  41  41  40  41  42  41  41  45  43  45  45  44  42  42  41 \n 42  37  24  21  20  19  24  47  87 118 117 142 157 159 155 153 \n153 153 160 153 152 153 154 152 148 149 147 150 153 150 145 149 \n149 149 153 154 152 149 152 100  35  20  17  17  26  31  22  23 \n 25  27  32  37  46  47  56  62  64  64  63  64  62  61  64  63 \n 62  64  64  66  66  65  64  65  66  63  66  64  65  65  63  64 \n 63  60  62  60  63  63  62  62  62  63  62  62  61  62  60  56 \n 56  56  57  58  55  57  58  57  56  58  58  57  56  56  55  55 \n 55  54  52  52  55  57  58  59  58  58  57  56  58  54  57  57 \n 59  58  58  58  56  55  52  51  50  47  44  41  33  26  21  20 \n 21  26  43  66 151 142 129 122 111 104  89  79  71  65  58  59 \n 61  61  66  67  74  78  84 107 120 101 119 108 111 113 122 129 \n152 133 124 169 119 126 127 124 143 135 148 173 194  63  27  22 \n 23  29  30  23  22  22  25  30  35  38  41  41  43  46  50  52 \n 52  52  53  53  54  53  52  52  54  54  53  54  53  53  54  54 \n 52  53  53  53  52  52  51  53  53  53  50  53  50  50  54  53 \n 53  52  55  53  51  50  50  52  52  52  53  52  55  55  54  53 \n 53  50  52  52  53  50  50  49  51  51  50  50  50  50  50  51 \n 50  50  50  48  49  50  48  48  49  46  45  45  46  46  44  44 \n 44  44  42  42  41  39  38  37  32  29  26  27  32  36  34  46 \n 75  54  37  36  35  36  37  39  40  41  42  42  41  40  37  36 \n 34  33  34  35  36  35  35  35  37  36  37  39  40  40  43  48 \n 54  54  56  57  57  56  55  58  55  54  56  56  56  55  53  53 \n 56  55  52  51  52  52  52  51  51  51  50  49  49  48  46  45 \n 47  47  45  45  44  44  44  44  44  44  43  45  44  41  39  39 \n 35  32  29  24  20  20  22  40  68  94  99 100 184 246 227 177 \n141 195 180 165 123 170 194 154 129 224 183 147 105 124 139 227 \n253 246 173  69  33  23  19  20  20  26  25  33  37  39  41  47 \n 50  54  59  61  62  61  61  60  62  60  59  58  58  58  57  58 \n 57  56  56  58  56  58  56  55  54  55  55  55  55  53  53  56 \n 55  55  55  53  54  52  53  53  52  50  51  51  51  50  50  49 \n 49  49  48  47  47  46  45  46  45  42  40  40  41  41  40  38 \n 40  42  43  41  40  41  41  42  46  46  45  46  44  43  41  41 \n 43  40  27  21  19  18  21  37  79 121 116 137 159 160 159 160 \n162 155 156 156 162 156 155 158 151 146 142 145 149 147 146 148 \n149 149 152 157 156 152 153  97  32  17  17  18  26  30  22  24 \n 26  28  32  38  45  48  55  61  64  64  63  63  63  63  63  64 \n 64  64  63  65  65  65  66  65  66  66  65  64  65  66  65  66 \n 64  62  63  63  61  60  62  63  62  63  62  62  62  62  60  59 \n 58  56  54  53  54  57  57  56  56  57  58  56  57  55  55  55 \n 54  54  53  53  54  55  57  57  58  58  57  57  58  57  56  56 \n 57  58  57  57  57  56  52  51  50  47  44  40  36  28  20  20 \n 22  25  38  49 144 151 149 152 157 156 158 156 155 151 146 144 \n139 127 123 116 108 100  91  82  79  74  71  66  61  58  58  66 \n 75  73  81 105  88  95 104 107 134 126 144 168 175  51  28  22 \n 23  30  30  22  21  22  26  30  36  39  42  43  44  46  53  52 \n 53  52  52  53  55  54  54  54  54  54  54  55  53  52  54  54 \n 52  53  53  54  53  53  52  52  51  52  52  50  49  50  52  52 \n 53  53  55  54  54  52  52  53  52  51  52  52  55  55  52  52 \n 51  50  52  52  52  51  50  50  51  51  50  51  51  51  51  50 \n 50  49  50  48  48  49  47  47  48  48  45  47  46  47  44  45 \n 43  42  41  41  40  39  39  39  34  29  27  27  31  35  35  46 \n 66  66  36  37  37  39  38  36  37  38  41  42  42  41  40  36 \n 34  35  36  37  34  34  36  34  36  35  37  39  44  45  48  52 \n 53  52  53  55  56  55  56  55  56  57  55  54  55  55  54  55 \n 54  55  54  54  51  51  54  52  52  51  50  49  49  48  47  46 \n 48  48  46  45  44  45  42  41  43  43  42  43  44  42  42  41 \n 39  35  31  27  20  19  21  26  58  77  98 103 114 195 211 173 \n146 202 169 167 124 181 190 157 140 229 170 143 102 123 121 186 \n253 251 235 110  31  24  20  21  22  25  25  32  37  38  42  48 \n 49  54  60  61  59  61  60  60  59  58  59  59  56  57  56  55 \n 58  57  56  56  57  56  56  56  56  56  56  54  54  52  53  54 \n 54  55  55  54  55  53  54  53  54  53  53  51  49  49  49  49 \n 48  49  48  47  46  44  45  45  46  43  41  41  41  41  40  38 \n 38  39  42  42  41  41  42  42  46  47  46  43  43  44  42  40 \n 42  43  30  21  19  19  19  25  65 110 118 131 163 158 164 163 \n159 161 160 160 168 161 157 155 151 153 146 147 151 149 150 154 \n152 151 151 154 155 154 156  96  27  19  17  19  26  29  22  23 \n 26  28  33  38  46  48  54  60  62  63  63  62  63  63  63  65 \n 61  62  63  65  64  63  66  66  64  66  66  65  64  63  65  64 \n 63  64  63  63  61  59  62  62  61  61  61  60  59  59  59  60 \n 58  56  56  57  54  55  56  55  58  58  57  56  57  56  55  55 \n 54  53  53  53  53  54  55  57  59  58  58  58  57  56  55  55 \n 56  57  57  55  56  55  52  51  48  46  45  43  38  29  21  19 \n 22  23  36  46 116 143 108 109 109 111 115 116 122 126 131 134 \n138 142 146 146 150 152 156 157 161 160 157 156 151 145 142 133 \n121 112 106  98  85  79  71  67  64  65  65  69  74  45  28  22 \n 24  31  29  22  21  23  28  33  35  37  41  42  45  49  53  52 \n 53  54  53  52  55  55  54  55  54  54  53  54  54  53  54  55 \n 53  54  53  53  52  53  53  51  52  52  51  51  50  50  51  51 \n 52  52  52  53  52  52  51  53  52  51  53  53  53  54  54  53 \n 51  51  53  52  52  52  52  52  52  51  50  48  48  49  50  49 \n 50  49  48  48  49  47  46  48  48  47  45  47  46  46  43  44 \n 44  45  43  41  41  39  39  37  34  29  26  27  29  33  35  42 \n 61  75  38  37  38  39  38  36  38  40  40  42  42  41  43  39 \n 36  35  37  38  34  34  35  36  36  39  41  44  50  54  57  59 \n 53  52  55  55  56  56  56  57  59  57  56  55  55  55  56  56 \n 54  54  55  52  51  53  54  52  53  51  49  48  50  49  48  47 \n 49  48  48  46  46  46  44  43  44  44  44  44  44  42  40  41 \n 38  36  31  28  20  19  19  21  48  65  99 105 101 120 179 187 \n177 190 180 179 161 187 179 158 153 225 157 147 112 118 108 148 \n251 253 248 143  26  24  22  22  23  24  26  33  39  38  39  46 \n 51  53  60  62  58  60  61  61  59  59  58  58  57  58  57  57 \n 57  57  57  55  56  55  56  56  56  57  56  54  55  55  55  56 \n 54  56  57  56  56  54  55  54  54  55  55  52  51  51  53  52 \n 48  50  48  48  47  47  47  46  47  44  42  41  40  41  40  38 \n 39  39  42  43  42  41  42  43  45  47  46  47  44  43  42  40 \n 40  42  34  24  22  20  19  21  50  86 121 129 156 153 157 160 \n157 161 161 159 162 161 156 161 161 153 152 156 153 156 158 159 \n155 155 156 157 155 155 153  93  30  20  18  20  26  28  23  25 \n 25  27  34  40  46  48  54  59  64  64  65  64  63  63  63  64 \n 62  62  63  63  64  65  66  65  64  65  65  64  62  63  63  64 \n 62  63  63  61  62  61  60  61  59  63  64  62  60  59  58  61 \n 60  59  58  58  56  54  56  55  58  57  58  56  56  55  55  56 \n 54  55  54  53  55  54  56  57  57  57  58  56  55  55  54  54 \n 57  57  59  57  57  56  53  50  48  46  44  42  36  30  22  19 \n 21  21  31  46  89 145 131 123 121 122 120 117 119 115 110 108 \n108 110 110 113 113 112 118 120 126 129 132 136 141 144 148 151 \n154 155 160 163 167 166 163 161 156 155 151 152  91  41  26  22 \n 25  31  27  21  22  23  25  30  36  39  41  42  46  50  55  53 \n 54  53  53  53  55  55  55  56  53  54  54  54  54  53  53  54 \n 53  53  53  52  52  53  53  52  53  53  52  51  52  52  52  53 \n 52  51  52  53  54  53  53  52  52  52  52  53  53  55  55  52 \n 51  51  52  53  52  53  53  52  51  50  50  49  49  50  51  51 \n 50  50  49  48  48  48  48  49  47  46  47  47  47  47  45  45 \n 43  43  43  43  41  40  40  39  35  30  25  26  28  31  34  42 \n 56  87  42  40  41  40  41  38  40  41  40  44  45  44  43  42 \n 41  40  39  38  39  38  39  41  42  45  50  55  55  58  62  61 \n 54  54  57  55  55  57  56  55  58  57  57  57  57  55  55  55 \n 55  56  55  54  53  52  54  53  52  50  49  48  50  48  49  47 \n 50  49  47  48  48  46  46  45  43  44  44  43  43  41  40  39 \n 38  36  34  30  23  20  19  20  37  48  81  94  98 102 126 177 \n192 191 191 189 188 186 184 180 167 165 163 165 159 149 135 135 \n190 202 200 114  29  25  21  21  21  23  25  30  39  41  42  46 \n 48  52  58  61  61  61  59  60  60  59  57  59  59  59  59  59 \n 55  56  55  56  55  56  56  57  56  56  55  56  57  56  56  56 \n 55  55  56  56  54  55  55  56  56  56  54  54  52  53  52  51 \n 50  51  50  49  48  47  47  46  47  45  42  41  42  41  40  39 \n 39  41  41  41  40  41  42  43  44  45  47  46  46  42  41  40 \n 41  41  36  26  22  20  21  22  36  58 119 129 150 153 155 156 \n159 162 164 158 151 150 157 166 163 156 159 161 160 161 161 161 \n159 158 157 158 155 154 154  87  31  21  19  20  26  28  21  24 \n 26  28  36  40  45  48  56  60  64  63  64  63  61  62  61  61 \n 63  61  63  62  63  64  63  63  63  63  63  64  63  62  63  61 \n 62  63  62  61  61  62  60  62  61  60  61  60  58  59  59  59 \n 60  60  59  58  56  57  56  57  55  55  57  57  56  56  55  55 \n 54  53  54  53  55  55  55  55  54  57  58  57  55  53  53  54 \n 55  57  56  56  57  56  54  51  49  47  45  43  38  32  24  20 \n 20  18  25  39  68 142 137 130 129 133 131 134 133 132 130 130 \n131 131 130 125 120 122 121 123 113 109 107 107 103 108 110 111 \n114 116 117 124 132 134 139 139 141 144 149 153  89  37  26  23 \n 26  33  24  22  21  24  26  30  37  41  43  42  44  49  52  54 \n 54  53  53  53  55  55  54  53  53  55  54  52  51  53  53  52 \n 54  53  52  51  51  54  53  52  53  52  51  51  52  52  54  53 \n 53  52  53  52  52  53  51  53  53  51  53  55  53  55  53  52 \n 53  54  52  54  53  52  53  51  52  52  51  50  50  50  50  50 \n 51  50  48  48  49  49  48  47  47  47  47  46  46  46  47  45 \n 45  44  43  41  40  40  40  37  35  30  26  25  26  29  33  35 \n 50  92  47  44  43  44  43  42  43  44  45  47  49  48  49  48 \n 47  49  47  43  43  44  47  46  48  50  55  57  59  61  65  71 \n 56  57  57  55  56  56  55  55  57  56  55  56  55  55  55  56 \n 56  55  56  55  53  53  53  52  53  51  49  48  48  49  50  48 \n 50  51  48  49  49  48  48  46  44  44  44  45  43  41  42  39 \n 39  37  34  30  24  20  20  21  26  44  66  89  92 102 105 141 \n179 192 192 191 191 191 187 184 182 180 175 169 162 159 156 155 \n150 149 145  90  30  25  22  21  21  22  25  29  37  38  44  46 \n 47  51  58  61  61  62  57  59  60  58  59  59  58  58  58  57 \n 56  57  56  57  54  55  56  57  56  56  55  56  55  54  55  55 \n 54  55  56  56  56  54  54  55  55  56  54  53  54  54  52  52 \n 51  50  49  48  49  47  45  46  46  44  43  42  41  41  40  40 \n 40  41  41  42  40  41  42  42  44  47  47  45  45  44  40  39 \n 38  39  37  28  22  21  21  22  29  49 108 132 142 155 159 159 \n167 165 168 162 155 156 159 164 162 163 163 164 165 160 156 159 \n154 158 157 160 158 154 153  84  31  19  20  20  27  28  20  22 \n 27  30  37  42  45  47  55  59  63  63  63  62  61  63  62  63 \n 63  62  64  62  64  63  63  64  62  61  63  63  63  64  62  61 \n 62  62  63  62  61  64  65  64  64  60  62  60  61  61  61  62 \n 60  60  59  58  56  57  58  57  54  53  55  57  56  56  56  55 \n 54  55  54  54  55  55  53  54  53  57  58  58  55  52  52  52 \n 55  57  56  56  56  55  53  53  50  47  45  42  38  34  25  21 \n 19  20  23  33  58 128 141 131 136 134 131 133 131 127 125 129 \n134 133 134 132 130 133 147 167 133 128 135 131 129 126 128 133 \n119 119 132 138 129 138 148 139 133 122 119 115  76  36  26  21 \n 27  32  23  21  21  23  27  33  37  41  43  43  45  49  54  55 \n 55  53  54  55  55  54  55  54  54  53  54  53  53  54  52  52 \n 53  53  53  52  52  53  53  53  53  52  52  52  54  54  51  53 \n 52  53  53  52  52  53  54  53  52  52  51  53  53  55  53  51 \n 53  53  53  53  55  52  50  50  51  51  51  50  51  51  50  50 \n 51  50  49  49  49  49  49  48  49  49  47  46  47  46  46  45 \n 46  44  42  42  40  41  39  38  36  31  26  26  25  28  33  35 \n 50  87  60  45  45  46  45  46  45  48  49  50  51  52  50  49 \n 51  51  47  47  46  46  49  52  53  53  59  61  68  75  94 133 \n 56  57  56  55  56  56  55  56  55  54  56  56  54  54  55  54 \n 55  56  53  52  53  54  53  53  54  53  53  52  49  50  50  48 \n 48  49  49  49  48  51  50  49  48  47  47  45  44  44  43  42 \n 39  39  33  31  24  22  18  18  19  34  52  85  95  99 101  99 \n121 157 187 189 190 191 188 186 186 186 182 177 174 176 180 181 \n183 188 198 119  25  25  23  21  22  20  28  32  38  38  41  44 \n 47  49  58  61  60  61  59  59  60  60  60  59  59  60  57  58 \n 58  57  56  54  55  55  57  57  56  56  55  57  57  56  55  56 \n 54  53  55  55  56  55  55  55  54  55  53  54  54  55  52  52 \n 51  49  48  49  50  46  46  46  48  47  46  43  41  41  41  42 \n 39  40  41  44  43  41  43  43  44  45  47  46  45  42  40  40 \n 39  38  39  31  24  21  20  20  24  43  78 124 131 155 160 160 \n162 163 168 167 163 164 161 163 163 161 163 164 165 163 154 161 \n152 146 148 154 155 161 153  80  31  20  19  19  26  28  21  24 \n 29  33  39  43  46  48  54  60  61  62  61  61  63  64  62  63 \n 62  61  60  60  63  63  62  62  63  62  63  63  64  64  64  63 \n 63  62  62  63  62  65  66  65  65  66  65  62  63  63  62  63 \n 64  62  61  61  58  57  59  58  57  56  55  55  54  54  53  53 \n 57  53  55  55  54  54  53  54  54  54  55  55  55  51  52  52 \n 53  54  56  56  54  55  54  53  50  45  43  41  39  35  27  21 \n 19  20  20  29  49 103 151 141 141 135 134 132 131 130 127 127 \n131 133 130 130 133 131 150 157 119 134 132 132 130 133 133 151 \n117 119 173 175 174 202 235 225 228 177 158 170  70  36  24  21 \n 27  31  24  20  21  25  30  34  38  42  43  43  47  52  52  55 \n 54  54  54  55  55  56  55  53  54  54  54  53  53  53  51  53 \n 54  53  51  52  53  53  53  52  53  53  52  53  54  54  53  53 \n 54  51  53  52  54  54  54  53  54  55  54  54  53  54  54  53 \n 52  53  54  52  53  53  51  51  51  51  51  48  51  51  51  50 \n 49  50  48  49  49  50  49  49  48  49  47  47  48  47  47  47 \n 45  44  42  40  39  41  40  37  36  31  26  24  25  27  33  34 \n 46  77  81  47  48  47  48  47  46  47  48  51  52  53  53  52 \n 48  46  43  42  47  47  46  52  72  78  87 111 148 180 220 239 \n 58  57  56  55  56  56  54  55  55  54  55  54  54  54  53  54 \n 54  56  54  54  54  54  55  54  55  55  55  55  51  51  52  49 \n 48  51  50  50  51  50  51  50  49  48  48  47  45  44  41  39 \n 39  36  33  29  26  23  20  19  19  26  43  74 100  99  99  95 \n 98 113 148 169 182 187 191 193 196 199 194 193 195 199 206 205 \n206 195 175 107  27  26  22  21  22  20  29  39  39  40  41  44 \n 45  50  58  60  60  61  58  60  61  61  61  60  60  60  58  58 \n 58  56  57  57  57  55  56  57  58  57  56  57  58  57  57  58 \n 56  54  55  56  55  54  53  54  56  56  55  54  53  55  54  53 \n 53  50  50  51  50  48  48  47  48  48  45  43  41  41  40  40 \n 38  39  41  44  44  42  42  44  45  46  48  46  44  43  41  42 \n 39  38  37  32  26  22  20  21  20  34  62 113 127 152 169 168 \n166 168 172 172 167 166 163 166 167 166 166 163 160 162 159 163 \n163 164 153 151 154 154 154  79  32  22  20  20  26  29  21  24 \n 29  34  40  43  44  48  55  63  62  62  63  63  64  64  63  62 \n 63  62  62  63  63  62  63  63  63  64  64  64  66  66  65  65 \n 65  65  64  65  65  66  65  66  67  67  64  62  61  62  63  65 \n 65  64  65  63  60  59  60  60  59  58  57  56  54  53  51  53 \n 54  51  54  53  54  54  54  55  54  52  53  54  55  54  50  50 \n 54  53  55  56  54  54  56  54  50  45  43  40  39  36  27  22 \n 19  18  19  25  45  73 154 144 137 136 135 134 137 136 131 133 \n134 133 130 133 134 134 151 148 118 133 136 136 136 137 137 148 \n112 123 178 170 179 195 241 243 240 191 156 181  62  35  23  19 \n 25  29  23  21  22  24  30  33  37  41  42  44  48  52  54  55 \n 54  54  55  56  56  57  55  54  54  55  54  52  54  52  52  53 \n 52  53  53  51  52  53  53  51  51  53  53  53  53  53  55  55 \n 53  52  54  53  54  55  54  54  54  56  56  56  54  55  55  53 \n 52  53  54  53  52  52  52  51  50  50  49  49  49  50  49  48 \n 50  51  49  49  48  48  48  50  48  47  46  47  46  46  43  44 \n 43  41  41  40  42  40  40  38  36  32  26  24  25  26  30  33 \n 43  63  99  53  52  52  55  55  61  62  60  59  63  64  73  73 \n 60  50  41  34  35  35  36  45  61  66 157 208 229 238 239 217 \n 55  55  54  54  55  55  55  53  54  54  52  54  54  53  52  54 \n 53  55  53  53  53  51  52  53  53  53  55  55  53  52  51  48 \n 48  50  50  52  51  51  52  50  50  50  51  49  44  40  37  36 \n 35  34  31  29  26  24  21  21  19  21  35  58 104  97  94  94 \n 93  95 104 121 149 170 183 191 194 197 199 194 178 167 160 141 \n128 118 112  81  33  25  23  22  22  20  29  39  38  41  42  43 \n 44  49  58  59  60  60  59  61  60  59  61  60  59  60  58  57 \n 56  56  55  57  56  57  57  57  57  57  57  56  57  58  58  57 \n 57  56  55  56  56  54  54  54  56  56  55  55  54  55  56  53 \n 53  54  53  52  50  49  49  47  48  49  47  46  43  41  41  42 \n 40  40  41  42  43  42  43  44  47  47  47  46  46  44  43  43 \n 42  38  35  33  26  22  19  19  19  28  54  94 126 131 198 204 \n195 196 194 189 187 186 180 179 177 173 172 174 174 174 170 169 \n168 170 171 168 171 164 152  77  30  23  21  19  25  27  21  25 \n 31  37  43  42  43  47  57  63  64  63  63  63  64  64  63  65 \n 66  64  63  64  62  63  64  65  63  64  64  66  66  67  67  68 \n 66  67  66  66  65  66  65  65  67  67  65  63  61  62  64  65 \n 66  66  66  65  63  62  64  61  63  61  60  60  59  56  53  54 \n 55  54  53  52  53  52  53  54  54  52  53  53  53  51  50  49 \n 51  52  54  55  55  56  54  53  52  48  42  40  40  40  30  24 \n 19  18  19  21  38  50 143 149 137 136 132 129 131 135 134 135 \n135 137 137 137 132 131 156 136 116 131 127 127 135 146 149 140 \n109 130 190 164 185 179 233 234 238 198 154 170  48  32  21  19 \n 28  30  23  22  23  25  29  32  36  39  42  45  49  52  53  54 \n 54  55  54  54  54  54  55  53  54  53  54  54  52  53  52  54 \n 52  51  52  53  53  53  53  53  53  54  53  53  54  54  53  53 \n 54  53  54  55  55  55  55  55  55  55  55  55  54  55  56  55 \n 52  54  54  53  52  52  51  51  51  51  49  48  49  49  49  49 \n 51  51  51  49  51  48  50  50  49  46  45  45  45  45  45  42 \n 44  42  40  41  39  39  39  39  36  34  27  25  24  23  29  34 \n 41  48 114  86  83  84  84  87  90  92  90  93  93  90  71  50 \n 37  31  29  29  25  28  36  49  80 107 160 172 172 165 129  69 \n 52  52  54  54  56  57  53  52  53  54  55  54  52  54  53  52 \n 53  55  53  54  55  54  53  54  53  52  55  54  54  54  52  49 \n 50  51  48  49  49  49  50  50  49  48  49  48  44  40  38  36 \n 34  33  31  29  26  26  24  22  21  20  29  49  83  97  96  97 \n 94  96  98  98 113 128 141 147 146 140 129 124 119 115 109 108 \n106 107 111  84  31  24  25  26  25  21  25  34  39  41  42  45 \n 46  52  59  57  58  59  58  60  60  60  59  58  59  59  58  57 \n 57  56  57  57  57  58  58  59  58  58  58  57  58  59  57  56 \n 57  56  55  56  55  54  55  57  57  57  57  56  55  56  56  53 \n 54  54  54  52  51  50  49  48  47  48  48  47  45  45  44  43 \n 42  41  42  43  45  44  44  46  47  47  47  46  47  47  45  41 \n 42  39  35  33  25  23  20  21  20  24  47  73 123 117 221 247 \n247 246 244 240 239 237 235 233 233 231 226 227 224 224 225 222 \n220 221 224 222 226 230 218 100  31  22  20  19  26  27  21  26 \n 32  39  44  43  44  48  57  62  66  64  65  65  65  67  66  67 \n 66  65  65  65  64  65  64  67  65  66  67  68  70  68  67  69 \n 67  66  66  67  64  66  65  65  67  67  64  62  61  62  63  65 \n 65  65  64  65  63  61  64  63  64  62  62  63  61  58  56  56 \n 55  56  54  52  52  53  54  54  55  53  54  55  52  53  50  49 \n 51  52  52  53  55  55  54  53  52  49  45  43  41  40  31  26 \n 22  20  19  20  32  45 122 147 143 137 137 137 133 136 139 141 \n141 138 141 144 141 138 158 129 119 136 151 165 191 214 189 129 \n112 131 187 168 183 161 196 199 204 186 158 161  43  28  24  21 \n 28  29  21  21  23  26  30  32  36  40  43  45  50  53  52  55 \n 53  54  54  53  54  54  55  53  55  53  55  54  53  54  52  53 \n 52  52  53  52  52  53  53  53  52  53  52  53  53  53  52  52 \n 54  53  53  54  54  54  56  56  56  56  55  56  55  56  56  56 \n 54  55  54  53  53  54  53  52  52  50  49  49  49  50  51  51 \n 50  48  51  50  51  48  49  50  48  49  49  47  45  44  44  44 \n 44  44  40  43  41  40  40  40  37  34  27  24  24  23  28  34 \n 38  44 108 109 108 110 108 104 106 107 107 108 112 104  85  69 \n 50  42  31  30  27  39  68  93 114 122 124 112  79  60  55  59 \n 52  51  52  53  53  53  51  50  49  48  50  49  50  49  51  52 \n 48  50  51  51  53  52  52  52  53  51  53  54  52  52  52  51 \n 50  51  50  50  47  47  48  46  48  47  48  44  42  40  38  37 \n 35  34  30  28  27  29  28  26  25  25  25  39  59  96  98 100 \n 96  93  96  95  95  98 100 105 105 103 103 103 104 103 102 104 \n107 110 114  87  35  27  26  26  27  24  23  29  38  42  43  45 \n 49  53  54  53  57  61  59  60  59  59  59  58  59  58  58  56 \n 57  57  58  58  56  58  57  58  57  57  58  58  58  58  55  55 \n 55  54  54  54  53  54  56  57  56  56  56  56  57  56  56  64 \n 59  54  55  52  51  52  49  48  50  49  49  48  46  46  45  45 \n 44  42  43  44  46  46  44  45  49  48  47  46  47  45  44  45 \n 43  41  35  32  26  24  22  21  22  21  36  53 110 123 172 245 \n251 250 251 252 250 249 246 252 250 250 252 249 245 246 250 252 \n251 249 252 242 250 253 241 112  32  23  19  18  25  27  22  27 \n 32  37  42  44  44  49  57  61  64  63  66  67  67  66  68  67 \n 66  64  66  66  67  66  66  68  67  68  67  66  69  68  69  68 \n 67  66  66  66  63  64  64  65  62  63  62  60  59  60  62  62 \n 64  63  61  62  61  60  63  64  63  61  63  62  61  60  57  57 \n 56  56  56  56  55  55  55  54  53  53  52  53  51  51  51  49 \n 51  50  53  56  56  54  54  52  50  49  45  42  41  39  32  25 \n 21  20  19  20  27  43 101 145 151 141 141 143 141 144 147 149 \n150 149 148 146 148 155 153 124 117 187 235 243 243 244 186 125 \n110 158 213 173 178 152 193 214 227 208 156 141  42  29  22  23 \n 32  28  21  22  23  26  31  33  40  42  42  44  48  51  53  53 \n 55  56  54  53  54  54  54  53  54  54  54  52  52  53  52  52 \n 52  53  54  53  53  55  53  53  51  52  52  53  54  53  52  52 \n 51  53  53  54  55  55  56  55  55  56  55  54  55  56  55  55 \n 53  53  53  54  55  55  52  52  52  49  49  50  50  51  50  49 \n 49  47  49  49  50  51  50  50  48  50  49  48  46  44  43  42 \n 43  44  41  41  42  41  40  40  37  33  27  23  23  23  26  31 \n 36  44  91 100  89  92  96  97  98  99 102 104 108 112 113 118 \n111 102  62  34  33  61 104 112 112  98  74  65  67  70  74  84 \n 52  51  51  52  50  51  49  47  42  41  43  42  44  42  44  44 \n 45  46  47  49  51  49  50  51  52  51  52  53  53  53  54  52 \n 52  51  52  51  46  46  45  40  43  42  43  40  42  41  39  36 \n 36  34  32  30  29  31  31  31  31  31  29  34  47  85 103 102 \n 95  93  97  95  97  94  92  97 102 103 101 102 106 105 106 107 \n108 112 115  88  37  30  29  30  30  27  28  33  41  42  43  46 \n 52  54  50  50  55  59  59  60  58  58  60  58  58  59  57  56 \n 56  57  60  59  59  57  57  59  57  56  58  58  57  58  55  56 \n 56  53  55  55  54  55  56  56  56  55  57  56  58  55  55  67 \n 63  52  54  53  53  52  51  51  50  49  50  49  47  47  46  45 \n 45  44  44  46  48  47  45  45  48  48  50  48  48  46  44  42 \n 41  40  36  33  30  23  22  22  22  23  30  47  93 124 138 224 \n253 252 249 249 249 251 247 249 246 251 251 247 245 246 251 250 \n251 246 250 248 253 253 239 106  35  23  19  19  24  26  22  27 \n 32  37  42  44  45  49  58  63  65  66  66  66  67  67  68  68 \n 69  67  67  68  68  67  67  68  67  69  67  69  68  68  67  66 \n 66  66  64  63  62  63  62  62  61  60  63  61  59  61  61  60 \n 60  61  61  62  61  59  61  63  62  62  63  62  61  62  58  58 \n 58  59  58  57  56  56  57  54  54  55  54  53  52  53  50  48 \n 49  50  54  54  55  56  55  53  49  49  46  41  40  37  34  27 \n 22  21  18  18  24  40  84 142 149 146 145 147 147 148 151 160 \n177 191 198 199 213 216 146 121 120 210 248 245 240 243 176 123 \n111 167 229 175 177 168 241 248 245 226 155 123  41  25  21  23 \n 33  26  21  21  23  28  33  35  40  40  43  44  49  51  55  56 \n 55  55  54  54  55  54  52  53  54  55  55  53  54  54  54  52 \n 51  51  52  51  54  56  53  54  52  52  52  54  53  54  53  54 \n 52  51  53  54  56  56  56  55  55  56  57  54  56  56  56  55 \n 53  54  54  53  54  54  52  52  52  50  49  49  49  50  51  51 \n 49  48  47  49  50  50  48  49  50  48  49  47  45  45  46  43 \n 44  43  42  40  39  39  39  39  39  34  28  24  22  22  25  30 \n 35  44  80  94  61  55  53  52  59  54  63  62  65  73  77  82 \n 90  94  65  40  42  69  85  78  72  82 108 128 104  97 115 135 \n 49  48  48  48  48  46  44  43  41  39  39  40  38  36  37  37 \n 38  36  37  39  42  42  45  43  47  47  48  50  52  51  51  51 \n 50  49  48  45  42  42  37  37  35  37  36  35  37  36  35  34 \n 32  32  32  31  33  34  36  37  39  38  37  38  42  51  98 106 \n 98  97  96  91  95  95  92  95 101 104 100 103 106 104 105 110 \n114 117 115  94  37  34  33  34  35  35  40  46  50  44  43  48 \n 50  49  48  47  51  57  59  59  59  59  58  59  57  56  58  56 \n 57  57  58  58  58  59  58  54  57  56  57  56  58  56  55  57 \n 56  56  56  55  54  55  55  55  55  56  56  56  56  56  55  55 \n 56  52  52  53  52  53  51  50  50  49  51  50  49  46  46  47 \n 46  47  45  45  47  48  48  50  50  50  50  48  47  45  45  42 \n 39  40  41  36  31  25  23  23  22  21  25  43  71 117 119 161 \n248 248 248 245 252 249 250 247 245 251 250 251 248 250 250 245 \n239 239 243 248 251 252 235  99  31  22  17  19  23  25  22  28 \n 35  38  41  44  45  49  59  61  66  67  69  67  66  68  68  68 \n 69  68  67  65  67  66  67  67  66  67  67  65  65  64  67  66 \n 65  63  63  63  61  60  60  61  61  59  60  58  59  60  58  59 \n 59  59  58  60  59  58  59  59  60  62  63  62  62  61  59  58 \n 59  58  60  58  56  56  55  55  56  55  55  55  56  55  51  48 \n 50  52  54  56  56  55  55  55  52  50  47  44  39  36  37  30 \n 22  21  18  17  20  31  63 127 151 160 170 176 196 211 225 233 \n237 239 243 244 247 227 138 120 126 218 243 240 239 244 163 123 \n111 177 236 186 170 164 231 241 220 182 158 100  40  25  21  23 \n 30  24  21  21  23  28  33  36  40  40  42  45  48  51  54  55 \n 54  56  55  54  54  54  55  53  54  55  53  53  54  53  54  51 \n 52  52  51  51  54  52  51  51  50  50  52  52  55  53  52  54 \n 55  53  54  54  54  54  54  56  55  56  57  56  55  56  56  56 \n 55  53  56  54  54  53  52  51  51  50  50  51  50  49  51  52 \n 50  51  49  47  49  50  48  49  48  48  47  47  46  47  46  45 \n 45  43  42  42  40  38  38  39  38  34  30  26  25  24  24  27 \n 34  45  64 135 163 158 155 148 139 133 125 126 121 115 107  98 \n 89  83  84  87  96 109 125 138 148 159 145 136 144 155 152 139 \n 48  47  45  45  45  43  41  40  40  38  37  39  36  35  34  33 \n 35  34  34  34  36  35  36  37  37  40  43  45  50  49  49  52 \n 49  47  47  45  40  36  35  35  34  34  34  33  34  34  33  32 \n 32  31  32  32  32  33  36  37  38  39  40  38  38  40  74 106 \n101 101 103  94  93  94  97  95 103 100  99  99 106 104 111 118 \n126 128 118  91  38  37  37  38  41  45  51  55  57  49  45  49 \n 50  48  43  44  50  57  60  59  58  60  60  58  57  56  57  57 \n 57  56  56  57  58  57  57  55  58  58  56  55  56  55  55  55 \n 55  55  56  54  56  55  55  55  55  56  54  57  57  55  56  55 \n 54  53  53  54  53  54  53  53  53  52  51  51  49  47  48  47 \n 47  48  47  48  50  49  50  51  50  50  49  50  49  47  45  43 \n 40  40  41  36  30  25  25  23  22  22  22  36  62 114 119 124 \n219 249 244 248 252 247 251 248 248 250 253 251 249 250 246 250 \n246 246 241 247 249 247 230  91  32  23  18  18  22  24  22  28 \n 34  36  39  44  46  51  57  61  67  69  69  69  68  68  68  68 \n 67  66  68  66  66  65  65  65  64  66  64  62  62  62  62  63 \n 62  62  63  62  60  60  60  61  60  59  59  57  57  58  58  58 \n 58  59  58  57  57  57  58  59  58  60  60  61  61  60  58  59 \n 59  58  58  59  57  57  56  57  57  55  56  54  54  54  53  51 \n 50  52  55  56  56  56  57  57  53  49  45  42  39  36  35  31 \n 23  21  19  18  20  26  51 113 153 209 227 228 233 235 242 243 \n241 241 240 240 244 222 130 110 134 226 244 243 245 245 152 124 \n112 191 239 192 162 161 197 193 162 155 162  89  39  23  21  24 \n 31  24  21  22  25  28  33  35  39  41  43  45  50  52  53  54 \n 56  55  55  55  54  53  54  53  53  54  54  52  53  53  52  51 \n 52  52  51  51  53  52  52  51  51  51  53  54  53  54  55  53 \n 53  53  54  55  54  55  54  55  57  56  56  56  56  54  55  57 \n 53  53  55  54  53  53  52  51  50  49  49  51  51  50  51  52 \n 50  51  49  50  49  49  49  49  48  48  48  47  46  46  46  43 \n 43  42  42  41  40  39  38  39  37  36  31  26  25  23  23  25 \n 33  42  59 126 154 155 159 163 163 162 166 167 168 167 171 174 \n174 173 171 169 162 160 165 159 156 158 165 165 157 145 128 123 \n 47  45  42  43  43  42  39  38  38  38  36  37  33  35  35  32 \n 33  34  34  33  33  32  31  32  31  32  35  36  39  42  45  47 \n 45  45  46  45  41  37  35  33  33  32  33  33  32  34  31  33 \n 31  30  29  29  30  32  35  39  39  39  40  37  34  39  52  93 \n109 105 102  96  93  94  95  98 101 100  94 100 104 111 120 123 \n120  99  71  61  49  42  42  42  43  48  56  56  59  57  47  53 \n 53  47  43  43  49  58  59  58  56  57  58  56  56  59  57  58 \n 58  56  56  56  57  57  57  55  57  57  55  55  55  54  55  56 \n 56  54  55  57  57  56  56  57  55  55  55  56  56  56  55  56 \n 55  54  51  52  53  54  53  52  53  53  53  52  51  50  49  50 \n 49  49  49  50  51  50  49  50  49  49  51  50  49  48  45  45 \n 41  39  38  36  31  28  23  24  24  22  23  28  49  87 123 120 \n153 232 246 245 245 243 243 243 248 248 249 251 250 252 249 252 \n252 251 251 250 246 239 202  73  27  20  18  17  23  23  21  26 \n 34  36  40  43  45  50  59  64  68  70  69  68  67  67  68  67 \n 65  62  61  62  65  65  62  62  63  63  64  61  60  59  60  62 \n 59  58  61  60  58  60  60  59  61  60  59  58  56  58  59  58 \n 57  59  58  55  56  55  57  57  59  59  58  60  58  59  59  59 \n 60  60  58  60  58  60  59  59  56  56  56  54  54  54  53  50 \n 50  52  55  57  58  57  56  55  53  50  45  43  40  38  35  32 \n 26  22  19  19  19  23  41  83 146 205 238 233 225 234 237 239 \n241 239 241 240 241 213 123 101 144 233 243 246 247 243 140 120 \n119 212 242 203 163 177 131 148 153 153 154  81  34  23  20  24 \n 30  25  22  22  24  29  33  36  39  42  42  44  50  52  53  54 \n 55  55  54  54  54  54  54  54  54  54  55  54  51  52  51  52 \n 52  52  52  52  51  52  53  52  50  51  53  54  53  54  54  52 \n 53  53  52  53  55  52  55  54  55  56  56  56  56  56  55  55 \n 53  53  53  54  52  53  51  51  50  48  48  48  49  50  48  49 \n 50  50  49  51  51  51  49  49  48  49  49  48  46  45  47  46 \n 44  41  41  40  42  40  38  37  37  36  30  25  23  22  23  25 \n 32  35  54 115 122 121 124 125 134 131 136 140 142 147 151 149 \n158 155 144 125 123 132 127 128 129 128 129 132 128 123 118 117 \n 47  44  41  43  42  42  40  39  40  39  39  37  34  36  34  32 \n 32  31  32  32  31  30  32  31  31  30  32  33  36  36  39  42 \n 41  44  45  46  42  40  37  35  32  31  33  31  29  30  29  32 \n 32  30  28  28  31  34  37  40  39  39  38  35  32  32  46  63 \n103 110 104  97  98  95  96  98 102 104 100 103 112 118 114 106 \n 82  57  53  60  57  48  45  45  48  48  48  48  57  61  54  57 \n 58  51  46  46  51  57  57  54  52  54  53  55  55  56  59  58 \n 58  57  59  57  56  57  55  55  55  56  56  56  55  55  55  57 \n 55  55  55  56  56  57  55  55  54  55  54  55  55  54  55  55 \n 55  55  55  55  54  53  54  54  54  53  53  53  52  51  48  49 \n 50  49  49  48  50  51  49  51  50  50  51  50  48  49  46  43 \n 43  40  37  36  31  27  24  24  22  22  24  25  44  67 123 122 \n127 172 204 210 218 222 234 241 240 244 249 250 249 248 250 253 \n251 241 234 219 198 190 160  57  23  19  18  18  23  23  21  26 \n 38  36  39  41  44  50  58  62  66  69  69  70  70  68  66  66 \n 64  62  60  60  62  63  61  61  62  63  62  61  61  59  61  61 \n 62  59  59  60  59  60  60  61  61  60  60  57  57  57  59  58 \n 58  59  56  57  58  56  57  56  60  58  58  59  56  56  57  56 \n 60  60  59  59  59  58  58  59  58  57  57  56  56  56  55  52 \n 52  55  58  58  58  59  57  56  53  50  47  44  41  39  36  33 \n 28  22  19  18  18  20  38  62 141 183 243 242 241 245 244 240 \n239 237 243 244 242 205 119 101 155 237 244 244 249 240 133 118 \n123 214 227 197 163 176 127 144 150 148 146  71  29  23  20  26 \n 30  22  21  22  25  30  33  36  38  41  43  46  50  52  54  55 \n 56  54  54  53  54  55  54  54  54  54  53  53  52  52  53  53 \n 53  53  53  52  52  53  52  51  49  50  53  55  52  53  54  52 \n 53  55  53  54  54  52  52  55  56  55  57  55  54  55  56  54 \n 54  53  51  52  52  54  51  51  52  50  49  48  49  50  49  49 \n 49  48  49  49  48  49  49  50  50  50  47  48  45  45  47  47 \n 45  43  42  40  40  40  38  37  38  38  31  26  24  23  22  24 \n 29  34  51 104 127 121 121 124 121 120 123 126 127 128 127 131 \n151 150 142 138 128 131 123 120 123 130 127 126 122 121 122 121 \n 47  44  41  41  41  40  40  39  39  39  38  36  36  36  36  34 \n 32  32  31  30  32  30  32  31  30  29  31  33  34  32  33  35 \n 37  40  45  47  46  45  39  35  33  32  31  30  30  29  28  29 \n 30  30  31  33  34  35  39  40  41  38  36  33  34  37  48  52 \n 61  88 106 105 102  99 101 103 111 112 105 105 101 102 114 109 \n 47  57  89 135  93  55  52  51  46  43  42  43  49  57  62  63 \n 65  56  49  48  54  56  50  47  46  46  49  51  54  57  56  59 \n 58  58  57  56  56  56  55  54  54  55  54  56  56  56  57  55 \n 56  55  56  56  54  56  55  56  56  56  55  55  56  56  54  56 \n 57  56  56  55  54  54  56  54  55  55  53  52  52  53  52  51 \n 51  51  50  51  50  52  51  52  50  48  51  50  51  48  44  42 \n 42  41  37  35  29  27  27  26  23  23  24  21  37  52 111 118 \n121 129 149 138 130 129 131 136 138 145 157 167 175 183 201 209 \n200 186 185 185 186 182 150  52  25  18  16  16  22  23  22  28 \n 49  42  39  43  45  50  59  61  68  70  68  69  67  67  65  65 \n 63  64  63  63  62  63  61  59  59  60  61  60  61  61  61  61 \n 61  58  59  60  59  60  61  60  61  60  58  58  59  59  60  59 \n 59  58  57  59  58  57  56  57  58  58  56  56  56  56  57  56 \n 57  57  59  59  59  60  58  61  59  58  59  58  58  58  58  57 \n 55  56  59  58  57  60  58  56  54  51  48  47  45  41  38  35 \n 30  25  20  20  18  18  30  51 123 154 236 243 244 245 236 238 \n240 240 235 231 239 189 113 103 171 242 239 236 244 230 124 116 \n130 172 156 183 162 161 135 142 144 144 131  59  27  22  21  27 \n 30  22  21  23  27  30  35  36  40  41  42  45  51  53  54  55 \n 56  54  54  55  56  57  55  54  54  54  54  53  53  52  51  53 \n 52  52  54  54  54  54  52  52  51  51  53  55  54  52  53  54 \n 53  54  54  54  54  53  55  55  54  56  53  55  55  54  56  56 \n 54  54  54  54  53  53  51  51  52  51  49  49  49  49  49  51 \n 51  50  50  50  49  47  48  51  50  49  47  47  45  46  46  44 \n 43  43  42  38  39  39  38  37  37  38  33  28  22  21  21  22 \n 28  33  42  84 132 117 118 122 123 120 117 121 122 122 126 128 \n131 129 129 128 130 132 132 130 124 122 121 118 117 117 121 116 \n 43  42  40  39  38  38  39  40  39  39  37  38  38  38  37  35 \n 34  33  32  32  32  31  32  32  28  28  29  30  30  31  32  31 \n 34  36  40  43  45  46  43  37  33  33  32  30  31  30  31  30 \n 29  29  31  34  39  39  43  45  41  34  33  31  40  51  69  72 \n 54  62  91 107 113 112 111 113 119 115  95 100 106 114 124 112 \n 55  71 178 238 170  70  53  50  46  44  42  42  46  54  63  71 \n 73  64  54  52  54  51  43  43  42  41  45  45  50  51  54  57 \n 57  58  57  56  56  55  54  54  53  54  55  55  53  56  56  55 \n 55  55  54  55  55  55  54  55  56  55  56  56  56  55  54  55 \n 57  57  57  56  56  54  55  54  54  56  55  53  53  54  53  54 \n 52  52  52  51  52  51  51  51  50  50  51  50  48  45  42  41 \n 40  40  36  34  31  29  27  25  24  24  24  23  32  48  90 122 \n119 123 134 154 161 140 135 138 149 160 174 183 190 196 201 199 \n188 177 168 160 152 143 122  52  25  19  18  18  23  23  22  28 \n 45  41  40  42  45  50  59  61  67  69  68  69  68  68  65  65 \n 65  64  63  63  63  62  60  60  61  61  61  60  60  61  62  62 \n 60  60  60  61  61  61  63  62  61  60  58  58  59  59  60  60 \n 60  58  58  60  59  57  57  58  57  59  56  56  56  55  57  57 \n 56  56  57  56  57  56  57  59  59  59  59  58  58  59  59  57 \n 55  56  59  60  60  60  61  59  56  53  50  49  44  44  40  35 \n 32  26  21  20  18  18  26  46 110 143 218 239 241 241 237 241 \n247 246 234 229 234 180 108 108 183 246 249 246 243 222 121 118 \n130 144 146 173 170 156 137 145 144 138 116  54  26  23  21  26 \n 27  21  21  25  28  31  35  36  39  41  43  47  52  53  55  55 \n 54  53  54  54  56  56  56  56  55  55  54  54  51  52  52  51 \n 52  52  53  53  53  53  51  50  51  50  52  53  54  52  51  52 \n 55  54  54  55  53  54  54  56  55  56  56  56  55  55  54  55 \n 55  55  54  53  52  53  51  52  50  51  49  48  51  49  49  50 \n 50  49  49  48  48  49  49  50  49  49  49  48  46  45  47  45 \n 46  43  42  38  39  39  38  38  37  38  32  28  24  21  20  24 \n 26  33  42  67 139 125 126 128 124 121 120 122 123 124 127 129 \n125 124 122 120 123 124 122 124 125 123 123 120 121 120 121 119 \n 46  45  44  42  41  39  40  40  38  41  40  38  39  38  36  35 \n 34  34  33  32  31  31  32  31  29  29  30  30  30  30  32  31 \n 33  32  33  35  37  39  42  42  39  36  35  32  33  33  32  31 \n 29  31  32  37  45  49  49  43  34  30  33  45  68  77  76  76 \n 83  76  60  71  89  98 106 102  92  98 105 119 124 125 125 122 \n 73 112 240 253 224 130  56  50  42  43  43  45  48  54  67  93 \n 81  80  64  55  47  46  42  40  38  40  41  42  43  46  50  54 \n 57  57  55  56  55  55  54  54  56  54  53  53  53  53  52  53 \n 55  54  55  54  53  55  56  56  53  53  55  56  57  57  56  56 \n 56  55  56  55  57  56  57  57  54  54  53  53  55  53  55  53 \n 51  53  52  52  52  51  51  51  51  50  49  49  48  42  40  39 \n 40  38  37  36  32  30  29  27  26  24  23  22  23  43  65 119 \n117 119 120 124 150 180 194 198 198 199 195 193 187 179 164 152 \n143 141 136 132 131 127 113  54  23  21  19  19  23  27  25  28 \n 36  38  38  42  47  51  57  59  65  68  68  69  66  65  64  64 \n 64  63  62  63  63  62  61  60  60  60  60  61  61  59  62  62 \n 61  62  64  64  62  61  61  61  62  62  59  57  58  59  60  59 \n 58  60  58  58  58  58  59  57  57  58  55  55  55  55  57  57 \n 54  56  57  56  57  58  59  59  60  60  58  60  59  60  61  60 \n 59  56  58  60  60  61  60  58  54  51  50  52  47  46  42  35 \n 32  29  23  20  18  17  23  37  85 140 184 229 236 241 243 242 \n243 244 235 244 239 166 108 109 198 247 240 238 229 183 122 120 \n134 149 150 163 175 157 122 144 144 141 108  47  24  21  24  29 \n 27  23  22  26  29  33  35  37  40  41  43  48  53  53  55  52 \n 52  54  53  53  52  54  56  55  56  53  53  53  52  52  52  51 \n 51  52  52  52  53  54  53  51  50  51  53  53  54  53  51  52 \n 54  53  54  53  53  53  55  56  57  56  56  55  57  56  56  57 \n 55  55  53  53  52  51  50  51  52  50  49  48  50  50  49  49 \n 51  50  48  48  49  48  49  49  49  47  47  49  49  47  46  44 \n 43  43  41  40  38  38  38  38  38  37  33  29  24  21  20  21 \n 25  31  39  49 138 123 123 124 119 121 122 119 120 123 125 127 \n123 121 123 122 121 127 126 121 123 122 117 116 117 121 121 121 \n 52  52  49  47  46  45  43  42  42  44  44  43  43  41  38  37 \n 35  35  34  33  34  32  32  32  32  30  28  28  30  31  33  31 \n 31  30  30  31  34  37  39  40  41  40  39  38  36  36  35  35 \n 31  34  38  42  48  46  41  35  30  35  56  73  78  76  86  92 \n 93  82  78  65  54  61  61  54  60  74  95 115 131 132 131 130 \n 90 144 241 254 237 185  94  54  44  43  41  48  70  90 102 115 \n 92  87  70  56  47  44  42  42  40  40  40  40  42  44  48  51 \n 54  55  53  52  54  53  53  54  52  51  52  50  50  51  52  52 \n 52  53  54  52  53  52  54  54  53  53  54  55  56  56  57  57 \n 55  56  57  56  58  56  56  56  56  56  55  56  56  55  54  55 \n 54  55  53  54  51  50  52  52  50  49  49  50  48  42  39  38 \n 39  38  35  33  31  32  31  30  27  26  26  25  24  38  53 107 \n122 120 120 121 126 138 153 164 168 161 152 148 139 136 130 129 \n130 129 129 126 125 123 108  49  22  19  19  19  27  37  29  29 \n 40  38  38  44  49  53  56  58  65  68  67  68  68  67  64  66 \n 64  63  63  63  63  61  61  62  62  61  62  62  63  61  63  64 \n 63  65  65  64  64  64  63  62  63  62  62  60  59  60  60  59 \n 60  59  61  60  58  59  58  57  58  57  57  56  55  55  57  57 \n 56  57  57  57  58  57  58  60  60  59  59  61  62  62  61  60 \n 58  57  59  60  61  61  60  58  55  54  51  52  50  49  44  36 \n 34  29  22  21  18  18  21  31  69 130 163 215 239 242 241 241 \n236 238 241 243 238 154 106 111 205 245 233 203 169 151 127 124 \n137 151 150 157 179 164 115 141 146 146 100  42  25  21  24  32 \n 27  24  22  26  29  33  35  36  39  42  44  48  52  53  54  52 \n 54  54  52  53  52  54  56  55  56  53  55  53  52  52  52  51 \n 52  53  52  52  53  52  51  51  53  51  52  52  53  53  52  53 \n 55  53  54  53  55  54  54  55  56  55  55  55  56  55  56  57 \n 55  54  54  54  51  50  52  52  52  50  50  48  48  51  49  49 \n 49  48  48  49  49  47  49  51  51  48  49  47  47  48  47  46 \n 42  42  43  41  40  38  37  36  37  36  34  28  24  21  20  21 \n 24  30  37  44 130 128 124 123 123 124 125 126 127 126 124 126 \n124 123 124 123 124 138 133 123 121 121 121 118 119 119 119 121 \n 67  67  65  64  62  61  58  56  54  52  49  51  52  51  47  45 \n 42  40  38  36  36  37  37  36  33  32  32  31  32  33  33  32 \n 31  30  29  29  31  34  35  37  38  41  43  46  46  45  44  46 \n 42  41  43  39  35  33  35  42  57  69  76  79  82  85  76  75 \n 59  46  33  32  37  40  44  49  59  70 112 159 225 207 162 139 \n109 142 225 254 243 201 173 102  81  82  85  93 188 156 121 125 \n110 100  72  58  48  45  43  42  41  41  41  41  40  44  49  52 \n 53  52  53  54  53  52  47  47  46  44  45  44  45  45  44  44 \n 46  45  48  48  49  49  48  49  50  49  50  52  53  53  55  55 \n 55  53  59  58  56  57  57  56  55  55  56  57  55  55  56  55 \n 55  54  52  53  52  51  48  48  50  50  50  50  48  44  42  40 \n 39  39  36  34  32  35  36  34  29  28  28  26  24  32  46  80 \n131 119 125 123 121 122 124 127 128 126 125 124 123 123 123 125 \n129 126 124 124 121 119 104  52  20  19  19  20  26  41  36  30 \n 39  36  35  43  50  54  53  57  65  68  67  67  64  63  64  63 \n 62  62  62  62  62  61  61  62  62  62  60  61  61  62  65  65 \n 67  65  66  67  65  64  64  62  61  59  60  59  58  58  59  59 \n 60  58  59  60  59  58  59  58  57  56  57  55  56  55  55  55 \n 56  55  56  55  55  56  57  59  59  58  61  62  63  64  61  61 \n 60  60  60  62  61  61  61  60  56  52  51  54  51  51  43  37 \n 32  30  24  22  19  19  19  25  53 107 160 214 242 241 241 237 \n242 241 242 245 231 144 110 117 215 243 226 180 162 148 123 123 \n144 143 142 146 174 169 135 165 155 144  89  47  26  23  23  32 \n 26  24  23  27  31  34  36  39  41  42  45  49  52  54  54  54 \n 53  53  52  53  53  56  56  56  52  51  54  53  53  52  54  53 \n 51  52  52  52  52  53  51  50  51  51  52  53  52  53  53  55 \n 54  53  54  54  54  55  54  53  55  56  56  56  57  56  56  55 \n 55  55  54  52  50  52  51  52  51  51  50  49  49  50  50  49 \n 49  49  51  49  48  48  49  48  49  49  49  47  48  47  46  45 \n 43  42  43  41  40  38  37  36  37  35  35  30  24  21  19  20 \n 23  27  37  40 107 133 124 124 128 127 125 127 129 127 126 126 \n128 128 125 125 126 125 122 126 126 123 126 122 121 122 122 121 \n 69  70  70  67  66  65  64  62  61  57  54  57  63  63  59  56 \n 52  49  47  44  42  41  40  41  39  37  38  37  37  35  35  33 \n 32  32  31  31  32  34  34  35  37  40  43  44  46  46  42  40 \n 37  35  38  38  43  50  60  68  76  80  82  74  58  52  43  44 \n 37  37  40  46  55  64  74  82  96 100 121 157 234 251 236 196 \n125 127 206 251 247 199 192 138 124 126 134  93 187 170 127 122 \n117 110  77  63  52  48  45  44  41  41  41  40  43  42  48  51 \n 54  54  53  50  48  47  44  44  42  42  41  42  41  41  40  41 \n 38  40  40  40  41  41  40  42  44  43  45  46  48  48  50  52 \n 54  52  57  58  57  56  56  56  55  55  56  56  55  54  55  55 \n 54  53  52  51  51  48  45  45  46  46  48  46  47  43  42  42 \n 41  40  37  35  35  37  38  38  36  34  32  30  31  35  47  53 \n127 123 124 126 121 120 119 120 121 119 122 121 123 123 122 123 \n124 124 123 121 122 120 100  52  20  22  21  23  27  34  36  30 \n 33  35  36  43  50  54  53  57  64  68  67  66  65  64  62  63 \n 61  60  61  61  62  62  61  63  61  62  61  62  63  62  63  64 \n 64  64  65  64  64  63  62  60  61  59  59  58  57  58  57  56 \n 57  59  57  59  59  58  59  58  57  58  57  57  56  55  56  57 \n 56  55  57  55  56  57  58  58  59  59  60  62  61  62  62  63 \n 61  59  59  60  59  59  60  59  55  52  52  54  52  50  42  36 \n 33  30  25  22  19  20  19  23  45  88 155 191 245 244 247 243 \n243 244 243 244 224 138 116 124 230 240 236 226 201 147 128 125 \n147 138 140 144 165 154 171 150 146 143  83  49  23  23  26  30 \n 25  22  24  28  33  34  36  36  40  42  47  49  52  54  54  55 \n 54  54  51  51  53  56  54  53  53  53  52  52  50  51  52  52 \n 52  53  52  51  52  52  51  50  51  52  54  54  54  54  54  53 \n 53  54  55  55  55  56  54  55  56  58  55  56  56  55  56  55 \n 55  56  52  52  52  52  52  53  53  51  51  50  50  49  49  47 \n 50  49  51  49  48  48  48  47  48  49  49  47  46  46  46  45 \n 43  42  40  42  39  39  38  38  38  36  35  30  25  22  19  21 \n 20  24  37  42  89 138 126 123 125 126 128 127 126 128 126 127 \n129 127 126 128 129 127 127 128 127 125 126 124 121 126 125 122 \n 73  68  64  64  61  60  60  58  58  55  52  52  56  59  61  63 \n 62  60  57  56  56  54  51  51  49  45  43  41  42  41  41  39 \n 36  36  34  34  34  33  34  34  34  35  40  45  53  51  52  54 \n 56  59  68  69  74  72  75  75  69  56  45  40  38  37  41  45 \n 52  57  65  69  68  67  68  77  91 103 131 146 151 176 223 247 \n216 149 173 238 250 207 183 165 127 128 147 100 159 185 161 191 \n117 110  90  73  62  55  50  47  42  42  44  44  44  42  49  53 \n 54  53  51  48  46  44  46  44  42  43  42  41  40  39  37  39 \n 38  36  40  39  37  37  38  38  39  38  39  39  42  41  43  44 \n 47  48  52  52  55  54  55  55  53  55  55  54  55  56  54  53 \n 51  49  47  46  44  43  42  42  42  42  42  42  42  42  39  40 \n 40  39  39  40  40  41  42  42  44  42  38  35  37  39  46  39 \n106 125 122 125 122 123 121 118 118 121 119 120 121 120 121 122 \n122 126 127 124 119 118 102  49  25  24  25  25  30  35  39  35 \n 32  33  38  44  51  51  51  54  61  66  66  66  63  63  63  65 \n 62  61  62  61  60  64  64  64  61  62  62  63  62  62  63  64 \n 64  61  61  61  63  62  60  58  60  58  57  55  55  57  57  56 \n 57  57  57  59  58  60  58  60  59  58  58  57  57  57  56  56 \n 57  55  56  55  56  56  57  57  57  59  60  63  63  63  63  62 \n 62  59  59  57  57  58  62  58  52  53  54  55  54  49  42  37 \n 35  32  26  23  21  19  21  22  36  60 145 163 244 240 241 230 \n240 246 240 243 211 124 118 135 237 244 245 242 233 150 132 124 \n169 168 164 151 140 124 189 159 125 129  67  35  27  25  25  30 \n 24  22  25  29  36  36  37  37  40  43  47  50  52  53  53  54 \n 54  54  53  54  55  54  57  53  52  51  51  52  50  52  52  52 \n 53  54  53  53  53  52  51  51  51  52  54  53  53  52  52  54 \n 53  54  55  54  55  56  54  56  56  56  54  56  57  55  55  56 \n 53  53  52  53  53  52  53  50  52  51  51  51  51  50  48  48 \n 49  48  49  49  49  48  49  48  48  48  48  48  48  47  45  43 \n 43  42  42  41  39  39  39  37  37  36  36  32  26  24  21  21 \n 21  24  34  45  69 136 127 125 124 128 130 129 126 128 128 131 \n129 128 128 127 130 131 133 132 125 123 126 129 128 128 126 124 \n143 135 117 115  98  90  85  84  83  85  81  77  74  73  72  69 \n 68  64  62  59  58  59  58  59  57  55  51  48  47  45  43  42 \n 40  39  40  38  37  35  33  32  32  31  40  51  71  70  71  71 \n 72  72  69  67  62  54  48  45  44  40  42  44  46  51  58  62 \n 76  72  66  64  70  78  87  92  92  92  97 107 141 165 157 182 \n235 219 164 212 253 218 178 180 132 130 141 121 126 193 195 198 \n144 124  91  82  71  64  55  51  49  46  46  45  44  43  46  50 \n 52  51  49  47  45  46  45  42  41  40  40  38  39  39  38  38 \n 38  37  38  38  39  38  38  39  39  36  38  39  40  39  41  41 \n 42  42  44  46  47  48  52  53  53  54  53  54  55  54  52  51 \n 49  47  44  43  43  42  41  39  40  39  38  39  39  39  36  39 \n 38  39  38  41  41  43  46  46  45  44  40  39  36  38  41  45 \n 68 127 121 126 125 126 122 121 117 119 120 120 123 124 121 124 \n128 133 130 124 126 132 110  45  27  27  27  30  37  44  43  39 \n 33  33  42  47  48  50  51  53  61  65  66  64  64  64  63  63 \n 63  62  62  62  59  63  63  64  62  62  63  63  61  61  62  63 \n 61  61  60  60  59  60  59  59  58  59  56  55  55  56  55  58 \n 58  58  58  57  58  58  59  59  61  59  61  61  58  57  56  57 \n 58  57  55  55  57  56  58  59  59  58  60  63  64  64  64  62 \n 61  59  60  57  56  58  59  56  52  52  55  54  54  52  43  38 \n 36  32  25  22  21  19  20  20  31  50 132 153 228 241 239 232 \n235 244 241 241 204 118 120 144 238 239 239 243 231 145 137 125 \n208 234 222 202  97  74 113 144 148 136  54  32  27  26  26  31 \n 24  24  26  30  38  37  37  38  40  41  46  51  52  53  54  55 \n 54  53  53  54  54  54  56  53  52  52  53  52  53  51  53  51 \n 54  53  52  52  54  53  50  49  50  52  53  51  52  53  52  55 \n 54  56  56  55  54  56  55  57  56  56  56  57  58  54  55  55 \n 52  52  53  53  54  55  52  52  53  51  51  51  51  50  49  50 \n 49  48  48  48  50  48  49  49  47  47  48  48  45  47  46  45 \n 44  44  41  40  40  38  39  38  37  36  37  34  28  24  21  21 \n 21  23  33  43  60 134 131 125 129 131 135 134 132 130 129 130 \n131 130 129 129 126 129 134 129 121 122 125 125 126 128 129 126 \n163 163 162 163 150 135 132 131 157 168 162 152 137 136 143 150 \n140 131 118 107 101  94  86  83  76  72  66  64  60  59  55  51 \n 55  53  50  47  42  37  31  29  26  26  32  41  38  38  41  46 \n 51  47  42  40  39  41  41  43  47  52  58  64  75  80  81  75 \n 73  78 100 114 120 123 126 128 124 117 120 116 107 120 155 138 \n139 208 206 182 241 221 185 184 145 125 131 148 104 181 203 157 \n137 143  95  71  79  78  71  61  55  53  49  48  47  47  47  51 \n 50  51  49  46  46  47  43  44  38  39  39  40  40  40  41  41 \n 39  40  41  39  40  40  39  39  38  38  38  38  37  37  38  39 \n 39  39  40  40  39  41  45  47  49  52  52  53  54  52  51  50 \n 49  46  43  42  41  39  41  39  38  36  36  36  37  37  36  37 \n 37  38  37  39  43  43  49  48  46  46  41  38  36  35  42  48 \n 49 104 126 126 125 127 121 122 120 117 118 121 124 127 126 126 \n125 124 125 128 130 128 111  48  36  38  43  48  54  60  57  46 \n 32  30  43  48  46  48  49  50  60  65  64  62  64  64  63  64 \n 64  62  63  62  62  62  63  60  61  59  61  59  59  60  59  58 \n 59  59  60  59  58  58  58  58  57  58  55  55  54  55  54  55 \n 56  56  57  57  58  58  58  59  59  61  58  59  57  58  58  60 \n 59  56  54  57  57  55  56  59  59  58  60  62  64  64  65  63 \n 63  60  59  58  55  52  55  55  52  54  55  52  52  51  45  39 \n 38  33  26  22  21  20  20  19  24  44 104 151 192 241 244 245 \n240 242 239 241 192 119 124 162 242 234 239 235 225 141 151 131 \n217 233 198 152  99 109 150 217 235 202  45  32  26  25  28  32 \n 26  24  26  31  38  37  35  37  41  43  48  52  52  53  54  54 \n 52  53  55  55  55  56  54  54  51  53  54  52  52  51  53  53 \n 52  53  53  52  53  52  49  50  52  55  55  55  55  53  53  54 \n 54  55  56  55  53  55  54  55  55  55  55  54  54  55  54  50 \n 50  52  54  55  53  53  52  52  52  51  51  53  50  49  49  48 \n 50  48  49  49  50  48  47  46  47  46  46  47  48  48  47  44 \n 44  43  41  40  39  39  38  38  39  37  38  34  29  23  20  20 \n 21  24  30  40  52 116 134 130 131 132 136 136 138 134 135 135 \n133 133 133 135 132 133 130 131 127 124 123 125 126 129 128 129 \n 99 108 126 125 147 131 135 136 163 180 195 180 196 211 217 224 \n215 214 215 208 195 191 182 176 162 155 146 131 124 116 104 100 \n 99  98  94  83  57  39  31  29  23  24  33  29  30  31  34  35 \n 38  38  41  43  45  46  51  62  76  76  82  90  95  88  83  90 \n 96 100 134 125 125 126 129 130 130 123 134 127 117 110 125 161 \n120 128 205 184 196 205 189 180 161 125 131 157 112 164 164 141 \n104 133 144  62  66  82  78  73  64  62  56  52  50  50  50  50 \n 51  50  48  44  48  48  45  46  43  42  40  40  39  39  41  42 \n 42  42  43  42  41  40  39  39  38  37  37  39  38  39  39  41 \n 39  39  40  39  39  41  41  44  46  46  50  52  53  51  51  50 \n 49  47  43  43  42  38  38  37  37  37  37  37  38  38  38  37 \n 38  38  39  40  44  45  48  48  47  47  43  40  40  42  51  56 \n 48  70 125 125 125 126 121 122 121 119 120 124 133 132 123 120 \n126 129 130 130 129 129 108  47  49  57  60  62  63  65  59  47 \n 34  31  43  55  51  47  47  51  59  62  62  60  65  64  63  64 \n 65  63  62  63  63  62  62  60  61  60  60  59  59  59  59  59 \n 57  58  59  58  59  57  57  57  58  58  56  56  55  56  54  55 \n 55  55  56  57  58  58  55  57  59  59  58  60  59  58  58  58 \n 57  56  56  56  57  56  57  58  60  59  59  60  63  62  63  63 \n 62  60  61  58  58  54  55  54  50  52  52  52  52  49  45  41 \n 39  35  27  22  20  21  19  19  23  40  85 152 167 236 246 246 \n242 241 242 241 185 125 131 175 245 240 243 240 220 142 163 137 \n186 165 137 160 194 217 231 237 227 164  42  30  27  25  28  30 \n 27  25  26  32  38  36  36  37  42  44  47  50  52  54  55  54 \n 54  55  56  56  55  55  53  53  52  53  53  53  52  52  54  53 \n 54  52  51  51  53  52  50  51  52  54  56  55  55  54  53  54 \n 55  55  55  55  56  57  55  54  55  55  54  53  55  54  51  51 \n 54  55  54  54  53  54  52  51  53  52  51  53  51  50  49  49 \n 50  48  49  48  49  50  48  46  48  48  48  47  45  47  47  45 \n 44  44  42  42  41  40  39  39  40  40  39  35  30  26  21  21 \n 20  24  28  35  49  98 145 128 135 133 134 136 134 131 131 133 \n134 134 132 135 135 134 134 135 132 132 129 129 132 131 130 130 \n 92  83  70  64  60  60  64  68  80  89 116 118 148 185 194 204 \n211 216 227 229 231 232 237 237 232 236 236 217 203 160 127 132 \n133 135 134 134 127 108  73  50  32  31  33  34  32  32  35  41 \n 44  48  50  55  71  92 111 108  98 103  99  97 100 112 125 119 \n119 113 138 130 129 128 128 133 136 123 142 128 124 125 114 119 \n145 100 144 180 189 197 185 183 167 137 132 143 145 146 109 107 \n125 129 176  90  48  52  72  77  76  70  65  63  58  56  55  53 \n 52  53  51  50  48  48  50  49  48  46  45  44  44  43  43  42 \n 41  41  42  43  41  41  40  39  40  40  40  39  38  38  38  38 \n 38  39  40  38  38  38  41  40  42  44  44  47  47  48  48  50 \n 49  49  46  44  42  38  37  36  37  36  36  36  38  39  38  38 \n 39  39  44  46  48  49  51  51  46  43  42  42  43  51  64  73 \n 70  51  88 121 125 125 122 121 122 125 128 133 134 115  89 105 \n137 127 129 132 132 129 109  49  64  78  75  73  68  64  61  52 \n 41  32  46  55  56  47  48  49  55  61  61  61  63  64  62  65 \n 65  63  62  62  63  64  63  63  61  61  59  58  58  57  56  57 \n 57  58  57  57  56  56  56  57  58  58  55  55  56  56  54  54 \n 55  55  55  55  54  55  56  56  57  58  57  59  59  58  58  58 \n 57  58  57  56  57  57  59  58  60  61  60  60  62  62  64  64 \n 62  61  61  58  56  56  54  52  50  51  53  51  52  50  44  40 \n 37  35  29  23  20  20  20  21  22  31  65 137 148 207 246 237 \n240 235 243 245 174 141 146 185 244 241 240 239 204 146 168 149 \n143 160 211 231 242 235 222 194 139  97  42  32  28  27  30  29 \n 25  24  27  33  37  34  36  36  42  44  47  50  53  52  55  54 \n 55  55  56  54  55  54  52  53  53  53  52  53  51  52  53  53 \n 53  51  51  51  52  52  51  52  51  54  55  53  55  54  53  54 \n 55  55  54  54  55  55  56  57  58  55  54  55  55  53  53  53 \n 57  55  55  53  53  54  53  54  54  53  50  50  51  50  49  49 \n 49  50  47  48  48  48  49  46  48  47  48  48  48  46  44  43 \n 43  43  41  41  38  37  39  40  38  40  40  35  30  26  22  20 \n 23  23  24  31  42  79 148 136 137 136 135 135 129 122 122 129 \n135 137 135 138 136 137 136 135 133 136 135 131 133 134 134 131 \n156 154 146 141 140 133 121 111  98  88  78  71  71  75  81  86 \n 93 101 110 121 137 155 172 177 192 200 186 157 137 138 135 133 \n135 138 138 140 136 137 130 119  48  36  35  41  46  53  68  73 \n 62  59  76 105 131 121 112 110 109 105 111 117 129 137 137 126 \n115 118 141 134 134 134 131 136 144 127 146 130 129 130 133 120 \n123 122 129 188 201 207 182 186 167 154 139 136 159 144 118 101 \n152 115 139 116  59  46  47  75  85  79  73  70  64  62  58  56 \n 55  56  54  52  52  50  51  51  50  50  49  48  47  48  48  47 \n 45  45  43  43  43  43  42  41  40  39  41  40  40  38  40  38 \n 39  39  38  36  38  36  37  40  41  40  41  42  43  44  45  47 \n 47  48  48  45  42  41  39  37  37  37  37  36  39  40  39  40 \n 42  44  48  50  51  52  52  51  48  46  42  43  52  66  77  88 \n106  88  62  93 121 126 125 126 129 131 134 144 140  77  61  81 \n132 129 130 132 131 132 113  49  69  84  82  76  71  70  63  57 \n 45  37  46  56  64  50  47  49  53  56  60  61  60  63  62  65 \n 65  65  64  62  63  63  62  60  60  60  58  56  58  57  57  56 \n 56  56  57  56  55  56  56  56  55  57  54  55  57  56  56  56 \n 56  56  57  54  54  54  57  56  57  57  57  58  57  57  57  57 \n 59  57  60  58  58  59  59  58  58  60  61  62  62  63  64  61 \n 63  63  63  57  58  57  56  54  50  50  53  50  51  47  41  40 \n 37  33  29  24  20  19  21  20  21  24  56 120 149 174 228 235 \n240 235 236 244 168 159 158 192 240 238 237 232 186 163 162 159 \n158 163 207 237 213 178 150 152 177 123  42  33  28  27  31  28 \n 25  25  30  35  36  36  38  38  42  44  48  50  53  53  54  55 \n 55  55  56  55  54  53  53  53  53  52  53  54  53  52  52  53 \n 52  51  52  52  53  52  51  52  53  55  54  54  54  54  54  56 \n 56  57  55  54  55  55  56  55  58  57  57  54  53  53  55  56 \n 56  54  54  54  52  54  52  53  52  52  51  50  52  50  50  50 \n 50  50  48  50  48  46  49  48  48  47  48  48  48  47  46  45 \n 44  44  43  41  39  37  39  40  39  42  40  37  32  27  23  21 \n 22  23  23  28  41  66 146 145 142 138 138 137 139 136 136 136 \n140 141 142 144 140 140 136 135 133 134 135 133 134 134 135 133 \n169 162 160 161 157 156 158 159 159 157 151 147 143 138 130 127 \n117 107  98  92  82  77  71  67  64  62  55  56  61  64  70  76 \n 78  89  99 102 109 110 106 117  50  41  44  95 106 100  79  79 \n103 128 140 128 115 116 111 108 116 126 130 130 132 132 134 123 \n112 126 145 135 137 135 133 141 149 129 144 138 136 134 139 135 \n119 134 136 170 202 210 185 185 167 164 140 131 156 155 128  94 \n151  84 133 125  83  54  41  59 119 100  79  76  70  69  66  62 \n 58  60  59  59  59  57  54  53  54  53  55  56  52  53  50  50 \n 50  49  51  51  49  49  48  46  42  40  44  42  42  43  43  41 \n 39  38  38  38  37  36  39  37  36  35  37  36  38  40  39  41 \n 43  45  47  45  45  45  42  39  39  40  38  39  40  41  41  43 \n 48  50  54  54  53  50  53  50  45  43  45  56  73  87 108 133 \n124 163  95  63  92 117 129 134 133 135 145 157  71  61  74 106 \n156 145 139 137 137 134 129  59  69  82  83  77  71  71  66  61 \n 56  42  48  62  70  57  50  49  56  54  51  52  56  58  61  63 \n 64  65  64  63  63  62  59  59  61  60  56  56  57  56  56  55 \n 58  55  54  55  56  55  54  53  53  56  54  54  56  56  56  56 \n 55  56  57  54  55  54  55  54  54  54  56  54  55  56  56  58 \n 59  58  59  58  58  60  59  59  60  60  60  61  64  65  65  63 \n 63  64  64  64  62  59  57  54  53  51  51  51  50  45  41  40 \n 37  35  32  25  21  20  20  19  18  21  44  93 158 149 184 197 \n202 205 204 205 185 188 183 193 202 202 206 208 195 184 168 157 \n145 137 155 169 149 167 197 220 235 129  40  33  27  26  29  27 \n 24  26  31  36  39  37  38  39  41  43  45  48  50  54  56  58 \n 57  57  57  56  53  52  53  55  52  52  52  52  53  54  53  53 \n 52  51  54  53  52  52  51  54  54  54  54  53  54  55  53  54 \n 56  55  54  56  55  55  57  56  56  56  57  56  55  55  56  55 \n 55  52  53  53  53  52  52  52  52  52  51  52  50  51  51  50 \n 50  51  48  48  49  48  49  48  50  50  47  47  46  46  48  48 \n 46  45  44  42  40  38  40  40  41  41  39  37  33  29  24  22 \n 20  21  22  28  38  47 136 149 139 140 141 140 141 142 141 141 \n140 141 142 144 143 139 137 137 137 137 137 136 136 133 133 131 \n165 161 157 154 148 151 159 162 165 167 168 168 162 157 157 157 \n152 143 130 122 120 115 114 107 102 102  95  91  85  81  75  73 \n 69  67  62  61  61  63  65  66  60  56  63  78  90 108 133 143 \n139 137 138 134 115 107 119 130 136 134 133 135 137 137 138 122 \n109 131 142 134 132 134 134 142 156 124 141 136 136 137 138 135 \n125 133 160 131 194 205 179 183 178 165 145 134 174 191 115 108 \n133  89 145 130 104  62  48  45 125 135  82  65  70  69  67  67 \n 64  66  65  64  64  61  60  57  55  54  55  55  54  56  54  54 \n 53  51  54  54  53  55  54  51  45  48  49  48  48  49  47  44 \n 43  42  42  41  40  40  38  38  40  36  36  35  38  38  38  38 \n 40  42  43  44  45  45  44  42  42  41  41  41  43  45  48  51 \n 51  54  54  53  51  50  50  45  38  45  63  73  95 125 133 140 \n 77 102  80  69  70  79 125 114 106 125 139 136  92  75  97 183 \n231 174 148 144 141 138 130  69  65  81  85  77  71  70  69  64 \n 63  52  53  70  82  63  53  51  55  52  49  48  50  52  57  61 \n 65  64  64  62  62  62  60  58  61  62  57  56  57  57  57  56 \n 58  56  55  55  55  53  53  54  54  55  54  54  55  56  57  54 \n 54  55  55  54  55  55  55  55  56  56  55  54  54  56  58  58 \n 58  58  57  59  58  61  60  59  59  62  63  62  62  64  64  63 \n 63  65  63  61  61  60  57  55  54  52  51  50  47  46  42  40 \n 36  34  32  27  22  22  19  18  19  20  37  68 152 151 162 193 \n197 195 192 189 189 185 189 196 203 205 202 198 182 169 152 143 \n142 139 147 160 212 232 236 230 225 108  42  35  27  28  31  27 \n 25  26  31  38  39  37  37  41  42  44  47  49  50  53  57  58 \n 57  57  56  55  53  51  54  54  54  53  53  52  53  54  53  54 \n 54  53  53  54  53  52  52  53  53  53  54  54  55  54  53  54 \n 55  55  57  57  56  56  56  57  56  57  56  56  55  55  56  55 \n 55  53  54  53  52  54  53  52  51  51  50  49  50  52  52  49 \n 49  50  50  49  49  48  49  47  47  48  48  46  45  46  47  46 \n 45  43  43  42  39  38  41  41  41  41  41  37  33  29  24  22 \n 21  21  24  27  36  43 122 149 141 137 138 140 141 139 138 138 \n143 141 141 144 141 139 140 139 141 140 136 135 136 137 137 136 \n233 231 215 150 147 135 161 175 162 158 150 127 121 121 124 137 \n140 144 151 153 151 151 153 151 146 141 140 136 131 127 126 124 \n128 127 128 131 135 132 128 126 128 139 149 157 160 157 153 146 \n149 138 115 109 126 133 135 135 135 136 135 139 139 137 139 123 \n112 141 137 130 133 135 136 144 165 128 137 136 136 136 134 137 \n132 124 180 139 164 195 174 175 190 164 156 135 199 211 121 152 \n117 118 139 144 123  83  57  48  95 154 159 129  55  49  56  60 \n 69  73  71  70  68  67  63  64  62  58  57  57  56  58  58  57 \n 55  56  54  55  56  56  57  55  50  52  53  52  53  53  52  49 \n 48  47  47  47  45  43  42  41  39  37  39  38  41  41  38  37 \n 40  42  41  43  44  45  46  46  47  46  47  46  48  51  54  56 \n 56  55  53  53  50  49  45  43  57  78 101 124 124  96  60  46 \n 40  39  42  44  60  72  85  88 129 172 204 208 147  98 148 239 \n254 224 162 150 172 202 191 115  61  74  75  73  71  76  82  71 \n 73  99 102  92 105  77  60  53  49  45  43  44  45  47  50  53 \n 57  60  62  62  60  59  60  59  60  59  57  58  59  58  57  57 \n 57  56  56  55  54  53  54  57  57  56  56  56  59  57  57  56 \n 55  55  54  52  55  54  53  54  56  56  55  56  54  54  57  57 \n 59  59  59  57  60  59  59  59  60  60  62  61  61  62  63  62 \n 62  63  62  59  61  60  59  56  54  51  48  47  45  42  40  39 \n 37  34  29  26  22  21  18  21  19  20  33  50 138 147 148 176 \n195 185 181 183 190 197 203 206 204 199 193 176 157 145 151 150 \n150 146 145 160 235 235 231 235 222  94  41  34  27  28  31  27 \n 27  29  33  37  38  38  37  39  43  45  45  47  50  56  56  57 \n 57  57  55  55  53  52  54  53  53  54  51  52  53  53  53  53 \n 53  52  55  53  53  54  52  53  53  53  55  55  54  54  55  54 \n 54  55  57  56  55  56  54  54  56  57  57  57  56  56  57  56 \n 55  55  54  53  51  53  53  52  52  52  50  49  50  53  52  50 \n 51  48  49  48  48  50  50  49  47  47  48  47  47  47  47  46 \n 45  44  44  42  39  40  41  40  41  42  41  36  31  29  27  23 \n 20  22  24  24  34  41  97 150 144 138 137 136 137 139 141 140 \n142 144 144 144 143 142 144 143 139 136 137 137 135 138 137 137 \n238 237 236 172 154 153 180 234 235 235 228 176 167 175 135 172 \n138 120 111 104 100 104 106 109 112 114 119 125 129 138 142 147 \n152 153 157 158 157 152 141 127 131 143 161 154 144 130 120 113 \n104 114 126 134 134 135 138 139 137 137 138 139 133 134 139 127 \n109 145 136 133 137 137 137 149 164 136 140 138 136 135 135 139 \n141 131 172 148 145 186 180 176 192 171 164 144 195 211 165 161 \n110 128 143 148 132 107  68  60  75 191 230 232 142  46  35  42 \n 57  70  81  83  80  78  71  71  65  65  60  59  58  59  58  58 \n 58  55  55  53  56  52  51  52  56  57  57  56  55  56  55  53 \n 52  51  48  49  46  45  45  43  43  43  43  43  43  43  39  39 \n 41  42  42  45  46  46  48  49  49  50  53  53  55  57  57  58 \n 55  53  53  51  47  47  54  70  95 118 135  98  55  46  40  44 \n 49  56  76  93 109 113 121 127 147 179 236 252 233 176 187 246 \n254 249 184 159 197 204 195 141  65  64  60  60  68  83  93 119 \n145 160 158 120 119  85  62  52  45  43  41  42  44  46  47  49 \n 52  55  57  60  60  59  59  58  59  58  58  56  58  57  56  56 \n 55  55  55  54  53  53  54  56  57  57  58  58  60  57  56  56 \n 56  57  54  55  55  53  54  54  55  57  55  55  54  55  55  55 \n 58  60  58  58  60  60  59  60  61  61  62  61  61  62  63  62 \n 62  61  60  58  61  59  58  54  50  47  43  43  41  39  41  40 \n 36  33  29  26  23  22  20  20  20  21  29  47 118 147 146 156 \n184 187 195 203 207 207 207 202 189 177 167 159 151 147 151 153 \n152 146 148 150 179 178 188 206 193  76  34  32  28  29  33  27 \n 28  30  34  40  41  38  38  40  44  46  45  49  52  56  57  57 \n 57  56  56  55  54  54  53  52  52  54  51  53  54  54  55  55 \n 55  53  53  53  53  56  54  54  54  55  55  53  54  54  54  55 \n 54  56  56  57  57  57  54  55  56  57  57  57  56  57  56  55 \n 55  55  54  55  54  55  52  53  53  51  50  51  50  51  50  50 \n 48  47  50  49  48  50  48  48  47  49  49  47  49  47  46  47 \n 45  45  44  41  39  40  42  42  41  42  41  38  34  29  27  24 \n 20  23  22  23  30  41  77 145 147 142 138 140 140 139 140 143 \n143 145 142 142 144 148 144 143 138 136 140 143 140 140 139 138 \n239 239 238 210 148 160 155 226 241 240 236 205 167 199 167 158 \n146 142 145 148 146 147 143 141 141 135 122 120 108 104 100  97 \n 94  94  95  99  97  94  89  99 108 101 117 123 117 109 110 120 \n140 139 136 135 139 141 137 138 140 138 138 135 133 133 142 127 \n114 149 138 134 134 135 137 161 162 137 143 140 139 139 142 142 \n144 138 164 152 130 171 165 172 188 186 166 158 177 195 158 124 \n117 125 158 174 160 124 103  73  62 174 243 244 222  84  39  44 \n 68  79 101 122 141 147 145 127  92  80  76  72  68  65  68  66 \n 66  62  60  58  59  54  51  52  57  58  59  57  56  57  58  58 \n 56  55  53  53  50  49  48  47  47  48  47  48  46  42  43  44 \n 45  45  44  45  47  46  47  48  52  55  59  60  59  60  59  59 \n 56  57  59  61  72  85  99 109 120  77  43  43  48  52  60  79 \n100 119 125 121 115 114 118 129 150 170 180 191 217 228 223 239 \n253 253 216 199 206 213 218 227 121  65  58  61  80 122 203 237 \n231 179 143 145 123  86  60  48  44  42  40  41  44  44  44  46 \n 48  50  56  58  58  58  58  55  56  55  56  54  54  54  53  51 \n 50  50  49  50  49  50  50  52  53  55  56  56  56  55  54  56 \n 57  58  55  57  57  54  51  52  56  56  53  54  55  55  56  56 \n 57  58  59  60  60  59  58  59  60  60  61  61  62  62  62  60 \n 57  56  54  54  55  54  52  48  45  43  40  41  39  38  39  38 \n 33  33  29  26  23  23  20  18  20  22  27  44  95 150 142 145 \n162 193 210 207 200 196 182 169 157 152 154 159 151 150 149 151 \n150 143 126 117  88  81  93 109 114  55  34  33  33  34  40  30 \n 29  30  34  39  38  39  40  40  43  47  46  48  49  54  58  58 \n 57  56  55  54  54  54  53  52  54  52  51  53  54  53  53  53 \n 55  54  54  53  53  54  53  53  55  56  55  54  54  54  54  55 \n 55  54  55  56  57  57  55  55  57  57  57  58  57  57  55  56 \n 55  55  55  55  54  53  53  53  52  52  51  51  51  50  48  49 \n 49  49  50  48  48  49  47  47  47  49  46  48  48  48  47  46 \n 46  44  44  42  39  39  39  41  40  43  41  39  33  30  27  24 \n 22  21  20  21  26  38  60 135 148 141 138 139 143 142 144 145 \n144 144 140 142 144 146 143 141 138 135 139 140 138 138 139 139 \n239 241 238 236 161 164 148 195 245 236 222 181 162 189 185 148 \n149 142 146 146 145 150 146 146 144 144 148 146 141 142 136 138 \n134 131 130 123 111 112 127 130 135 130 120 119 129 134 144 146 \n141 138 140 138 139 141 136 139 144 140 136 136 136 137 145 132 \n118 151 140 142 141 139 138 164 152 142 143 141 142 142 144 145 \n144 142 151 164 134 184 136 140 177 191 167 157 156 181 172 126 \n120 130 194 232 211 133 126 102  76 106 215 238 216  81  40  71 \n182 203 215 225 233 234 228 204 139 124 117 110 102  96  92  90 \n 85  81  78  76  72  71  65  61  61  62  61  61  61  61  59  61 \n 58  58  57  56  53  53  51  51  51  51  50  52  48  45  48  48 \n 48  48  49  49  49  50  50  52  57  60  60  63  63  65  66  68 \n 71  72  79  82  87  87  84  68  50  48  52  56  72  88 114 122 \n120 120 138 149 149 143 143 140 127 122 158 190 187 177 216 237 \n254 253 242 244 244 246 242 241 205 129 100 120 182 223 242 245 \n236 172 126 126 103  73  65  53  42  42  42  42  42  41  41  42 \n 46  48  54  56  56  55  56  53  53  51  50  49  48  49  45  44 \n 46  45  45  43  45  45  44  46  46  47  48  48  49  50  48  50 \n 53  53  52  53  55  56  54  55  57  57  54  57  56  56  56  55 \n 59  56  58  58  59  60  59  61  60  58  60  62  63  61  60  58 \n 53  51  50  52  51  52  52  46  45  43  41  39  37  37  37  36 \n 35  35  34  29  25  25  21  18  23  24  27  41  72 147 141 144 \n150 163 179 182 177 169 158 151 148 150 158 162 149 148 146 152 \n143 126 110 103  92  84  90  94  87  51  33  35  33  38  47  34 \n 29  33  35  37  37  38  37  40  43  46  46  47  47  53  58  58 \n 55  54  54  55  53  53  54  54  53  52  52  54  54  55  55  55 \n 55  54  54  53  54  52  53  54  55  55  54  54  54  55  55  55 \n 56  55  55  56  57  57  56  57  59  58  59  57  57  57  57  55 \n 55  54  56  53  54  55  53  53  52  51  51  51  50  50  50  50 \n 50  49  50  51  50  50  49  49  48  48  47  48  46  48  48  48 \n 46  43  43  41  39  39  40  40  41  43  40  37  33  30  27  24 \n 24  24  22  21  25  36  52 123 150 139 139 140 141 141 144 147 \n142 140 139 141 140 141 140 141 140 139 140 139 140 138 138 140 \n239 241 237 244 190 173 151 155 205 176 152 150 156 168 196 165 \n142 148 145 144 144 150 149 142 147 144 138 136 140 140 141 138 \n135 132 129 127 137 146 144 135 143 143 147 145 140 138 142 143 \n139 139 140 141 142 143 141 144 145 141 137 140 141 146 152 140 \n124 149 142 146 146 143 138 172 145 152 143 141 143 145 142 143 \n144 144 136 178 145 152 128 114 157 185 175 142 140 156 168 126 \n112 129 198 241 241 184 122 140 144 125 111 121 118  60  50 102 \n204 206 212 219 222 197 155 136 138 142 136 143 133 128 130 131 \n122 122 121 112 109 107 104 103  99  93  91  88  82  79  79  79 \n 75  70  69  67  65  66  62  60  60  60  62  63  63  60  60  59 \n 58  57  55  55  50  47  46  47  43  45  58  58  58  59  65  70 \n 69  64  61  57  57  55  50  52  64  72  85 105 121 124 121 123 \n137 131 164 174 146 131 133 136 150 158 143 131 187 203 171 185 \n238 254 242 242 242 244 245 242 246 240 235 238 242 243 242 236 \n199 124  63  48  79  73  75  67  46  43  42  41  40  40  40  41 \n 43  46  50  56  55  54  55  52  48  45  44  42  40  42  40  41 \n 42  40  40  39  40  40  40  40  39  40  39  39  41  40  41  41 \n 41  43  44  46  48  51  51  54  56  56  55  55  54  56  58  58 \n 60  58  57  60  59  60  59  59  60  59  61  59  58  59  57  55 \n 50  51  51  50  49  50  51  47  45  43  42  39  36  35  34  34 \n 34  37  39  34  26  26  25  23  23  24  30  38  57 133 144 142 \n144 148 157 163 159 153 149 148 149 155 162 161 145 150 149 137 \n122 112 104 106 102 102 104 106  82  42  34  34  35  38  45  40 \n 34  37  34  37  37  37  39  41  42  44  44  45  47  54  56  56 \n 53  52  53  53  53  53  54  54  52  51  52  55  55  53  53  53 \n 54  54  54  52  52  53  53  54  54  55  55  55  54  55  55  56 \n 56  57  56  56  56  57  55  55  56  57  57  57  58  56  55  56 \n 56  55  56  55  54  54  54  53  52  52  52  53  53  52  52  50 \n 50  48  49  48  48  50  51  52  51  50  50  50  48  47  48  47 \n 46  44  43  42  40  40  41  41  43  43  39  38  36  31  27  24 \n 24  25  22  21  23  31  45 102 151 139 138 138 139 141 140 140 \n141 141 140 139 138 138 140 142 140 139 139 138 139 144 152 162 \n236 233 231 228 190 160 175 137 166 145 148 149 148 160 191 184 \n140 151 149 144 144 148 140 137 138 136 136 133 139 138 139 134 \n122 123 140 143 144 144 137 143 147 148 151 148 140 140 139 142 \n138 139 137 140 141 141 138 143 139 135 141 143 145 149 167 142 \n130 155 145 148 145 144 140 181 136 153 143 150 154 155 148 147 \n149 145 130 182 145 140 123 107 141 179 185 132 165 138 156 130 \n 99 131 180 241 243 229 164 152 167 165 161 149 128 113  94  88 \n 98 101 100 104 103  85  83  89  96 104 114 123 123 129 138 131 \n126 125 129 126 129 127 125 128 135 133 132 132 122 117 113 109 \n111 105 102  99  93  90  85  82  78  79  81  83  82  79  79  77 \n 71  58  55  48  41  39  34  32  36  41  39  41  47  52  56  55 \n 54  53  52  50  53  60  75  83  88 104 121 124 125 126 129 128 \n143 150 161 178 150 139 139 142 142 145 152 147 145 189 198 157 \n190 246 241 238 243 241 243 244 245 242 241 239 239 241 217 198 \n167 139  99  59  49  69  74  81  58  44  42  41  41  42  40  40 \n 42  44  51  56  56  53  53  49  44  41  41  40  40  40  40  39 \n 40  39  39  38  40  39  38  38  36  38  37  38  41  38  36  38 \n 39  40  41  41  42  43  46  48  50  51  54  55  55  56  56  57 \n 58  60  59  57  60  60  60  60  61  59  60  58  55  55  51  50 \n 48  47  46  47  47  47  49  47  44  43  44  41  37  35  34  34 \n 34  38  41  38  31  29  27  26  26  28  38  49  50 106 151 139 \n144 145 149 153 154 153 153 151 154 158 162 158 153 157 143 119 \n115 109 103 104 105 108 106 107  68  39  35  37  37  42  49  49 \n 41  39  37  36  36  40  41  42  43  44  43  44  46  52  55  54 \n 53  53  53  54  53  53  53  54  53  53  54  53  56  55  55  54 \n 56  56  55  55  53  53  54  55  54  54  54  56  56  55  55  54 \n 53  54  55  57  57  57  56  57  58  58  58  57  58  57  56  54 \n 56  57  56  55  54  54  53  54  54  54  53  52  51  52  51  51 \n 50  50  50  49  50  51  52  51  51  50  50  50  48  48  48  47 \n 46  45  44  44  41  41  42  42  45  45  42  39  36  32  29  26 \n 24  24  22  21  22  26  43  78 159 145 139 138 136 137 138 139 \n139 139 137 139 136 138 139 142 141 139 144 151 168 187 209 226 \n239 232 206 167 152 156 169 164 157 159 147 150 150 153 172 195 \n159 148 145 145 146 144 136 135 140 142 141 137 139 134 119 116 \n126 141 141 139 142 140 139 140 136 145 148 149 142 143 145 142 \n143 142 140 140 141 140 139 141 140 140 140 143 139 150 181 138 \n142 155 151 150 149 145 148 192 132 160 156 161 156 161 168 178 \n195 196 138 190 136 136 117 115 115 174 176 137 192 137 134 124 \n 99 129 163 218 240 241 227 170 141 148 150 150 154 159 161 165 \n158 152 144 138 128 114  97  89  82  71  62  58  58  59  63  68 \n 73  83  90  94  98 104 117 123 122 124 131 137 141 137 137 135 \n135 135 141 142 143 140 135 134 136 141 136 134 128 122 118 123 \n125 103  71  56  40  37  35  30  39  36  39  46  49  51  53  54 \n 53  51  59  83 112 111 106 111 125 128 134 151 145 144 142 141 \n143 158 162 181 156 153 148 149 149 151 154 164 169 153 198 178 \n146 198 245 237 242 240 243 245 247 242 241 240 226 190 191 206 \n135 121 124  98  46  50  73  78  81  62  48  45  42  43  41  38 \n 42  44  48  54  54  53  50  44  40  40  38  37  37  39  37  38 \n 39  37  38  38  38  37  37  37  35  35  36  38  38  36  35  36 \n 38  36  37  38  39  40  39  40  43  44  46  48  49  53  56  56 \n 58  58  58  57  59  58  57  56  57  56  56  53  51  49  46  44 \n 43  41  42  42  43  43  42  41  40  40  42  40  40  39  39  40 \n 39  43  45  45  41  38  36  36  37  41  50  57  49  66 159 143 \n142 143 146 147 149 151 155 155 161 164 168 167 167 167 113 108 \n113 109 108 105 104 107  99  92  61  37  38  41  43  46  52  60 \n 59  43  43  37  35  39  42  42  42  43  43  42  45  52  53  55 \n 53  52  52  53  52  53  54  54  53  52  53  54  53  54  54  54 \n 55  54  55  54  52  55  54  53  54  55  54  53  54  56  55  55 \n 56  57  57  56  56  57  55  56  58  58  59  58  56  57  56  57 \n 56  55  54  55  52  55  53  54  53  53  52  50  52  53  52  51 \n 51  50  51  50  51  50  51  49  50  51  50  50  48  49  48  47 \n 45  46  45  42  41  43  42  43  44  42  42  39  38  33  29  27 \n 24  23  23  21  21  28  42  54 155 149 140 137 138 140 142 144 \n143 142 140 143 146 147 151 159 171 186 209 227 240 245 243 245 \n243 226 178 154 151 168 158 189 157 174 171 163 146 152 168 182 \n178 147 145 139 137 136 141 142 143 142 141 133 121 127 128 132 \n138 142 144 141 146 144 141 143 151 149 147 148 141 141 148 150 \n146 143 146 148 147 147 147 145 146 148 146 146 145 151 184 130 \n152 155 150 149 145 144 152 197 129 163 171 185 200 214 225 233 \n236 227 150 197 131 146 116 116 101 152 168 135 190 129 141 124 \n 96 131 157 205 242 240 238 226 167 129 126 119 108 117 151 158 \n155 150 149 146 149 151 147 148 148 142 144 139 126 120 107  97 \n 81  77  67  66  62  59  60  62  62  67  68  77  88  94 101 108 \n116 123 133 134 140 144 140 138 140 140 138 138 136 137 134 139 \n140 130 131 121  91  66  41  38  38  45  46  51  57  59  56  55 \n 57  94 137 137 117 116 123 126 131 143 168 194 159 145 145 145 \n142 166 158 182 165 153 152 151 159 173 203 225 235 181 174 202 \n144 149 222 228 244 243 244 247 247 244 240 218 163 149 196 150 \n114  97  94 114  67  43  54  71  80  78  62  51  45  45  44  41 \n 43  46  52  54  54  52  45  40  40  40  36  38  37  36  36  36 \n 35  36  36  37  38  37  37  36  33  34  35  38  36  35  36  36 \n 38  36  35  37  37  36  37  38  40  40  42  42  44  48  52  54 \n 57  58  57  58  58  57  56  55  55  53  49  47  46  45  44  43 \n 42  42  42  40  40  39  39  38  36  36  37  35  36  37  40  41 \n 44  47  49  48  46  43  40  41  43  45  51  53  54  49 144 148 \n140 141 146 147 149 150 152 152 168 171 172 175 165 155 100 106 \n109 110 112 112 107 108 103  94  57  38  44  42  45  49  51  58 \n 57  48  48  37  33  38  43  43  43  42  41  43  47  51  54  53 \n 52  51  53  53  52  53  54  54  53  54  54  55  54  54  53  56 \n 53  54  53  52  52  54  54  53  54  54  54  53  55  55  56  54 \n 55  57  56  55  56  57  56  56  58  57  58  57  56  57  60  58 \n 56  55  55  56  55  54  55  55  54  54  52  53  52  51  52  51 \n 51  50  50  50  50  50  50  49  49  50  50  50  49  49  48  48 \n 46  45  45  44  42  42  42  43  42  43  43  39  37  34  31  27 \n 26  25  22  21  22  25  40  48 138 172 180 172 169 168 174 180 \n182 183 184 191 197 204 215 224 233 238 240 243 244 242 240 244 \n242 232 219 193 176 173 155 169 185 180 186 181 135 146 167 161 \n192 157 194 193 148 146 142 145 138 127 124 129 136 137 139 139 \n137 140 146 147 144 141 144 147 151 148 147 146 147 147 146 147 \n146 147 150 148 146 148 149 148 146 143 143 149 151 150 177 128 \n167 160 157 149 158 165 159 199 128 176 239 242 244 243 242 241 \n236 222 156 203 127 157 115  95 115 123 172 147 187 119 157 134 \n 92 139 136 176 233 241 240 242 243 227 196 171 140 116 122 139 \n138 143 144 146 148 151 152 149 144 143 144 145 149 153 154 154 \n160 162 159 155 145 143 134 129 118 111 106  97  88  81  73  66 \n 61  56  54  59  61  64  71  75  87  92  97 103 108 114 118 119 \n123 130 137 133 140 134  46  43  46  65  71  77  73  69  82 114 \n158 153 117 112 127 130 132 140 145 148 185 191 180 146 146 146 \n153 166 164 179 175 168 184 196 227 240 246 244 244 239 167 201 \n172 135 178 202 249 247 244 245 246 234 185 146 139 148 139 107 \n 96  78  67  78  89  55  40  45  66  75  81  71  53  48  48  45 \n 48  51  52  55  55  49  41  40  39  37  35  35  36  38  36  36 \n 35  35  35  35  35  35  35  33  32  33  34  36  34  35  33  34 \n 37  36  35  36  37  36  36  36  38  37  38  39  39  41  45  48 \n 53  54  56  57  56  58  56  55  55  52  46  44  41  41  40  39 \n 37  36  35  35  36  36  35  36  33  33  34  34  33  34  36  39 \n 44  48  52  52  48  45  41  41  40  43  54  63  72  52 103 158 \n145 141 149 151 149 149 153 156 173 176 167 137 144 125  98 102 \n101 102 109 112 112 113 110  98  53  43  50  49  48  47  48  49 \n 53  51  52  41  35  39  45  45  43  40  41  45  47  52  53  53 \n 51  50  53  54  52  53  55  54  53  53  54  53  53  54  54  54 \n 54  53  52  52  53  54  53  53  52  52  55  54  55  56  55  56 \n 58  57  55  56  55  56  56  57  57  58  57  56  56  56  58  57 \n 55  56  55  54  56  56  55  54  54  55  54  54  52  52  52  52 \n 52  51  50  50  50  50  49  50  49  49  49  51  50  49  49  49 \n 47  45  45  45  44  42  42  42  43  45  44  41  39  35  30  28 \n 27  25  22  21  21  24  35  46 111 186 246 245 240 242 243 243 \n242 242 243 246 241 238 240 239 239 240 240 240 238 238 238 241 \n231 230 234 227 222 220 177 132 183 171 136 135 138 145 156 158 \n177 189 168 184 145 148 144 133 127 126 136 143 145 143 140 138 \n142 143 146 145 143 141 143 147 150 146 146 146 144 141 146 147 \n145 149 150 144 144 148 147 150 144 145 151 151 148 155 174 130 \n175 170 184 195 216 218 164 185 134 191 242 239 239 240 240 238 \n236 208 158 200 126 168 111  94 113 122 155 160 193 114 157 123 \n 94 140 128 168 223 243 243 243 246 242 213 192 151 142 150 148 \n133 133 127 123 118 114 113 111 111 116 119 124 133 142 146 151 \n157 158 157 159 152 151 152 155 152 151 152 150 150 149 145 140 \n136 131 121 118 105  96  85  82  71  66  63  61  61  63  64  64 \n 70  71  81  83  88  89  54  53  59  71  71  82 116 143 160 145 \n124 125 127 123 136 145 143 143 144 140 184 184 191 148 152 152 \n162 173 168 174 180 200 240 241 242 244 242 240 242 242 201 182 \n189 134 178 189 247 247 243 237 206 166 140 144 138 127 121  97 \n 80  66  58  50  89  73  45  39  43  58  80  86  73  58  53  53 \n 57  57  52  51  50  45  40  37  38  37  34  35  36  36  35  34 \n 34  35  34  33  33  34  32  31  32  34  34  34  34  33  34  34 \n 34  34  35  35  35  34  35  36  35  36  37  36  36  39  39  41 \n 44  45  51  54  56  59  56  55  55  53  49  44  40  39  37  38 \n 35  35  34  33  34  34  33  35  32  31  33  34  34  34  35  39 \n 48  50  50  55  51  45  42  41  42  49  62  82 108  67  73 155 \n151 144 146 151 151 151 157 163 183 174 131  93  87  92  88  94 \n 97  94 100 102 110 114 115 104  49  46  56  55  53  48  45  47 \n 48  49  51  43  42  44  48  48  44  40  41  45  50  53  53  52 \n 52  52  53  52  50  52  54  54  55  54  54  53  54  55  54  54 \n 55  53  54  54  54  54  54  54  53  52  52  53  54  57  55  56 \n 56  55  54  56  58  57  57  56  57  58  57  57  57  56  57  56 \n 55  56  54  55  54  55  54  54  54  54  53  54  52  52  53  53 \n 54  53  52  52  51  50  50  51  50  50  50  50  49  49  48  49 \n 47  44  45  47  43  43  43  42  45  46  43  42  40  36  33  29 \n 28  27  24  22  21  23  32  45  95 167 244 243 241 242 244 242 \n244 240 242 244 240 236 242 242 240 241 240 240 240 240 240 238 \n235 236 236 235 223 219 175 101 145 165 198 203 186 175 165 161 \n125 168 159 150 140 136 133 135 141 148 147 149 148 149 144 142 \n141 144 150 145 146 145 145 149 149 149 144 141 138 140 145 146 \n147 147 149 148 147 151 148 149 147 148 153 154 159 161 182 131 \n202 230 230 234 234 221 170 176 137 198 239 234 231 239 239 236 \n237 198 168 193 129 174 148  97  93 121 134 172 189 109 153 111 \n 88 118 140 160 195 236 232 228 212 187 156 149 148 146 148 156 \n154 153 151 146 145 147 151 148 141 136 125 118 111 106  99  97 \n102 104 108 113 120 124 131 137 142 143 144 146 150 150 148 148 \n151 150 151 153 155 152 151 157 153 155 149 150 143 136 130 124 \n119 115 106 104  99  98 104 112 126 141 163 174 166 152 143 148 \n136 127 137 159 154 148 144 145 148 144 178 176 191 153 181 210 \n233 235 174 169 185 194 246 241 244 242 238 240 241 241 230 183 \n201 153 137 180 233 237 205 175 145 144 145 145 137 121 126  95 \n 67  54  46  51  94  92  62  43  37  34  53  70  75  66  64  65 \n 63  63  57  51  47  41  40  38  37  36  37  35  34  34  35  35 \n 35  34  33  32  33  34  32  31  32  31  32  32  32  32  32  33 \n 33  33  32  33  33  33  34  35  34  34  35  36  37  39  36  37 \n 38  38  41  45  51  54  54  56  56  56  54  50  43  41  38  35 \n 36  34  33  34  32  32  32  33  32  32  31  31  32  33  36  42 \n 48  51  57  56  46  44  42  40  52  65  93 117 122  85  59 123 \n160 150 151 154 153 154 164 175 172 114 141 111  77  68  77  96 \n102 107 106 103 108 109 115 109  45  54  62  65  60  54  49  48 \n 46  45  52  47  47  51  53  51  44  42  41  45  49  51  51  51 \n 53  53  53  53  52  53  52  53  55  54  54  54  54  55  57  55 \n 55  54  54  55  53  54  55  53  51  52  52  53  52  53  54  54 \n 53  53  54  56  57  57  57  56  57  57  58  56  56  56  57  55 \n 54  54  54  54  55  55  56  54  54  53  53  52  52  51  53  52 \n 53  53  50  52  52  50  51  51  50  49  51  51  50  48  47  48 \n 47  47  48  48  45  44  44  43  45  46  44  44  40  36  35  30 \n 28  26  23  23  21  21  27  43  78 151 233 245 244 242 245 245 \n245 241 242 242 234 236 237 236 239 241 238 236 235 237 240 238 \n239 238 229 212 175 167 162 168 204 222 242 240 233 233 221 189 \n 80  92 102 122 130 140 144 144 148 150 149 150 147 150 149 147 \n148 148 152 151 148 148 147 147 147 148 149 149 143 146 148 151 \n150 149 154 153 147 148 152 151 149 169 201 216 200 167 177 133 \n214 238 234 233 231 212 178 172 147 213 244 237 237 240 238 239 \n236 187 177 189 131 173 198 108  96 120 136 175 188 107 156 126 \n 97  93 151 143 191 218 192 171 157 154 154 149 150 149 147 142 \n150 148 144 142 142 149 159 147 142 140 138 136 132 137 142 143 \n137 136 133 132 123 116 112 113 105 103 105 105 106 108 111 115 \n121 125 132 137 145 149 155 155 157 156 153 155 150 149 149 151 \n152 152 150 151 159 162 162 162 160 165 169 166 165 154 129 117 \n137 148 132 154 148 149 150 146 149 160 191 180 189 170 192 242 \n245 245 187 165 186 186 243 241 239 237 240 242 245 244 243 192 \n200 172 123 179 202 178 146 145 152 151 150 156 141 137 127  84 \n 63  44  43  73 133 111  78  54  39  36  59 110  79  61  60  65 \n 67  67  61  54  48  43  39  39  38  37  38  36  35  34  34  36 \n 36  36  34  33  34  34  33  33  33  32  32  32  32  32  33  34 \n 32  32  31  31  32  34  32  33  34  34  35  35  35  36  34  34 \n 35  36  39  38  42  45  51  54  54  55  56  55  50  44  40  36 \n 35  34  34  34  33  32  34  34  31  32  33  34  35  37  40  47 \n 54  53  51  46  43  42  41  50  73  91 120 124 120 112  62  85 \n151 160 155 159 159 162 171 209 143 136 234 178 105 106 112 112 \n110 115 118 118 116 115 118 114  44  60  67  71  69  62  54  52 \n 51  51  56  52  50  58  58  53  44  41  40  45  49  50  50  49 \n 52  52  52  53  54  55  55  54  55  53  53  53  55  55  56  56 \n 55  56  54  55  55  54  55  55  53  54  54  55  53  51  52  53 \n 54  55  56  56  56  57  56  56  57  57  57  56  56  56  56  55 \n 54  55  55  54  55  56  56  55  56  55  54  52  52  52  52  52 \n 53  51  51  51  51  51  50  50  50  51  51  51  51  50  47  47 \n 47  49  47  46  46  45  45  46  48  47  44  43  40  36  34  32 \n 29  27  23  23  23  22  26  40  66 145 211 242 243 242 241 236 \n229 218 206 200 191 194 206 229 237 237 240 237 235 236 236 238 \n177 169 165 175 205 227 232 234 238 233 228 221 207 196 184 156 \n104 101 152 198 217 218 213 209 206 209 202 196 190 186 183 180 \n179 176 173 174 168 168 167 166 170 170 171 169 169 172 173 176 \n179 182 189 197 200 207 214 208 210 232 232 232 204 181 170 138 \n228 242 235 235 239 204 187 160 166 226 243 242 239 234 232 230 \n230 178 183 176 130 186 231 138 101 103 145 181 183 109 167 185 \n109  86 124 119 186 159 146 153 148 150 154 152 149 148 150 147 \n150 152 150 149 148 145 141 140 136 141 140 139 143 148 147 145 \n151 151 155 157 153 151 145 145 147 149 151 153 151 146 137 129 \n124 119 112 107 104 102 103 106 106 110 120 122 130 135 139 144 \n145 146 146 148 136 131 134 151 158 146 124 108 100 108 132 147 \n146 132 133 156 163 170 184 204 222 235 240 202 180 184 172 238 \n244 243 208 162 184 181 228 242 238 240 240 241 244 245 244 209 \n187 178 113 169 185 157 150 149 157 156 156 157 157 182 117  77 \n 56  38  54 114 136 128  90  71  52  42  36  90 126 101  63  52 \n 54  58  63  65  66  55  47  42  40  39  38  37  37  35  35  33 \n 36  36  34  35  35  35  33  33  33  34  34  34  33  34  35  35 \n 34  33  33  33  34  34  33  33  33  33  33  32  32  32  32  33 \n 33  32  34  33  36  38  39  44  49  52  53  51  51  49  43  40 \n 35  34  34  33  33  33  35  34  33  33  34  34  37  39  46  54 \n 55  49  46  43  39  44  58  81 109 121 126 127 123 122  99  71 \n112 162 166 169 176 192 171 136  87 196 254 246 164 138 131 124 \n117 118 124 128 124 121 125 133  45  62  73  83  81  76  61  59 \n 64  79  90  65  60  71  66  57  46  41  43  47  49  49  47  45 \n 48  49  50  51  52  53  54  54  54  55  56  55  56  55  55  55 \n 56  54  53  55  55  55  53  52  54  55  56  55  52  50  51  52 \n 53  55  56  55  55  55  55  56  57  56  57  56  56  57  55  55 \n 54  56  54  54  54  55  54  53  55  55  53  51  51  53  51  53 \n 53  52  53  52  50  51  52  52  51  51  51  49  50  49  47  46 \n 47  46  48  47  46  46  45  46  48  47  45  44  40  35  36  32 \n 27  27  26  24  21  21  25  34  57 134 167 171 168 165 162 165 \n167 175 175 173 176 178 169 178 226 242 243 238 235 237 238 240 \n162 188 212 228 232 242 240 233 210 182 168 167 174 187 200 200 \n199 204 229 233 235 238 243 237 235 239 233 236 235 237 234 234 \n231 224 225 229 224 228 229 228 232 233 232 232 228 230 235 231 \n235 234 239 239 232 233 243 237 233 236 240 237 193 185 160 148 \n231 245 241 242 244 198 189 151 173 226 239 241 237 228 229 231 \n234 178 191 168 140 194 241 187  97  96 140 185 179 113 171 216 \n122  93  99 105 171 166 150 155 149 148 154 154 150 145 145 142 \n151 157 154 141 138 134 140 141 139 146 146 142 144 144 146 147 \n148 141 146 150 153 158 152 149 151 151 154 152 152 153 150 147 \n150 152 148 146 144 148 148 144 135 133 132 130 122 118 114 114 \n112 110 107 113 132 141 124 116 124 128 137 142 145 149 156 144 \n146 136 136 185 217 230 240 238 244 239 239 215 176 191 167 228 \n242 244 219 166 179 182 210 242 236 239 240 240 243 245 243 218 \n180 162 122 154 189 163 152 153 155 154 156 156 167 187 108  85 \n 48  40  82 137 135 130 100  82  61  47  39  58 127 133 101  58 \n 49  56  54  45  53  56  55  57  49  45  41  41  40  39  39  38 \n 38  36  38  39  37  38  34  35  36  34  36  35  35  36  36  35 \n 36  34  33  33  35  35  35  34  34  35  34  34  32  32  33  33 \n 32  31  33  33  33  33  35  38  41  45  46  48  52  51  50  44 \n 38  36  34  33  34  34  34  36  36  35  37  37  45  50  58  61 \n 53  47  44  42  47  65  90 111 124 127 133 133 128 121 115  98 \n 83 130 175 182 189 185 126  74  95 212 254 254 215 158 143 134 \n128 127 132 134 130 126 129 146  44  65  77  89  90  80  68  72 \n 94 108 105  81  75  82  72  64  52  45  46  48  46  46  45  46 \n 47  46  47  50  55  55  55  55  55  56  57  57  57  56  55  55 \n 56  54  54  54  54  55  54  54  55  57  58  57  52  51  52  52 \n 52  54  53  56  54  56  56  56  55  55  55  57  55  56  54  54 \n 53  55  53  55  54  56  55  54  56  56  54  54  54  54  53  54 \n 52  53  53  53  52  51  53  52  52  52  50  50  51  50  48  46 \n 46  47  47  46  45  46  47  48  50  47  45  46  42  37  37  31 \n 27  26  28  24  21  23  22  29  48 119 159 147 141 149 161 173 \n179 174 173 177 178 170 162 165 201 227 237 240 241 241 239 241 \n219 223 227 226 211 196 187 175 176 196 212 227 229 229 225 233 \n236 239 240 239 237 240 242 240 238 237 226 228 231 237 236 235 \n236 233 237 239 239 236 234 237 237 240 240 240 238 239 245 244 \n240 240 244 236 240 239 243 237 235 242 241 242 189 197 150 166 \n240 243 236 237 240 186 185 140 181 214 234 238 238 241 243 244 \n232 174 192 158 153 203 246 234 116  94 145 187 170 116 168 216 \n153  97  82  91 147 180 153 152 145 153 155 139 134 140 145 142 \n142 147 137 132 143 143 145 144 141 143 149 150 146 149 144 143 \n145 143 142 146 150 148 144 151 153 158 157 147 145 146 151 156 \n158 151 146 149 150 151 152 154 153 149 149 144 145 146 147 146 \n144 144 142 141 145 149 143 145 142 126 136 156 161 168 179 157 \n155 141 142 222 247 246 248 247 245 238 245 233 182 188 172 209 \n250 248 232 177 171 189 196 240 238 238 235 239 240 242 226 190 \n163 153 147 161 185 177 144 159 154 142 135 147 156 182 126  84 \n 40  40 121 142 138 135 117  98  77  58  46  37 103 146 134 107 \n 54  40  41  35  37  51  74  60  54  53  49  50  56  56  54  53 \n 51  49  45  44  43  43  41  42  41  42  42  41  40  38  39  37 \n 37  37  36  35  38  36  36  35  36  37  34  33  33  32  33  34 \n 34  34  33  32  31  33  33  36  37  39  42  46  53  56  56  51 \n 42  40  37  36  35  34  35  38  38  40  42  49  59  65  64  55 \n 46  44  50  62  87 107 127 135 133 135 134 131 125 120 111 100 \n 80  77 113 141 144 133 122 101 103 189 253 254 242 179 149 141 \n134 136 137 132 132 131 129 121  56  62  75  78  79  77  93 105 \n110 117 178 155  82  82  72  68  57  44  41  40  41  41  41  44 \n 45  44  45  45  51  54  56  57  55  58  56  57  57  55  56  54 \n 55  55  53  54  52  52  53  51  53  54  55  54  53  53  53  53 \n 52  54  54  53  54  53  54  53  54  53  54  56  54  53  52  52 \n 52  51  53  55  54  55  54  54  57  55  56  56  55  55  52  53 \n 53  53  53  52  53  54  52  52  51  52  49  51  53  49  49  47 \n 46  47  48  47  47  49  49  49  48  50  50  46  42  39  36  30 \n 28  27  27  25  23  22  22  28  42 112 170 157 158 166 177 181 \n172 173 183 178 160 156 160 165 171 144 150 161 177 182 187 192 \n223 211 196 183 176 184 206 218 229 232 235 229 230 233 235 236 \n239 242 243 243 240 242 240 244 242 239 234 236 235 241 237 237 \n234 237 241 239 237 233 231 234 229 230 235 240 237 236 242 242 \n239 239 242 241 246 240 240 239 240 243 242 244 186 199 146 176 \n243 238 235 237 236 178 187 135 186 224 241 242 244 243 243 242 \n227 174 191 149 160 213 246 246 157 102 152 194 160 124 168 201 \n187 112  80  86 132 188 156 152 160 162 156 145 146 149 152 152 \n145 149 146 143 142 143 143 146 147 151 155 152 150 149 149 149 \n146 150 143 145 149 150 145 149 153 154 154 151 149 147 152 152 \n157 151 149 153 152 152 152 153 154 150 150 149 154 151 151 149 \n146 148 149 149 151 153 154 150 150 123 134 190 220 225 233 177 \n165 137 153 229 242 244 247 249 247 243 246 243 188 182 180 187 \n251 250 239 191 166 190 189 236 245 245 242 242 231 207 167 155 \n152 176 152 144 166 187 158 161 144 134 134 141 156 172 116  70 \n 38  53 143 139 140 144 131 113  94  75  56  46  67 137 135 133 \n123  58  34  30  33  47  92 115 105  81  53  45  51  53  55  56 \n 59  58  59  60  60  56  55  60  66  65  58  53  48  44  41  39 \n 42  43  40  38  40  40  40  37  39  38  38  36  36  36  36  34 \n 34  34  34  31  33  33  34  35  38  40  40  42  47  53  56  53 \n 49  48  44  42  40  38  40  38  43  44  50  52  53  52  45  45 \n 50  66  89 101 117 127 137 141 138 134 126 102  70  56  49  44 \n 47  61  81 101 119 146 160 126  97 155 243 254 248 190 148 145 \n135 133 135 134 130 128 125 123  69  61  66  70  81  97 121 118 \n137 197 231 140  91  78  68  64  56  46  42  42  40  41  41  42 \n 42  44  45  46  48  54  56  57  57  57  56  56  56  55  55  54 \n 56  55  55  54  52  51  50  52  53  52  53  53  54  53  52  51 \n 52  54  54  53  53  53  55  53  53  50  54  55  53  53  52  52 \n 52  50  54  55  53  54  54  55  56  53  54  54  54  54  52  53 \n 54  54  54  55  53  54  53  53  52  52  51  53  54  52  49  48 \n 48  49  50  48  49  50  50  50  49  50  51  48  45  40  34  31 \n 29  28  26  24  23  23  21  24  39  71 164 161 169 174 185 181 \n174 179 183 162 154 157 164 167 167 132 123 116 121 119 125 126 \n183 191 213 222 230 232 233 229 236 231 230 233 234 235 231 240 \n245 243 244 243 241 239 238 239 240 239 237 242 238 236 238 234 \n232 235 238 238 236 235 236 232 233 235 235 234 237 242 243 243 \n243 239 241 238 240 241 239 238 242 243 234 241 174 199 139 188 \n246 240 240 239 232 172 187 135 195 239 243 243 243 241 241 240 \n226 174 197 137 176 224 248 248 205 117 158 198 152 136 160 174 \n212 133  84  94 128 161 177 162 155 147 148 148 155 149 142 144 \n147 149 152 152 143 147 154 154 153 150 156 153 154 151 154 154 \n153 151 149 151 149 150 152 154 154 153 154 156 153 151 150 150 \n147 148 152 153 150 152 151 153 153 152 158 159 157 153 155 156 \n154 152 155 156 163 172 186 158 157 124 151 237 244 240 239 177 \n181 139 163 235 244 242 243 243 241 245 242 244 205 176 193 167 \n244 245 244 212 164 184 182 225 243 244 236 208 166 152 157 148 \n144 200 138 124 138 179 154 135 120 125 130 134 147 156 117  62 \n 38  76 138 136 134 138 137 130 101  94  77  61  49  94 130 134 \n132  92  41  34  43  52  50  47  76 109 135 132 105  86  67  54 \n 49  44  40  39  41  42  41  43  45  45  46  48  48  50  56  55 \n 49  57  61  58  53  54  54  51  48  44  42  42  40  40  37  40 \n 38  37  36  36  35  35  35  35  36  37  38  38  41  49  56  62 \n 60  57  57  54  49  46  45  45  44  47  47  48  50  54  67  81 \n102 114 122 130 142 137 129 120  94  68  45  37  40  44  50  60 \n 76  96 138 156 177 207 242 218 144 127 203 251 254 216 138 139 \n132 133 133 131 132 133 134 129  90  61  60  71 114 128 132 160 \n229 244 165  56  76  83  68  62  58  51  45  42  43  43  42  42 \n 42  41  42  44  49  55  56  56  58  55  56  57  56  57  54  53 \n 53  52  50  50  49  48  47  49  50  49  49  49  49  49  49  49 \n 51  53  52  53  54  52  52  51  52  51  54  53  54  53  53  52 \n 53  51  54  54  54  55  55  55  57  55  55  55  56  56  54  53 \n 53  53  52  54  54  54  53  54  53  53  52  53  52  50  48  52 \n 51  50  51  51  51  52  49  50  50  49  51  50  47  44  38  33 \n 31  30  28  25  24  23  23  24  38  55 152 154 174 181 184 184 \n181 170 159 158 158 163 162 162 163 129 118 117 116 117 116 115 \n229 230 233 228 229 228 227 222 236 233 236 230 230 232 231 242 \n241 243 244 237 239 239 234 242 243 233 237 240 242 240 240 236 \n237 238 240 238 237 240 240 242 241 240 237 237 233 237 239 235 \n235 235 237 230 235 239 240 239 241 241 235 234 170 194 137 199 \n243 238 238 239 229 172 184 134 199 236 240 238 240 239 239 243 \n219 172 198 132 182 227 247 246 225 138 163 201 139 138 162 164 \n219 156  92  80 133 138 196 195 203 191 173 157 151 143 144 150 \n150 151 149 154 158 156 155 151 149 151 155 152 153 153 150 148 \n150 150 151 151 151 154 155 153 154 151 153 156 151 153 151 150 \n148 150 152 151 151 149 147 150 150 151 159 157 153 155 158 158 \n165 168 175 178 200 229 235 166 172 123 158 236 243 244 239 169 \n180 140 171 236 247 246 246 244 244 243 240 239 218 173 195 166 \n230 247 244 231 162 175 184 212 237 211 181 161 154 154 154 147 \n151 202 134 128 139 152 150 119 122 130 134 135 140 139 116  56 \n 39  86 129 130 128 122 124 127 114 104  97  87  68  63  90 122 \n146  85  46  38  76 110 114 116 118 120 131 144 150 146 142 128 \n114  99  79  68  61  55  49  44  43  40  40  40  38  45  55  51 \n 49  46  47  49  51  56  59  61  61  62  61  60  56  55  51  49 \n 48  45  44  45  41  40  39  40  37  38  39  39  41  45  49  55 \n 57  53  51  51  49  52  60  63  70  73  84  89  93 100 104 113 \n122 131 132 130 136 134 104  68  47  41  44  46  53  62  77  95 \n112 117 123 132 133 146 177 211 224 191 177 238 254 238 145 134 \n134 130 130 132 136 140 134 130 110  84  87 117 135 129 159 220 \n224 199  72  44  99  99  71  61  66  59  47  43  42  42  42  43 \n 43  41  42  46  50  54  55  54  57  55  56  57  55  53  52  50 \n 49  48  45  46  46  46  45  46  48  47  47  48  48  48  48  47 \n 49  51  50  52  53  52  51  51  52  53  53  53  52  53  53  51 \n 53  52  52  52  54  54  55  54  56  56  55  55  54  54  54  54 \n 54  54  55  54  53  53  53  54  54  54  53  54  53  50  51  52 \n 53  52  51  51  51  51  49  50  52  52  52  52  49  44  39  35 \n 32  33  29  26  25  25  24  25  38  44 130 151 171 191 188 183 \n170 155 153 160 163 162 158 158 149 118 115 115 116 117 116 115 \n232 236 234 230 224 225 229 231 235 235 236 233 236 238 239 236 \n239 242 243 242 239 240 242 242 239 239 241 240 239 241 241 239 \n236 238 240 239 239 239 240 242 233 237 242 243 240 245 242 237 \n242 239 240 241 243 239 233 236 238 241 242 234 175 188 136 208 \n239 237 237 240 222 169 175 135 207 240 241 238 241 239 239 241 \n209 170 193 127 190 233 244 245 239 188 165 203 128 150 170 162 \n195 188 102  79 124 120 190 213 243 246 234 210 217 212 195 182 \n168 164 163 167 165 165 159 155 157 156 152 154 157 156 154 155 \n155 155 151 150 152 153 156 154 156 156 154 153 152 153 151 147 \n154 158 157 157 156 155 155 158 155 159 162 165 174 184 200 216 \n230 236 241 240 241 242 227 159 168 121 168 240 250 248 232 163 \n177 139 185 243 248 246 245 246 241 243 243 242 235 191 182 175 \n202 246 243 244 173 166 184 186 174 148 153 152 150 152 156 153 \n164 190 130 138 139 120 166 144 146 149 139 144 155 116 112  47 \n 48 103 138 144 141 130 130 130 126 116 114 128 124 110  84  72 \n 77  62  52  45  84 113 115 122 127 128 132 135 140 140 140 138 \n143 143 140 134 132 127 119 114 104  98  91  83  75  68  64  60 \n 55  53  51  48  45  44  41  40  43  43  45  45  52  54  54  55 \n 57  53  53  50  48  47  46  45  43  43  42  41  44  45  45  43 \n 40  39  45  68  81  83 103 116 119 114 113 105 110 116 131 137 \n137 140 138 125  92  64  40  45  46  52  60  72  89 106 112 114 \n105 104 103 105 120 142 151 145 167 205 203 213 248 252 165 137 \n137 130 134 138 133 131 134 135 132 124 133 138 138 146 195 168 \n116  77  50  42  77  85  79  68  67  66  52  47  46  44  41  42 \n 43  43  44  44  48  54  55  53  54  54  53  53  49  46  46  46 \n 44  43  44  43  42  42  43  42  44  43  44  43  43  44  44  44 \n 45  45  45  47  48  49  50  50  49  52  52  52  52  52  53  54 \n 52  51  51  53  53  55  55  53  55  55  55  56  55  55  55  55 \n 53  55  55  54  55  53  54  53  52  53  53  52  54  52  53  53 \n 53  52  51  51  52  52  51  51  53  53  51  51  49  46  41  38 \n 35  34  31  29  28  27  28  31  38  43 100 148 156 187 186 166 \n153 152 159 165 163 160 154 148 119 112 113 113 114 115 115 114 \n200 228 226 221 226 230 228 234 236 232 232 234 235 238 237 240 \n244 240 238 240 241 240 240 238 239 241 236 236 233 236 240 240 \n234 240 245 241 241 236 242 243 237 238 237 240 241 245 237 238 \n241 239 240 241 243 240 236 239 240 241 243 225 174 181 144 216 \n240 243 240 239 215 171 172 135 216 240 240 242 240 241 238 241 \n201 172 189 123 197 232 239 242 240 220 165 203 122 160 165 180 \n175 206 111  83 108 128 171 201 228 240 231 233 236 241 241 238 \n219 217 214 217 219 213 211 204 194 186 171 164 171 170 169 173 \n173 169 167 168 169 168 165 168 167 165 168 170 168 169 170 170 \n171 176 178 180 187 190 194 197 202 211 219 227 231 233 237 240 \n242 246 245 236 236 240 219 162 165 122 175 243 250 249 228 159 \n178 138 190 241 245 240 241 241 242 246 242 241 240 208 175 184 \n184 243 244 247 188 162 182 178 159 151 151 151 153 154 153 148 \n170 193 132 150 134 114 154 152 152 153 139 157 164  97 110  45 \n 51 106 141 144 147 143 143 141 142 134 116 122 142 143 137 133 \n112  95  80  73  65  61  60  62  66  66  72  77  87  96 110 115 \n126 131 137 139 139 137 136 140 137 131 139 136 128 125 121 117 \n108 107  99  93  84  78  70  65  60  53  52  48  50  50  49  50 \n 49  46  44  45  45  43  43  46  44  44  47  47  61  67  68  45 \n 35  34  39  50  51  60  76  75  73  79  87 100 129 137 127 131 \n135 135 106  70  49  45  49  52  61  71  92 106 111 112 110 112 \n117 120 120 115 102  98 125 162 154 141 183 207 233 249 197 145 \n139 132 134 138 133 131 132 132 134 132 130 133 151 183 195 192 \n156 119  77  48  39  42  68  76  70  70  61  50  46  44  41  42 \n 42  44  45  45  48  52  54  52  53  50  49  46  44  43  43  42 \n 43  42  39  40  40  41  41  41  43  40  41  40  39  41  41  42 \n 43  42  42  42  43  45  45  46  46  46  48  49  51  52  54  53 \n 51  51  51  52  53  53  53  54  52  51  53  54  55  56  54  53 \n 53  53  52  53  55  54  52  53  53  53  53  53  51  50  51  51 \n 52  51  50  52  50  51  53  52  53  52  51  50  49  47  43  39 \n 37  34  32  28  28  30  33  38  47  46  80 145 152 164 168 152 \n154 159 163 168 162 159 149 130 116 113 112 114 114 116 115 117 \n115 138 146 147 152 156 175 192 187 198 207 219 223 224 226 237 \n239 235 231 230 231 231 237 237 230 225 237 239 238 236 236 241 \n238 240 241 242 239 238 239 237 235 237 237 237 236 239 243 243 \n242 240 241 240 239 233 231 235 233 235 240 211 181 174 148 221 \n239 242 240 238 209 180 160 142 228 241 238 239 242 243 244 246 \n199 179 188 130 200 235 239 240 244 222 162 203 114 163 156 112 \n129 209 148  91  92 145 143 186 214 240 238 237 237 241 244 245 \n242 241 243 243 242 241 244 240 247 245 240 234 238 240 239 239 \n240 239 229 229 233 234 235 236 239 235 233 236 234 236 238 237 \n236 239 238 240 243 247 244 243 238 238 238 239 242 240 240 243 \n245 246 249 242 237 243 219 160 170 121 188 238 239 242 218 165 \n183 138 205 243 245 243 242 242 246 244 243 245 246 223 172 181 \n172 230 226 200 170 156 178 179 163 160 156 154 151 156 155 144 \n174 191 126 160 126 123 141 157 153 146 138 167 154  97 118  43 \n 53 104 138 141 145 145 145 143 143 148 133 109 111 129 136 143 \n149 153 142 139 131 121 108  94  84  77  71  69  62  56  49  48 \n 45  44  52  56  64  72  78  84  92  99 107 113 124 127 127 127 \n128 132 139 139 138 136 139 149 141 108 101  94 116 134 121 119 \n109  85  79  75  82  90  91  85  86  89  82  70  55  50  43  41 \n 34  30  30  32  38  33  42  55  66  76 103 129 142 138 137 123 \n 89  63  47  53  57  61  69  79  98 110 115 111 119 128 134 135 \n137 138 140 137 138 130 108 106 153 174 134 152 208 229 215 155 \n136 136 135 134 130 128 133 133 136 135 130 162 232 246 198 158 \n139 146 115  75  47  40  44  67  77  74  73  62  49  45  43  44 \n 45  45  45  47  51  53  53  52  50  47  46  44  44  41  42  43 \n 41  41  39  38  37  38  39  39  40  38  37  37  38  41  40  42 \n 42  40  39  40  41  40  40  42  41  40  43  44  46  47  49  49 \n 51  51  51  52  52  52  53  54  54  53  53  53  53  53  53  54 \n 52  52  53  53  52  51  52  52  50  50  52  51  48  49  50  49 \n 49  48  49  50  49  50  50  52  53  53  51  51  53  52  48  42 \n 39  36  35  32  33  37  48  61  71  47  59 130 154 156 162 159 \n159 162 162 166 161 158 129 115 115 114 112 113 112 114 115 115 \n122 125 119 122 123 120 122 128 131 135 140 153 155 154 174 207 \n226 229 220 227 229 226 236 234 234 230 238 240 240 234 226 236 \n239 234 239 241 237 236 237 238 236 235 236 239 240 242 243 240 \n240 238 238 236 239 238 238 240 241 235 239 198 185 164 159 226 \n238 238 236 237 199 177 143 149 233 239 235 234 237 240 242 243 \n188 185 183 136 201 236 243 242 242 215 168 203 106 163 146 164 \n207 234 186  94  93 138 139 155 203 232 242 242 244 245 243 246 \n245 243 244 243 244 242 242 241 242 241 238 239 240 241 240 241 \n243 241 235 233 236 242 244 243 244 242 239 239 242 243 243 244 \n242 242 243 243 243 245 245 243 241 240 242 242 242 241 242 242 \n242 244 248 240 243 246 219 160 171 121 199 243 242 244 210 171 \n182 142 213 242 242 241 245 246 249 247 250 249 250 236 176 170 \n172 188 180 161 162 154 175 186 165 156 156 154 156 156 161 150 \n183 190 125 166 113 126 136 168 159 149 140 173 144  95 118  44 \n 55  92 135 132 138 138 146 143 143 149 145 133 110 104 113 131 \n140 136 144 143 132 129 122 116 109 100  94  91  93  89  76  72 \n 66  60  57  57  53  53  51  51  49  49  53  55  58  63  68  73 \n 75  83  94 103 120 135 180 209 183 112 114 101 175 231 223 223 \n212 135 116 100 135 187 199 182 148 158 141 155 124  88  58  41 \n 39  34  34  38  43  50  59  68  91 113 128 137 135 133 109  69 \n 52  57  63  67  73  84 101 109 115 116 120 128 134 132 137 141 \n139 137 142 142 141 141 138 118 113 166 159 120 185 202 207 176 \n138 142 133 132 128 128 130 130 129 131 141 222 225 165 132 130 \n108 114 124 103  60  48  39  47  72  77  76  71  58  51  47  47 \n 45  46  48  49  52  53  53  51  49  46  47  45  43  42  42  42 \n 39  38  39  39  39  39  39  40  39  36  36  38  38  39  40  40 \n 41  40  39  37  38  40  39  39  40  39  39  39  42  43  46  46 \n 47  47  49  50  52  51  52  51  52  52  52  52  53  52  52  53 \n 51  51  51  50  50  50  49  48  47  46  45  45  45  45  45  46 \n 46  44  46  47  47  49  50  49  52  51  52  53  53  54  51  46 \n 43  38  38  35  40  49  64  73  69  50  54 121 154 155 157 158 \n158 160 162 164 161 148 111 113 115 115 115 113 109 112 112 113 \n120 120 120 120 118 119 122 123 121 120 128 125 128 129 130 128 \n134 134 131 133 138 154 168 180 185 205 222 232 235 231 232 239 \n238 236 238 237 233 236 238 241 239 237 237 238 238 239 236 237 \n237 234 232 239 239 239 235 235 236 239 241 191 190 149 170 230 \n237 237 236 238 182 173 135 154 240 237 235 239 238 237 239 238 \n177 188 172 148 205 238 235 227 196 168 178 198 107 169 129 179 \n230 221 183 114  88 108 152 177 238 236 231 245 246 242 239 244 \n245 242 241 245 248 242 235 228 223 226 235 240 241 243 240 240 \n245 240 241 241 242 241 241 242 243 243 243 243 245 245 243 246 \n246 243 241 242 244 245 246 243 241 241 242 241 242 243 241 241 \n241 242 241 243 243 246 211 169 169 126 209 243 239 239 193 178 \n175 142 226 245 241 244 247 247 243 249 250 249 248 242 191 163 \n175 166 163 160 160 155 166 193 174 157 161 158 154 152 143 145 \n193 179 129 172 106 115 149 169 151 146 145 172 136  98 110  48 \n 55  82 134 137 138 141 143 146 145 152 148 145 138 139 129 116 \n103 112 112 119 129 134 134 136 136 133 131 125 114 111 105  93 \n 83  81  76  72  66  63  61  62  63  63  61  60  60  57  55  55 \n 54  52  49  47  46  42  58  72  69  61  63  65 122 179 190 197 \n197 117 111  94 149 223 233 214 169 178 171 202 241 231 205 174 \n 86  37  39  48  65  71  87 105 135 140 136 126  91  60  53  64 \n 72  76  83  93 106 118 116 119 123 129 134 137 138 135 135 135 \n134 138 140 141 138 137 140 134 118 126 167 129 163 207 180 191 \n145 142 136 130 133 137 141 135 132 137 153 176 120 105 118 118 \n128 131 122 118  88  64  47  40  49  70  80  79  73  66  55  53 \n 53  53  55  50  51  54  53  48  46  45  43  42  43  43  42  42 \n 40  39  38  38  40  41  38  39  38  38  39  39  39  39  37  38 \n 39  38  37  37  38  38  38  38  38  38  38  39  38  40  41  39 \n 42  43  45  46  47  48  49  50  50  50  53  52  53  52  52  51 \n 49  48  45  45  43  44  43  41  41  40  39  39  38  41  41  40 \n 40  40  42  42  45  46  48  48  48  48  51  53  53  54  55  52 \n 47  45  45  44  54  64  69  67  62  49  53 103 159 158 155 157 \n156 159 162 167 161 124 115 118 113 115 112 112 110 110 113 111 \n115 115 116 117 116 119 118 121 122 122 123 124 121 121 123 122 \n124 125 126 127 126 125 124 127 127 139 150 156 168 173 174 191 \n209 220 230 232 235 235 235 237 236 236 237 237 236 236 232 232 \n234 233 234 237 238 240 236 234 235 232 234 181 190 140 180 231 \n238 241 237 235 174 188 128 164 240 237 235 240 243 242 237 238 \n170 192 164 153 208 230 193 171 169 166 183 192 110 176 113 163 \n171 138 149 135  88  85 152 162 238 240 234 241 238 245 240 236 \n242 238 240 243 242 241 241 236 237 235 239 240 241 243 240 240 \n242 242 242 241 243 243 241 241 240 244 244 246 244 242 242 242 \n243 247 248 245 239 245 245 245 244 244 241 242 242 239 243 243 \n245 244 243 241 240 243 208 177 166 130 217 243 237 235 182 185 \n167 148 233 245 239 239 241 243 240 250 246 240 240 244 205 163 \n164 174 170 162 160 158 157 191 184 165 165 161 150 129 144 148 \n197 169 133 171 112  95 153 164 158 149 155 177 132 102 107  51 \n 57  74 131 145 148 148 143 145 148 152 151 145 149 152 148 139 \n137 133 133 133 119 108 100  97  97 100 104 110 109 114 124 128 \n126 128 129 119 107 103  93  89  82  81  74  71  69  66  67  67 \n 66  64  61  60  65  66  64  64  61  59  59  56  57  66  69  74 \n 79  60  62  60  81 132 152 152 129 140 156 177 237 237 235 235 \n151  42  41  64 131 126 132 133 126 116  86  66  68  74  81  85 \n 85  98 115 119 117 117 123 132 139 137 140 143 139 139 139 138 \n140 142 142 140 140 138 138 137 123 114 155 161 140 202 195 197 \n151 138 137 135 138 140 133 133 136 141 135 143 118 109 124 123 \n132 140 133 125 106  85  55  47  41  46  82  82  80  74  64  62 \n 60  59  57  54  51  52  50  46  46  44  43  41  42  41  39  41 \n 42  40  38  40  40  40  39  38  37  39  38  40  40  38  38  38 \n 39  36  36  38  38  39  38  38  39  38  37  39  37  39  39  38 \n 41  42  42  43  44  45  48  49  50  50  51  53  51  50  50  50 \n 45  44  42  42  41  41  39  38  37  38  39  39  39  39  37  38 \n 38  39  40  39  41  42  44  46  47  49  51  55  55  56  58  56 \n 53  51  52  53  60  67  76  76  59  46  46  87 158 157 156 153 \n158 161 164 176 139 120 115 116 114 116 115 111 109 111 115 114 \n113 116 114 113 116 113 113 117 120 116 116 117 119 119 116 116 \n117 120 119 122 120 121 119 119 120 121 125 124 115 115 113 118 \n124 126 139 154 172 190 200 212 224 227 228 228 228 228 230 230 \n230 233 233 237 239 241 240 238 235 232 226 175 188 132 189 241 \n237 236 237 238 166 185 130 171 241 244 244 242 239 237 235 233 \n163 199 152 163 181 189 199 217 228 179 185 184 114 181  78  89 \n170 181 226 193  93  80 133 150 229 246 247 244 241 237 236 238 \n240 239 239 243 245 242 238 239 240 238 240 238 239 243 236 239 \n243 245 240 236 240 242 238 242 245 243 245 240 243 242 242 242 \n243 247 249 249 240 241 244 243 245 245 241 242 237 238 241 239 \n243 242 238 239 241 240 208 183 163 133 234 247 242 243 181 187 \n161 153 240 246 243 244 243 244 245 249 248 247 245 247 224 170 \n158 161 219 215 187 171 146 182 193 176 166 158 127 136 148 154 \n193 156 142 174 121  90 141 154 167 147 164 187 117 115 109  60 \n 56  65 127 151 149 150 149 148 153 154 146 147 153 151 152 146 \n140 142 147 147 147 146 149 143 142 144 137 129 126 116 102  97 \n 95  91  91  95  98 105 111 113 122 131 127 127 127 127 127 113 \n105 109  99  92  89  91  90  89  85  87  92  93  89  83  86  93 \n 96  91  88  84  82  75  66  62  61  59  55  63  86  98 109 125 \n 87  53  47  80 140 115  95  89  81  89 110 121 123 107 103 106 \n115 123 118 125 128 132 137 140 140 137 137 137 141 144 140 136 \n140 145 143 145 146 142 139 142 135 111 132 179 143 160 213 218 \n158 138 139 137 135 137 137 140 145 156 155 150 123 111 144 129 \n135 133 137 134 122 107  76  60  48  44  71 102  89  77  71  71 \n 67  66  62  58  54  52  49  47  47  44  43  41  42  42  40  41 \n 42  42  41  41  39  40  39  40  40  40  41  40  39  40  39  39 \n 38  36  34  36  37  39  37  38  39  37  38  38  36  39  38  39 \n 39  41  41  41  42  44  46  47  49  49  49  52  50  51  52  48 \n 48  46  43  41  39  39  38  39  39  38  37  38  37  38  36  37 \n 38  38  39  39  39  39  42  43  46  48  54  58  59  60  60  58 \n 56  59  57  56  64  81 114 103  76  65  53  68 152 157 155 156 \n157 162 170 162 124 122 120 116 115 117 115 110 109 112 113 113 \n114 114 114 114 115 110 110 113 114 112 112 113 114 110 110 113 \n118 116 115 118 119 119 117 117 116 121 121 122 123 123 122 123 \n122 122 125 124 127 133 135 141 151 160 169 165 166 177 207 228 \n238 238 232 236 237 237 239 238 236 233 223 178 189 129 191 234 \n235 239 237 236 158 175 126 174 242 244 239 237 241 239 220 194 \n161 201 140 165 205 228 229 227 207 167 189 173 118 173  64  47 \n105 192 222 208 102  89 110 155 199 242 247 242 244 244 238 244 \n241 241 242 245 243 241 241 243 240 240 242 240 240 242 246 244 \n243 246 241 235 238 240 237 240 240 242 245 244 243 242 243 241 \n241 248 244 244 240 240 243 245 242 245 243 240 242 242 243 244 \n244 241 234 243 244 245 203 187 159 139 237 243 244 247 181 186 \n158 160 246 250 243 243 243 248 247 246 248 249 246 246 232 179 \n163 138 217 244 239 219 150 173 197 178 144 141 144 154 151 161 \n199 151 153 171 131  98 122 145 178 151 169 196 111 120 110  67 \n 57  64 108 148 152 153 150 146 150 154 149 150 149 146 150 145 \n142 147 144 145 149 150 150 143 147 151 149 150 159 156 148 147 \n154 148 137 133 133 133 143 159 166 160 145 130 124 117 114 110 \n112 115 112 113 122 132 133 132 133 133 129 127 125 118 113 113 \n121 121 121 124 128 126 123 120 122 121 115 111 107  97  90  85 \n 78  80  84  87  95 102 116 131 147 143 131 123 121 121 126 120 \n116 119 129 138 134 133 138 142 136 135 135 133 132 131 138 132 \n130 137 147 146 143 137 138 139 135 127 107 175 154 127 200 217 \n165 144 139 136 137 138 140 139 147 174 190 164 104 138 133 133 \n140 140 143 139 134 117  98  75  58  50  53  94 115 100  72  71 \n 74  74  69  63  56  54  52  49  46  42  40  40  42  43  42  43 \n 42  43  43  41  38  38  40  41  41  40  43  42  40  41  40  40 \n 39  37  36  37  37  36  38  38  38  36  37  39  37  39  39  39 \n 41  41  40  38  39  40  41  44  46  48  48  49  50  50  49  49 \n 49  46  43  41  41  39  39  39  38  39  39  37  36  35  35  36 \n 38  37  38  38  39  40  40  44  46  48  54  59  62  61  60  58 \n 58  60  59  61  78 109 115 113 113 106  61  56 146 156 159 157 \n157 166 170 146 133 131 129 124 119 115 116 114 112 111 112 111 \n116 112 115 114 112 111 109 110 110 110 109 112 109 102 104 113 \n114 109 111 114 116 117 117 115 118 121 122 122 121 120 116 117 \n118 119 122 121 121 122 126 129 128 128 124 126 126 123 127 148 \n175 196 237 237 235 231 234 232 231 236 217 175 186 123 197 239 \n239 242 238 230 157 172 122 172 241 239 225 207 187 177 166 170 \n163 204 132 172 197 203 195 167 146 155 193 158 125 165  68  85 \n110  73 102 100  97 108  85 163 173 241 243 245 243 240 235 240 \n240 240 240 242 243 243 242 240 240 240 243 240 242 243 242 243 \n244 245 239 238 240 242 240 243 245 243 244 245 241 241 243 242 \n242 244 243 242 238 240 243 241 246 241 239 241 242 243 247 245 \n243 243 243 248 242 245 198 191 154 152 243 245 246 244 172 191 \n149 171 249 249 244 244 245 245 245 243 246 244 244 246 244 195 \n162 141 185 236 243 247 167 156 200 191 190 196 187 180 164 163 \n200 144 163 169 141 117  98 138 169 158 169 196 102 126 117  75 \n 57  67  91 142 153 152 150 149 148 140 143 151 148 149 145 141 \n150 152 150 149 152 157 163 151 145 153 157 158 156 154 154 157 \n162 169 186 196 213 231 238 241 245 245 242 240 237 229 217 210 \n203 185 177 168 148 135 126 118  90  94  98 108 117 131 134 139 \n135 138 138 144 142 138 138 142 137 140 144 145 150 149 150 151 \n152 155 153 157 151 151 151 147 145 140 135 129 114 110 116 125 \n121 118 125 126 123 126 130 138 136 133 130 128 130 124 127 135 \n137 136 138 138 139 141 139 138 137 136 117 160 156 116 183 198 \n180 148 131 134 138 134 137 141 167 200 211 140 110 157 134 140 \n143 149 149 146 143 128 111  94  70  61  50  55 116 135 119  92 \n 66  65  64  64  62  58  54  53  51  45  43  43  42  42  43  43 \n 44  44  43  43  41  40  41  43  44  42  43  44  41  41  41  42 \n 42  41  40  40  39  39  39  38  39  38  38  38  39  39  39  38 \n 38  37  38  36  39  38  39  40  41  43  44  46  48  49  49  48 \n 49  48  46  43  43  42  40  39  39  39  37  37  35  34  36  38 \n 39  38  40  40  41  41  41  43  47  52  59  62  62  62  64  60 \n 59  64  67  77 111 120 114 111 107 109  76  51 127 153 160 158 \n162 169 200 212 156 147 139 133 125 121 119 116 115 116 114 113 \n106 109 111 112 109 111 107 108 110 110 112 112 113 112 110 110 \n111 109 110 111 116 119 119 118 117 120 117 116 116 118 115 117 \n119 119 123 127 118 119 123 124 125 124 124 126 123 124 126 129 \n135 142 216 238 233 235 232 231 236 239 211 180 179 119 205 239 \n240 239 242 221 155 167 124 171 218 193 164 161 176 203 227 207 \n165 204 125 175 155 154 180 200 205 169 194 152 136 163 105 105 \n 74  50  72  78  87 124  75 147 169 222 244 242 239 231 238 242 \n243 243 243 241 238 244 243 238 244 242 242 242 242 243 241 239 \n242 244 241 241 242 243 242 241 243 242 244 246 244 243 242 242 \n242 243 242 240 240 242 246 246 247 245 243 245 241 238 243 246 \n243 241 246 247 247 248 196 194 159 158 243 240 244 241 170 196 \n149 180 245 244 243 244 248 246 241 242 245 245 249 248 248 212 \n153 170 172 240 249 247 185 144 195 211 233 238 236 238 196 170 \n197 142 171 198 154 134  89 142 153 166 172 189  96 132 123  82 \n 60  67  90 139 149 151 148 148 155 150 145 150 158 160 157 153 \n154 152 152 153 159 167 165 156 149 155 158 164 164 171 185 196 \n215 219 233 241 246 243 242 241 241 239 237 243 245 243 240 237 \n241 239 243 242 233 229 227 213 122 106  95 109 167 161 147 139 \n105  93  98 101 113 119 125 131 134 139 146 147 148 149 146 144 \n140 148 154 153 154 148 136 128 121 113 100 100 109 125 139 143 \n144 140 136 131 132 134 135 140 139 137 130 125 120 115 113 118 \n120 109 125 128 131 133 134 135 135 138 131 157 161 123 147 197 \n192 152 138 138 138 140 141 145 179 203 201 119 138 152 139 141 \n149 152 146 145 137 134 122 110  90  74  60  53  80 127 138 129 \n 84  72  68  64  60  59  58  55  55  50  47  47  44  43  43  41 \n 42  41  42  44  43  41  41  44  44  43  43  44  42  42  42  42 \n 42  42  42  41  40  40  39  38  39  40  39  38  40  38  38  40 \n 39  38  40  39  38  38  38  40  42  41  43  42  43  47  46  46 \n 48  49  48  47  45  43  41  41  38  37  37  38  36  35  36  37 \n 39  38  39  39  41  43  44  46  52  55  57  61  62  62  63  61 \n 65  67  83 108 119 116 124 125 127 126 112  54 105 149 163 162 \n167 175 235 252 215 173 152 137 129 122 121 119 119 120 118 118 \n 95  87  87  89  96  98  97 102 102 106 104 104 113 111 112 113 \n111 111 114 115 116 118 120 116 112 115 116 114 117 121 116 118 \n119 122 120 121 119 119 125 125 121 121 124 123 121 120 125 129 \n131 142 220 234 233 232 241 237 233 235 199 183 168 114 210 240 \n238 234 235 212 174 171 120 124 161 183 218 231 235 234 219 173 \n175 199 120 159 200 227 237 236 227 170 196 139 144 169  98  83 \n 85  43 119  85  77 129  83 107 182 195 239 240 239 239 240 244 \n242 237 241 241 241 244 246 240 242 243 242 242 242 242 246 246 \n238 238 239 246 244 242 238 238 238 238 237 241 240 241 242 240 \n244 244 244 237 238 242 244 246 247 244 242 243 243 240 242 237 \n240 240 245 246 247 245 182 192 160 166 243 238 242 234 169 198 \n140 194 245 241 241 243 245 248 241 241 244 245 247 247 246 214 \n117 142 162 231 248 243 207 130 180 206 219 236 241 245 191 173 \n193 139 177 233 189 144  92 132 143 166 177 181  91 139 173  96 \n 62  68  96 142 180 181 178 177 179 180 181 178 178 174 178 180 \n181 182 190 193 191 194 193 197 206 208 216 220 230 243 243 241 \n244 241 248 249 246 243 239 240 239 245 245 245 243 243 241 238 \n242 243 242 244 242 238 231 230 143 128 111 141 240 237 237 240 \n167 129 121 123 184 197 182 175 153 116 102 101 104 104 120 118 \n115 101 110 125 124 113 102  96  99 106 120 131 142 138 137 146 \n148 154 148 143 138 142 149 147 142 137 141 142 139 139 137 138 \n131 124 134 132 128 123 125 128 135 143 126 140 163 129 116 190 \n173 171 131 134 137 140 135 136 179 181 207 149 164 140 139 136 \n140 133 130 134 138 139 131 121 106  99  73  63  57  87 135 138 \n128  90  67  67  66  62  55  51  52  53  53  53  53  52  50  48 \n 46  46  44  45  45  47  43  43  42  42  43  42  41  42  40  40 \n 40  41  41  40  41  41  38  38  38  39  38  39  37  37  38  38 \n 40  39  39  39  40  38  40  41  40  39  40  40  41  42  40  45 \n 47  48  49  49  47  45  40  43  39  36  38  37  37  38  38  40 \n 38  39  40  40  43  45  49  51  53  58  62  63  64  63  64  64 \n 69  87 115 116  94 107 118 111 123 122 119  79  77 131 167 165 \n166 167 250 254 252 230 170 144 126 126 125 124 125 124 122 120 \n134 108 111 108 103 101  98  97  98  96  91  91 103 108 104  97 \n100 103 107 109 112 118 118 116 111 112 114 118 118 118 116 115 \n116 122 120 121 121 118 118 121 123 125 125 121 125 128 131 133 \n146 196 238 238 238 238 241 241 235 234 189 187 158 111 217 233 \n239 226 201 176 185 166 114 164 217 217 223 215 197 172 142 141 \n184 196 115 151 236 236 241 236 205 165 196 126 152 182 122  77 \n 89  45 151  92  79 129 105  84 177 185 239 242 243 246 244 244 \n240 238 237 242 240 241 247 242 244 241 244 243 243 244 242 247 \n242 237 244 248 244 238 237 237 242 244 242 242 240 239 240 242 \n243 240 239 240 242 241 242 242 247 244 242 242 241 239 240 241 \n239 240 247 247 239 236 174 194 154 170 242 240 243 227 166 194 \n141 206 245 243 246 246 245 248 243 242 245 244 245 245 238 184 \n136 132 164 230 237 233 218 123 158 182 195 235 244 241 179 181 \n187 139 190 237 208 148 105 116 147 157 182 179  91 147 211 116 \n 64  66  90 150 236 237 237 232 228 231 232 226 237 235 237 236 \n233 232 242 242 237 236 230 233 244 239 241 240 245 248 242 240 \n242 244 244 246 245 246 245 244 245 245 247 245 244 243 243 236 \n240 238 244 248 244 243 240 236 146 133 114 153 246 244 239 243 \n167 139 123 135 225 238 236 239 228 173 154 162 147 142 144 150 \n144 136 135 136 139 146 143 142 144 149 144 143 142 137 138 145 \n152 153 145 149 149 150 156 155 152 146 146 145 141 139 139 139 \n139 139 141 142 145 143 143 148 145 142 129 135 158 130 117 193 \n156 184 114 120 122 122 116 136 168 170 199 140 145 140 135 131 \n134 134 132 129 131 133 133 128 112 108  91  67  56  61 119 153 \n151 140  77  46  57  62  56  52  53  52  54  56  55  56  58  55 \n 56  54  52  51  51  53  50  51  50  47  47  45  44  44  41  41 \n 41  40  41  42  42  43  40  40  40  40  40  40  42  40  39  39 \n 39  39  38  38  39  38  38  38  39  39  39  42  41  41  41  44 \n 46  47  49  48  48  47  44  43  40  39  39  38  37  37  38  40 \n 39  40  43  45  48  51  53  55  58  61  63  66  64  63  66  69 \n 99 118 111 100  76  88 111 115 117 115 112 105  76 112 162 166 \n157 146 242 254 254 250 186 151 130 129 126 121 125 126 121 119 \n176 126 125 124 124 125 122 123 126 125 120 119 118 112  96  94 \n 89  86  85  85  89  96 102  98  95  97 102 104 111 112 116 114 \n116 115 117 121 123 122 123 124 125 126 124 123 127 131 148 176 \n218 234 234 235 236 236 235 234 230 230 175 198 142 111 213 203 \n178 143 119 122 199 157 114 150 146 123 120 118 118 120 123 143 \n189 186 117 134 208 212 187 155 138 160 195 121 158 172 161  96 \n102  84 103 100  85 102 138  79 148 188 231 242 240 242 237 243 \n238 240 240 238 238 240 239 241 244 242 239 239 241 241 241 241 \n243 239 243 241 237 239 236 236 235 236 239 241 239 236 238 241 \n241 240 243 241 242 238 238 239 240 239 241 241 245 243 243 241 \n239 239 235 239 239 235 169 196 148 181 239 238 241 216 166 185 \n142 214 247 245 247 244 241 245 246 244 245 245 242 234 203 133 \n123 149 226 233 238 239 216 112  92 116 178 230 242 241 169 186 \n182 145 196 234 222 154 120  94 155 160 185 165  94 164 237 146 \n 71  66  89 119 239 243 236 243 243 238 239 238 238 243 240 246 \n247 250 246 241 239 237 237 241 246 245 243 237 244 236 234 240 \n246 244 241 240 240 238 244 246 249 248 242 243 238 242 242 237 \n242 245 243 241 245 245 243 236 141 133 113 166 245 242 243 245 \n161 144 124 146 230 240 243 243 226 187 155 162 157 155 152 152 \n154 146 150 167 172 190 172 158 158 146 142 141 144 140 137 140 \n153 147 147 149 147 150 152 151 150 150 142 144 142 138 136 139 \n142 144 142 144 143 148 144 141 142 138 133 134 139 138 133 174 \n149 188 131 134 128 126 120 134 149 173 188 149 141 141 120 122 \n122 124 122 119 120 126 129 133 128 115 105  94  70  61  76 135 \n152 157 142 111  46  55  44  47  57  62  65  65  63  62  58  57 \n 57  57  55  57  58  59  56  58  57  55  54  54  52  51  51  51 \n 49  48  50  51  50  49  48  49  46  47  45  45  44  42  41  40 \n 39  38  37  37  39  39  39  39  43  42  40  39  39  41  42  43 \n 42  44  48  48  50  49  48  46  42  40  41  41  40  39  41  41 \n 41  42  45  50  53  57  60  61  64  63  62  65  67  70  84 111 \n127 109  84  71  73  79  85  75  64  58  56  64  83  89 136 160 \n131 116 204 250 253 250 185 151 133 126 120 123 123 122 122 120 \n200 141 120 122 121 121 119 122 120 121 123 123 124 124 123 126 \n131 128 123 118 114 114 112 108 100  94  91  82  90  96 103 105 \n109 105 104 109 117 119 120 124 125 123 126 125 134 168 216 233 \n233 232 230 235 230 230 225 227 228 230 168 199 137 102 135 128 \n121 119 125 125 208 150 110 103 110 113 119 117 119 121 121 147 \n192 175 123 109 126 128 119 124 142 165 195 116 164 145 177 147 \n110 108 144 131 105 113 156  91 119 193 197 209 218 218 232 242 \n242 243 238 235 237 245 244 243 245 243 243 244 242 242 240 238 \n237 237 238 237 245 244 239 237 237 238 235 235 237 237 238 241 \n243 243 244 245 242 242 243 241 241 244 244 243 241 240 239 240 \n236 242 242 239 239 235 166 198 148 189 243 241 242 207 175 176 \n147 219 245 244 247 245 241 243 247 246 235 210 178 161 138 147 \n182 195 234 235 206 176 146 120 142 189 234 239 245 242 163 187 \n173 148 203 243 234 177 124  84 154 168 188 154 101 172 240 172 \n 77  66  88 101 230 247 244 245 244 242 247 241 244 245 242 246 \n246 248 247 249 243 234 235 241 248 248 246 241 243 237 240 243 \n247 245 243 241 239 243 244 246 247 247 243 243 243 246 249 246 \n247 248 243 240 246 246 242 229 139 134 113 176 248 245 247 246 \n158 148 125 156 242 244 243 244 215 192 157 155 160 163 158 157 \n157 152 155 165 173 193 177 162 160 152 147 147 151 149 144 144 \n152 148 144 143 144 152 159 157 147 147 143 141 143 141 140 142 \n144 145 142 142 147 149 152 152 143 143 141 135 133 157 126 162 \n131 175 142 146 145 145 143 133 134 160 185 170 138 145 129 126 \n125 126 123 122 122 127 124 130 136 126 110 107  89  75  65  89 \n150 191 212 212  84  56  46  44  56  63  60  67  80  83  75  67 \n 57  54  55  55  57  58  57  58  59  55  56  54  55  55  55  56 \n 54  54  55  55  56  55  53  55  52  50  50  49  47  46  45  43 \n 40  42  42  43  42  42  42  42  42  42  41  38  37  39  41  42 \n 43  45  47  48  50  52  49  49  46  45  44  43  43  44  45  47 \n 47  49  53  58  62  63  63  66  64  65  65  62  74 100 124 126 \n120  85  60  52  48  46  42  40  38  40  46  55  92 120 127 141 \n175 137 164 231 253 252 194 151 138 128 124 126 124 127 128 125 \n209 173 127 126 120 117 118 122 120 121 120 123 122 122 124 124 \n126 122 124 124 125 126 127 131 130 127 125 126 121 121 120 116 \n111 107 100  96  94  92  98 108 112 115 122 125 192 230 231 236 \n238 231 229 235 234 236 230 230 213 184 165 197 126  99 117 116 \n119 120 120 123 222 143 101 103 110 113 109 110 115 118 121 151 \n192 168 121 107 118 116 123 161 145 168 193 111 160 135 160 131 \n146 127 162 167 118 118 153 120  90 177 185 136 132 134 144 169 \n186 182 170 178 189 205 217 223 224 221 232 236 230 238 239 238 \n239 238 236 239 240 243 241 242 243 244 243 243 243 247 243 244 \n244 243 243 245 238 240 243 241 244 244 242 243 239 239 235 236 \n237 236 239 240 241 229 163 202 146 198 245 241 240 196 176 165 \n150 228 245 241 243 247 239 226 200 181 164 155 174 191 208 234 \n242 234 204 166 145 162 196 223 238 243 239 245 245 234 164 192 \n165 152 205 236 244 208 136  93 129 164 187 141 111 188 244 205 \n 84  65  85  90 191 243 239 236 239 246 244 246 243 241 246 242 \n241 244 247 243 240 242 239 237 244 246 247 249 243 240 240 244 \n242 240 233 235 237 240 247 243 240 244 243 239 245 250 250 246 \n241 243 243 242 243 241 246 218 143 138 113 183 249 247 248 242 \n148 153 125 169 246 245 246 247 236 210 158 158 149 169 165 162 \n163 159 158 169 172 195 185 165 159 158 153 151 154 149 144 138 \n146 147 143 147 154 156 153 149 150 154 151 149 148 146 139 141 \n135 133 136 141 147 148 147 149 151 151 153 125 146 183 118 155 \n120 138 158 151 153 149 142 122 147 140 167 173 131 146 130 127 \n133 140 138 132 121 133 139 137 143 144 125 119 111 105  87  73 \n107 193 230 230  96  71  58 107 123 125 155 170 187 200 170 106 \n 99  88 100  97  84  77  69  65  63  61  55  57  59  56  57  54 \n 53  54  53  55  53  48  49  53  57  57  58  56  52  52  52  51 \n 49  48  48  48  47  45  45  45  42  40  39  38  40  41  42  43 \n 45  47  48  50  53  56  54  55  52  51  51  48  46  47  50  52 \n 54  56  60  63  65  64  64  64  61  66  79  97 127 130 126 122 \n 93  52  43  39  38  39  45  47  55  72  89 104 116 129 133 134 \n209 227 202 203 253 254 221 154 137 132 130 133 127 127 128 130 \n203 184 136 122 121 120 122 124 123 122 119 121 125 125 127 126 \n129 126 124 125 127 126 129 128 126 126 124 122 121 123 126 125 \n124 125 125 125 127 127 125 126 125 139 175 187 207 216 214 221 \n224 222 224 219 233 235 225 191 143 128 174 189 118  98 115 117 \n117 119 121 130 225 137  96 102 112 112 112 113 112 112 116 155 \n198 153 128 133 139 133 112 131 144 174 187 110 160 128 123 137 \n126 146 159 184 124 122 142 149  77 147 193 147 129 129 132 128 \n132 133 132 132 130 134 145 149 149 151 159 163 169 176 180 188 \n204 223 231 232 234 240 240 241 241 244 243 243 241 244 240 243 \n243 234 241 243 240 239 241 241 242 241 241 243 243 243 241 239 \n241 242 243 242 242 229 163 205 141 204 246 243 241 185 183 167 \n154 231 244 240 230 212 185 160 154 169 205 223 239 241 241 237 \n211 172 153 174 210 226 238 239 237 240 243 244 246 232 164 192 \n160 151 211 240 241 225 143 110 126 167 190 131 119 200 245 227 \n101  69  76  89 163 240 240 241 238 239 243 240 244 242 240 227 \n229 245 249 241 239 244 240 243 241 240 246 247 247 247 248 244 \n240 236 241 245 244 248 247 240 244 240 236 235 244 249 250 246 \n243 238 237 241 242 246 249 215 148 138 115 198 248 247 246 234 \n148 161 122 180 247 248 245 248 248 229 159 176 138 178 173 165 \n162 159 160 170 174 195 194 170 152 156 156 154 152 151 141 136 \n144 154 148 150 161 160 153 153 156 157 159 155 155 156 153 150 \n145 139 140 146 142 139 143 145 152 153 150 122 155 184 115 160 \n120 117 167 146 147 146 137 118 185 148 147 177 127 146 139 134 \n137 144 150 148 148 152 150 152 168 184 186 143 130 151 144 117 \n 91  96 145 163  78  74  69 188 221 219 231 232 231 232 177 104 \n105  96 171 200 186 166 144 127 102  87  76  73  70  64  63  60 \n 58  55  55  56  56  53  51  56  57  54  56  55  54  54  53  55 \n 56  55  54  53  52  51  50  49  48  48  47  47  47  47  48  47 \n 48  49  50  51  53  55  57  56  55  53  54  52  50  52  55  57 \n 59  61  65  63  65  64  64  70  83 100 124 132 132 132 116  84 \n 52  40  41  42  44  50  61  82 106 131 160 162 163 169 165 154 \n149 165 192 191 242 254 240 172 137 131 134 136 128 127 129 132 \n177 198 152 128 122 121 122 121 124 123 122 122 126 126 126 125 \n124 122 123 125 124 127 131 129 127 127 126 123 125 125 122 123 \n127 127 125 129 134 131 143 163 210 234 242 244 245 242 239 240 \n235 230 220 202 184 176 155 145 127 124 185 177 111  96 111 112 \n111 113 111 146 222 130  87 105 107 108 110 108 103 101 109 158 \n200 134 125 129 149 139 110 114 139 176 182 110 153 116 117 139 \n129 100 154 196 148 123 126 173  86 110 197 165 119 117 116 115 \n126 126 127 128 128 127 133 133 134 133 133 135 131 134 129 129 \n127 128 142 146 154 165 170 169 179 200 203 211 224 228 236 241 \n243 241 240 244 241 239 240 240 241 242 242 240 240 238 240 243 \n242 241 241 241 241 219 164 200 137 209 242 237 236 172 187 161 \n163 230 217 175 143 152 178 198 224 238 242 242 227 198 170 173 \n185 192 225 234 242 240 238 239 234 239 242 243 241 216 167 194 \n154 150 221 240 241 241 165 125 131 171 190 122 128 212 244 240 \n132  68  72  90 140 233 241 235 232 238 238 242 241 241 234 237 \n235 239 243 243 246 245 240 243 244 245 245 246 250 249 250 248 \n242 241 242 239 246 246 238 241 237 237 236 239 245 246 248 246 \n248 242 237 240 246 246 249 211 160 137 123 214 245 239 243 220 \n152 171 124 195 243 237 239 247 243 217 168 180 154 209 236 225 \n205 191 178 179 172 187 195 187 194 147 143 150 145 143 140 142 \n153 156 153 150 149 161 160 154 156 160 155 153 156 149 149 147 \n150 143 145 138 125 133 140 143 148 152 144 128 171 183 118 164 \n116 112 169 140 148 153 135 142 203 164 134 178 134 147 140 138 \n144 151 156 163 174 189 210 227 240 241 240 212 139 139 165 168 \n162 146 120  97  91  82  71  91 111 126 144 162 178 192 137  94 \n100  92 190 220 218 222 225 224 195 122 111 101 127 147 121 107 \n101  97  92  87  78  75  69  69  63  63  58  58  59  57  55  56 \n 56  56  57  59  57  56  56  55  53  53  55  54  54  55  55  53 \n 52  50  53  53  53  51  53  57  53  52  52  53  55  57  59  62 \n 69  75  80  79  83  93 105 118 130 135 132 127 113  87  52  46 \n 44  45  46  55  73 100 135 158 136 132 142 137 130 126 132 157 \n183 170 139 144 203 241 252 197 139 134 134 132 131 131 130 134 \n146 206 170 143 124 122 123 122 124 125 123 124 126 125 124 124 \n124 124 123 124 124 127 128 127 130 131 128 128 129 126 121 125 \n131 136 137 138 136 167 212 225 233 234 234 235 237 235 235 225 \n206 186 172 170 174 190 195 181 141 132 184 173 106 105 118 113 \n110 104 100 158 216 123  85  96  98 100 106 105  97  80 102 164 \n199 126 133 139 146 137 107 112 134 176 176 108 145 117 111 119 \n155  90 132 187 171 114 110 164 115  87 188 174 125 113 113 114 \n124 122 123 124 123 126 126 125 126 125 126 128 129 132 129 131 \n125 125 135 139 137 136 139 139 137 143 147 147 155 159 184 207 \n239 242 242 243 243 238 241 246 241 244 235 240 243 248 246 247 \n244 244 243 245 244 212 163 194 141 216 245 240 237 171 193 151 \n165 170 151 159 187 213 238 241 245 235 204 169 154 167 195 218 \n232 241 228 229 246 240 227 238 239 237 239 239 241 209 171 194 \n151 153 233 238 239 238 186 135 132 171 187 116 137 219 244 244 \n159  72  67  89 121 221 244 239 236 239 240 242 245 246 244 241 \n238 240 243 247 244 243 239 242 239 239 246 246 244 238 236 243 \n247 251 249 246 247 244 238 239 239 239 242 240 244 243 238 242 \n240 238 240 243 243 238 246 200 167 134 133 222 246 242 247 212 \n158 170 128 209 235 206 224 223 223 219 172 168 178 212 250 249 \n245 239 231 222 170 179 199 208 234 166 148 144 147 150 151 145 \n148 151 154 149 156 158 151 146 153 160 152 154 154 147 147 143 \n147 146 151 144 138 141 146 150 153 155 146 116 175 180 120 170 \n105 118 167 152 155 149 129 158 200 159 138 169 139 150 144 153 \n164 181 207 214 225 237 239 240 241 242 242 243 197 137 130 153 \n161 165 170 167 156 139 131 119 106  98  91  89  85  87  73  70 \n 69  68 100 129 146 168 199 214 202 120 111  93 145 153 134 128 \n134 138 132 131 133 129 129 131 128 116  94  86  80  75  70  65 \n 67  64  63  64  62  60  60  60  59  57  59  57  56  56  55  57 \n 55  54  58  60  61  58  60  61  56  53  49  51  56  57  58  64 \n 85  92  94 104 121 128 128 132 130 130 122  98  63  50  52  50 \n 49  55  69 101 139 143 140 135 123 118 131 137 142 143 126 111 \n131 181 183 148 194 213 245 203 147 143 138 136 135 135 134 134 \n108 190 187 164 122 123 122 126 128 128 125 126 123 123 121 120 \n127 126 124 125 127 129 129 130 131 129 131 126 121 118 114 120 \n122 131 147 175 215 239 243 233 240 246 241 232 214 197 175 165 \n176 193 217 233 206 173 133 122 124 132 180 150  93 103 118 117 \n116 114 112 153 185 106 100 116 101  93  92  93  85  76 105 167 \n196 118 133 133 133 142  96 106 137 184 164 112 135 114 110 102 \n149 119  98 145 189 123 100 137 156  78 154 187 140 122 122 121 \n119 119 122 126 122 124 126 124 125 120 120 126 132 136 131 131 \n126 129 125 124 122 128 134 136 134 134 135 135 137 137 138 139 \n191 238 245 240 241 241 243 240 236 242 240 243 244 248 244 243 \n239 242 244 240 235 200 166 190 140 217 238 228 217 159 188 144 \n159 175 210 237 245 244 233 213 171 146 146 169 216 234 235 240 \n243 245 239 242 235 229 230 238 240 237 238 241 240 194 177 190 \n149 158 234 241 242 239 206 144 150 173 180 107 145 224 238 238 \n190  79  67  83 108 186 238 242 242 238 242 244 250 249 247 245 \n241 244 243 245 241 240 242 243 242 240 249 250 246 243 239 237 \n238 244 247 242 245 238 241 247 244 241 246 245 239 239 243 243 \n242 244 246 245 239 237 240 188 177 136 140 229 247 244 242 202 \n162 159 135 218 249 248 248 246 245 244 179 151 187 202 241 241 \n247 245 243 241 179 170 196 218 244 226 214 204 192 178 160 155 \n158 162 158 154 150 148 150 150 154 154 149 154 148 148 147 148 \n147 145 154 154 152 150 158 155 146 145 146 112 173 177 126 171 \n 84 121 155 165 155 153 126 164 193 135 151 148 147 152 191 214 \n234 243 243 241 240 243 239 240 239 240 244 245 241 213 146 117 \n131 151 163 162 162 164 169 169 171 169 165 161 153 142 134 126 \n114 106  97  85  77  72  70  69  69  59  67  63  77  84  88  94 \n103 115 123 124 127 136 151 167 191 202 153 137 134 131 124 122 \n117 112 107 101  99  95  90  85  83  82  80  79  78  82  82  82 \n 87  90  92  88  76  67  58  56  51  46  44  40  39  39  44  48 \n 52  71 115 136 132 132 131 130 120  98  59  47  54  55  59  63 \n 80 109 138 150 131 130 131 132 127 122 127 132 138 138 148 158 \n126 106 165 188 178 194 195 190 163 140 137 139 138 141 139 141 \n110 154 201 177 124 126 129 129 131 130 128 126 124 127 123 124 \n126 127 128 129 126 129 132 132 132 128 133 131 128 121 125 132 \n136 152 214 236 238 231 233 236 238 240 213 176 158 172 199 218 \n237 247 233 192 144 129 126 123 120 134 142 101  80 105 113 116 \n111 112 113 137 135  99 100 114 111 112 116 117 122 119 128 173 \n191 111 130 128 128 142  93 102 142 187 156 121 124  96  95  91 \n126 150  88 130 188 169 120 116 175  93 127 189 148 125 120 120 \n118 115 119 123 121 117 117 120 126 124 120 125 127 128 128 129 \n132 135 125 125 129 131 134 133 137 138 139 139 133 132 136 141 \n160 222 242 242 242 246 246 242 240 240 244 240 240 239 240 242 \n243 242 240 239 236 194 173 184 140 215 203 163 149 144 184 135 \n168 231 234 239 239 214 160 136 138 176 213 227 235 236 240 243 \n246 245 243 243 236 228 232 240 245 238 241 245 239 186 181 186 \n146 161 233 236 237 236 223 156 160 178 176 101 152 227 236 237 \n207  94  65  76 104 166 249 246 242 245 240 244 249 248 247 249 \n244 247 244 244 246 243 239 242 250 247 251 248 244 246 241 240 \n241 247 244 243 246 244 243 246 239 237 246 245 243 239 239 238 \n238 243 243 235 235 233 241 186 177 140 150 232 243 242 240 192 \n170 157 141 221 248 251 245 243 242 242 186 126 184 198 235 245 \n243 240 243 243 194 147 190 208 240 240 239 242 239 231 224 218 \n214 211 204 198 187 177 176 174 169 162 161 163 157 157 165 162 \n157 155 158 157 139 142 155 151 151 150 138 121 176 170 131 172 \n 80 118 149 162 152 159 130 166 191 124 156 134 149 162 241 242 \n240 241 241 243 240 244 230 232 237 239 243 243 246 240 226 200 \n160 142 138 130 126 135 153 162 166 164 155 152 155 153 153 155 \n157 157 157 154 149 142 129 128 120 108  93  85  75  72  64  59 \n 60  64  63  67  75  81  91 106 133 157 136 128 125 128 132 135 \n137 140 137 136 135 135 133 131 133 130 128 127 125 126 127 127 \n125 123 117 108  74  50  43  41  33  36  37  36  33  38  42  50 \n 88 121 139 137 133 135 130 107  68  56  55  58  62  63  75 103 \n142 154 138 128 128 133 134 133 129 129 129 131 134 135 139 146 \n158 141 118 175 164 144 167 176 170 140 137 144 143 142 152 162 \n149 126 203 172 153 131 130 129 128 130 132 128 125 132 130 129 \n126 129 129 128 124 130 134 136 136 132 134 134 135 134 146 143 \n141 153 198 207 201 205 184 179 169 166 178 199 228 240 246 242 \n221 183 144 134 135 130 124 120 117  88  54  48  56  95 107 111 \n119 118  91  99  95  88  90 104 108 112 116 121 122 118 138 179 \n183 106 127 118 130 139 113 105 150 189 152 127 114  91  94  95 \n108 168  95 120 170 202 153 114 159 121  97 183 161 123 111 109 \n109 110 117 118 117 116 113 114 119 123 123 123 126 125 126 126 \n128 132 126 127 128 129 130 129 133 131 131 132 138 140 140 142 \n183 235 244 245 247 248 240 242 237 237 249 246 244 241 239 238 \n238 239 246 241 239 184 178 174 122 134 139 161 168 146 179 127 \n169 230 206 179 148 131 148 140 208 225 218 224 229 225 228 237 \n238 245 249 243 237 233 240 244 238 206 222 239 236 176 187 180 \n142 168 242 240 239 241 232 172 163 182 169 100 144 217 223 228 \n216 107  62  67 101 134 240 244 244 248 238 236 249 248 247 248 \n249 246 244 238 242 245 245 246 248 249 245 242 246 246 240 247 \n249 247 244 246 247 244 234 243 240 240 246 244 243 242 233 241 \n237 237 247 250 246 244 238 179 173 143 159 233 246 248 247 189 \n181 159 150 233 250 249 244 246 247 240 158  90 140 170 216 241 \n242 246 247 246 196 114 175 192 223 236 244 242 239 239 236 238 \n241 241 244 246 244 241 240 238 236 230 232 230 230 225 225 228 \n225 221 215 210 206 209 210 202 191 198 167 142 178 158 146 170 \n 77 108 142 208 223 220 142 168 187 117 160 115 143 151 241 239 \n242 238 246 245 240 244 241 245 243 240 234 236 238 237 244 244 \n237 229 209 205 184 172 166 141 130 132 136 142 150 151 152 154 \n158 154 156 154 155 154 153 153 160 164 164 164 155 152 149 138 \n130 125 113 103  93  86  78  71  65  64  64  56  58  61  68  75 \n 84  91 100 110 118 121 125 129 130 132 137 138 135 137 141 139 \n139 141 141 141 137 119  89  68  49  40  44  40  46  57  76 106 \n134 138 139 135 124 106  69  54  61  63  69  72  84 107 146 161 \n145 130 133 130 135 137 131 133 132 131 132 131 132 134 140 141 \n144 157 132 123 183 153 155 177 189 156 156 168 190 208 228 239 \n176 120 197 175 163 134 132 131 130 131 128 126 129 130 132 130 \n131 128 133 131 128 133 136 137 134 132 137 139 151 181 209 201 \n184 164 145 149 144 144 149 171 184 204 216 217 226 228 212 187 \n149 136 135 134 133 127 123 120 110  75  50  43  63 101 115 118 \n118 111  94  82  57  59  87 103 114 117 120 119 118 122 141 184 \n176 110 126 121 122 123 121 110 154 193 146 125 121 121 124 126 \n123 160 124 100 162 199 157 150 148 152  80 160 178 126  90  89 \n101 104 111 115 116 116 117 118 117 116 115 115 123 123 124 126 \n128 126 124 126 124 126 122 122 125 127 129 128 131 138 147 164 \n221 239 249 247 244 245 240 244 239 241 247 244 240 247 247 243 \n243 242 242 236 228 168 184 167 114 136 173 180 159 146 173 124 \n126 148 134 127 124 131 159 131 144 146 153 165 166 174 186 207 \n224 242 243 240 233 233 240 247 240 228 231 239 226 170 193 178 \n140 179 243 238 242 242 239 197 163 186 158  99 136 132 134 114 \n101  71  66  68  92 113 229 238 235 237 235 240 246 244 243 249 \n244 246 242 238 248 243 242 245 244 245 242 245 247 245 246 250 \n249 246 244 244 246 246 240 239 240 239 246 246 244 243 240 240 \n244 244 244 249 249 248 238 177 170 138 165 237 244 243 239 179 \n185 157 158 238 247 247 246 247 236 188 104  80 123 184 236 243 \n243 245 243 244 180  85 106 126 207 243 247 244 241 238 238 242 \n241 241 240 236 236 243 246 244 241 241 241 242 238 240 246 244 \n243 244 244 240 234 242 245 243 238 239 187 158 181 150 158 166 \n 80 102 138 216 246 233 154 175 184 115 164 110 136 141 232 235 \n237 238 247 245 244 241 244 247 243 239 238 239 240 237 231 233 \n240 245 239 244 238 232 232 218 198 190 179 166 151 126 107 110 \n112 116 133 136 140 143 155 157 158 156 167 163 161 160 157 157 \n154 156 152 153 152 152 147 142 138 131 121 113  99  88  77  68 \n 59  54  62  64  61  61  66  68  73  81  91  99 111 120 128 132 \n136 138 139 137 141 144 136 130 113  70  55  45  57  87 118 130 \n134 135 128 108  73  60  59  65  74  76  81 103 143 158 154 140 \n135 132 132 130 134 140 136 136 138 138 135 136 135 135 136 139 \n141 143 138 125 159 175 143 165 211 194 214 231 242 243 245 246 \n165 140 173 195 149 146 131 134 133 136 132 129 130 131 130 128 \n134 134 136 133 127 133 138 141 142 143 142 144 198 203 198 192 \n187 177 169 170 177 183 183 185 184 189 183 168 150 143 134 134 \n128 127 130 129 128 128 124 116 106  93  89  94 108 119 123 121 \n112  99  75  59  65  77 106 115 116 122 124 123 122 125 149 191 \n165 110 126 124 124 124 127 121 158 196 138 124 126 124 121 123 \n123 131 161  88 143 181 170 145 164 176  84 129 194 153 127 123 \n119 112 104 106 104 103 105 104 100  99 102 108 114 120 113 116 \n119 125 129 127 122 121 121 123 123 124 129 128 135 142 186 228 \n235 234 238 242 236 236 240 249 243 241 244 245 249 248 245 246 \n235 209 185 160 134 138 191 160 107 118 121 122 132 151 167 120 \n112 124 122 119 112 111 111 108 109 112 121 123 117 112 118 121 \n128 155 186 181 154 154 168 170 164 164 196 197 178 167 198 173 \n140 183 233 237 241 244 249 227 162 189 144 101 131 107  54  54 \n 46  49  68  67  78  93 204 239 243 240 242 242 245 245 244 243 \n243 243 244 236 243 239 234 241 248 247 240 241 245 237 241 247 \n239 240 241 239 244 246 243 244 243 245 245 243 240 241 237 232 \n235 239 243 247 242 245 236 176 168 127 173 241 240 241 236 173 \n194 145 173 237 239 232 208 171 135 134 162 181 223 242 236 237 \n238 232 212 182 118  91 113 152 231 244 242 242 242 244 244 246 \n247 249 238 236 240 242 241 242 246 244 235 238 242 245 244 249 \n248 247 246 242 243 246 247 240 240 239 181 165 184 145 168 157 \n 87  94 132 206 244 232 158 178 180 113 173 104 114 116 216 236 \n237 240 241 239 243 242 250 242 242 241 243 241 247 241 241 242 \n238 240 244 241 238 236 237 237 238 238 244 244 242 191 123 129 \n118 163 188 181 163 141 109 103 103 103 111 116 128 132 137 146 \n153 152 155 161 158 155 157 155 154 154 158 159 160 156 154 150 \n143 132 125 120 109 100  91  81  74  69  64  61  56  56  63  68 \n 69  75  82  90 102 108 116 122 129  83  60  52  68 126 129 123 \n109  94  68  62  74  77  82  85  92 108 140 167 148 134 137 134 \n137 137 139 140 137 139 141 138 139 140 137 137 137 137 136 141 \n143 145 152 128 141 179 161 142 193 214 244 243 245 244 243 244 \n146 166 157 194 142 162 139 141 140 137 134 132 133 135 134 135 \n135 134 136 137 138 143 144 147 162 177 181 193 207 215 216 219 \n219 228 238 238 243 243 242 242 240 229 187 151 139 138 137 130 \n123 124 126 124 125 122 125 119 119 116 119 121 120 122 125 122 \n112 103  98  96 105 113 121 121 121 124 127 124 125 126 154 192 \n158 113 128 126 125 127 127 126 160 198 131 125 125 128 126 123 \n123 121 164 108 123 165 181 140 144 185 110 101 194 160 127 117 \n121 124 124 124 123 120 126 126 121 116 110 108 115 121 106 101 \n106 119 135 139 121 120 124 125 124 123 126 122 127 185 231 235 \n239 239 246 243 237 235 241 245 243 245 242 240 246 243 223 197 \n161 139 132 129 127 145 192 152 104 117 124 120 132 161 160 113 \n109 122 118 109 107 110 109 111 110 108 114 118 117 114 116 120 \n125 128 132 129 116 121 124 122 125 126 130 134 145 168 196 166 \n143 152 164 176 187 186 197 201 163 195 135 108 114  53  44  49 \n 43  42  66  67  72  94 170 236 241 240 237 240 244 245 238 243 \n248 243 239 236 237 237 236 244 245 242 241 239 237 238 247 241 \n237 243 242 242 243 240 240 240 238 240 240 239 240 242 240 240 \n236 235 239 241 241 245 232 174 169 124 184 243 244 243 233 173 \n196 139 181 234 210 163 139 140 165 205 236 236 239 241 244 238 \n199 165 143 127 145 190 218 229 236 240 236 234 236 241 245 247 \n247 243 238 247 242 240 243 243 248 247 246 246 251 246 244 245 \n236 239 247 247 242 238 242 240 238 242 181 168 187 146 177 146 \n 94  90 128 190 246 219 166 180 176 110 179 103 102  98 195 240 \n244 244 243 245 241 240 245 239 227 240 241 239 248 247 249 247 \n234 238 244 237 227 227 237 238 238 238 248 247 242 182 135 134 \n116 200 241 239 234 221 143 121 133 122 117 118 131 122 112 110 \n106 105 108 114 115 123 132 139 148 157 160 161 166 168 164 160 \n155 154 154 155 150 150 144 138 131 129 120 116 110 102  95  90 \n 80  78  72  67  63  62  66  68  70  62  59  58  59  75  71  66 \n 67  79 108 125 114 102 101 112 131 152 145 139 140 141 142 137 \n140 139 141 142 142 144 142 139 143 140 142 141 142 141 142 145 \n161 180 202 162 124 172 181 137 175 204 245 242 245 248 246 244 \n144 172 163 189 150 149 147 141 142 138 135 135 134 137 146 145 \n142 145 144 146 152 154 170 200 245 252 250 252 253 251 245 243 \n244 249 247 244 250 250 247 244 224 167 136 136 133 133 132 132 \n131 129 127 125 123 124 129 127 125 125 125 125 126 126 124 124 \n118 120 120 120 121 130 132 130 131 132 127 124 123 125 161 197 \n148 112 126 126 126 124 127 128 163 200 128 124 123 125 126 125 \n125 125 148 148 100 158 171 161 122 163 152  85 176 177 132 122 \n127 127 125 124 123 123 127 127 127 130 134 131 130 132 133 130 \n129 130 131 128 124 126 126 118 106 111 121 127 163 207 231 228 \n225 229 237 237 236 244 241 240 242 237 243 225 181 156 138 138 \n133 125 124 124 123 146 192 143  97 119 120 118 127 168 150 110 \n101 103 107 108 107 106 103 104 107 106 110 113 115 112 117 119 \n118 117 119 119 118 121 121 123 122 120 119 119 143 171 194 158 \n147 141 139 144 142 137 129 135 171 195 124 114  95  45  45  52 \n 45  40  59  64  67  92 136 211 234 236 237 246 249 243 237 247 \n250 245 240 241 244 242 243 245 242 234 229 237 246 245 244 238 \n243 244 243 241 236 240 239 240 237 240 236 233 245 243 237 240 \n240 239 242 245 245 242 220 170 177 122 193 245 245 239 225 170 \n192 131 182 150 139 158 199 228 240 242 243 244 236 224 202 168 \n145 152 174 198 234 241 244 243 244 241 244 245 250 250 246 248 \n243 238 239 245 245 249 248 244 245 237 244 245 250 249 240 236 \n241 241 241 241 242 239 235 233 238 241 175 173 182 140 187 134 \n100  89 122 167 243 209 176 187 163 111 189 111  95 104 173 245 \n239 239 240 236 236 236 235 239 236 240 224 234 246 247 247 246 \n241 241 239 241 247 238 239 239 244 242 241 244 238 170 143 132 \n127 210 240 236 237 230 160 169 142 128 114 130 186 182 144 143 \n144 140 138 134 128 125 120 122 117 113 108 105 106 112 121 128 \n137 146 153 156 164 162 157 154 157 156 152 151 146 147 147 146 \n144 138 136 132 132 128 121 116 112 108 108 105 110 115 131 145 \n145 146 136 125 129 146 161 165 150 137 137 142 141 139 140 142 \n140 143 143 142 144 142 141 144 146 139 143 146 157 171 191 211 \n234 238 241 214 117 163 191 141 157 195 249 248 245 246 247 245 \n144 160 174 182 175 134 157 141 140 136 136 140 142 143 143 145 \n147 148 148 150 173 207 237 246 252 248 248 248 249 245 243 246 \n249 247 248 247 250 251 245 209 162 144 143 137 138 133 134 134 \n135 136 135 131 127 128 131 131 128 126 127 128 129 131 131 130 \n129 131 129 128 131 131 131 133 130 132 131 128 128 130 165 203 \n137 113 124 125 126 128 131 132 168 198 128 124 122 125 124 124 \n124 124 130 167  98 151 161 175 124 132 173  91 151 189 139 131 \n128 125 127 125 124 124 126 128 128 127 132 129 132 134 134 133 \n133 133 133 133 136 138 137 138 142 143 169 214 236 236 238 234 \n229 227 229 224 222 228 230 227 237 229 192 155 137 141 140 139 \n134 128 126 123 126 147 193 138  96 121 124 119 127 180 142 103 \n 92 101 108 107 108 105 101 100 103 104 111 113 116 113 115 116 \n117 116 118 118 117 120 122 120 121 117 119 118 148 173 195 147 \n146 139 136 137 139 132 122 136 174 194 115 124  90  57  49  57 \n 49  42  58  72  65  81 119 150 160 169 179 209 229 230 233 239 \n243 242 232 237 246 239 238 240 236 240 244 240 241 242 244 244 \n245 245 244 244 241 242 240 242 239 239 238 237 244 244 238 238 \n243 245 248 249 249 247 220 172 174 124 204 249 247 240 216 168 \n189 130 184 164 202 224 242 245 237 239 242 229 184 158 153 163 \n189 214 234 238 243 244 247 242 234 236 249 249 249 249 243 244 \n243 240 241 243 246 247 244 242 241 240 243 241 246 243 242 240 \n241 241 242 240 242 239 240 238 240 241 173 176 179 136 190 130 \n104  95 117 152 238 205 179 190 154 115 188 116  90 126 158 238 \n236 239 236 236 238 230 211 230 237 242 235 235 233 236 243 238 \n237 241 245 246 249 242 241 243 242 242 242 237 231 159 151 135 \n130 216 238 233 237 213 209 233 149 134 115 138 198 196 148 151 \n149 147 145 145 144 145 145 171 175 184 180 153 129 125 117 110 \n109 107 108 103 105 108 113 122 135 140 151 161 164 168 161 159 \n149 152 152 146 150 150 153 153 156 156 158 157 160 166 167 169 \n156 157 161 159 145 145 137 137 140 139 142 142 142 141 141 143 \n141 140 145 143 147 147 146 148 152 157 175 189 209 227 236 237 \n241 239 240 235 139 176 184 146 148 194 245 246 245 246 248 246 \n147 139 171 176 184 132 153 144 136 138 147 150 147 150 150 148 \n152 164 185 218 246 249 245 246 253 247 245 250 251 248 251 252 \n250 250 250 248 238 212 168 149 149 148 144 142 137 139 141 140 \n135 137 139 136 134 135 135 131 133 131 131 132 132 133 133 136 \n138 136 134 136 132 133 128 127 127 130 126 130 132 136 167 207 \n122 117 124 128 128 128 133 134 173 194 121 122 121 125 121 121 \n123 122 120 158 126 120 168 165 147 122 165 123 113 194 146 134 \n126 122 124 125 124 125 125 127 129 126 124 130 132 130 132 127 \n130 130 134 137 137 139 142 144 160 202 244 249 250 249 249 250 \n247 249 252 250 248 243 232 205 173 151 155 180 183 168 134 130 \n127 124 122 117 121 148 192 129  94 118 115 111 130 184 134  98 \n 96  92  97 104 103 104 107 108 105 107 110 110 107 114 111 112 \n116 117 119 116 114 116 118 118 120 117 121 119 151 178 192 140 \n139 130 125 128 130 125 109 125 169 189 107 130  85  87  76  83 \n 68  63  73  83  64  74 111 131 132 138 137 135 139 138 142 141 \n149 151 150 159 170 181 215 236 236 240 240 234 240 242 240 246 \n244 244 250 249 249 246 247 244 243 242 242 242 240 240 242 245 \n245 244 246 247 244 245 211 169 167 122 214 243 214 195 162 169 \n185 130 207 235 242 241 240 240 231 212 158 142 153 173 207 236 \n240 244 241 242 245 246 242 239 238 242 239 243 244 247 243 243 \n247 241 244 242 239 242 241 240 241 243 242 241 242 243 242 243 \n242 242 239 237 243 233 231 215 236 235 167 177 183 135 201 132 \n109  99 110 135 239 200 180 192 143 123 184 128  82 136 145 225 \n235 243 238 240 244 241 235 236 237 234 236 237 234 237 240 242 \n245 244 247 247 247 247 246 246 243 244 238 236 226 151 159 137 \n148 227 240 242 238 233 234 231 144 137 121 146 204 212 196 171 \n160 156 153 151 149 148 143 176 184 184 198 176 146 148 142 141 \n143 145 145 140 135 134 131 126 120 113 107 105 102 106 113 118 \n124 135 138 147 156 158 159 161 159 146 138 148 154 154 144 135 \n121 115 109 108 117 131 141 144 142 140 142 143 147 142 146 147 \n146 145 146 148 156 163 173 189 215 231 239 245 242 236 244 242 \n240 237 237 244 178 187 171 146 133 191 234 241 244 243 247 243 \n147 143 164 170 187 151 138 154 149 147 154 152 150 152 158 175 \n209 227 236 248 250 249 251 245 249 252 247 249 251 250 252 252 \n252 249 251 231 172 147 141 144 146 143 141 142 143 144 148 142 \n140 136 139 138 141 140 137 137 137 137 142 141 136 136 136 139 \n138 136 133 132 129 127 127 125 129 131 130 129 130 140 172 209 \n114 116 128 128 126 128 128 137 175 190 118 120 122 124 125 124 \n125 125 118 139 158 103 169 156 161 124 145 155  96 181 159 134 \n127 123 125 127 127 125 125 124 123 122 127 126 131 133 135 136 \n137 135 137 139 143 142 142 165 222 246 249 247 248 250 251 247 \n245 248 249 238 206 187 169 170 188 209 222 216 173 142 132 129 \n124 121 120 116 121 150 188 122  94 113 104  94 139 191 128  95 \n 90  88  98 101  99 106 128 116 107 108 108 105 107 111 112 113 \n117 114 115 116 114 115 117 117 118 119 122 116 156 183 189 141 \n135 124 118 119 132 119 108 137 167 183 102 128  76  95 111 111 \n103 102 105 106  65  71 101 124 131 132 135 131 138 138 137 136 \n136 137 143 138 141 145 152 167 188 223 222 238 246 248 244 242 \n241 243 249 246 249 246 246 239 239 240 241 245 247 248 244 239 \n245 245 245 239 244 245 201 171 159 124 200 188 145 138 149 174 \n177 133 214 240 245 242 235 207 164 149 151 184 213 234 242 244 \n236 238 242 246 247 245 239 237 246 236 239 242 240 243 244 240 \n245 247 243 240 244 246 247 245 246 247 244 245 244 244 247 249 \n235 229 242 238 243 239 243 236 236 232 168 180 178 137 209 160 \n108  99 109 124 226 191 181 195 131 136 183 144  80 119 134 214 \n237 243 235 239 244 240 239 238 240 237 225 228 237 238 242 246 \n246 245 247 244 240 244 246 243 237 240 238 236 216 144 173 137 \n165 233 239 238 229 243 241 231 142 142 128 154 207 215 242 234 \n218 207 190 175 162 156 151 174 189 182 200 185 153 154 150 149 \n153 153 150 147 144 145 145 145 143 141 142 143 136 137 135 131 \n125 122 115 114 114 114 118 140 147 134 121 108 122 114 102  98 \n 99 106 120 133 143 148 146 144 146 145 145 145 149 148 147 150 \n148 148 159 176 201 222 232 236 242 243 241 241 241 243 247 242 \n239 237 238 241 185 174 169 145 120 170 228 246 242 243 247 245 \n156 150 153 170 175 173 123 154 146 147 161 169 185 210 236 246 \n250 254 250 253 252 251 247 249 248 250 249 251 251 253 250 245 \n233 209 177 146 141 141 140 140 137 137 136 137 137 145 140 141 \n145 145 142 146 140 139 136 137 137 139 141 137 134 132 132 134 \n137 136 135 133 129 128 131 132 133 132 129 128 131 139 173 207 \n105 118 130 127 127 126 127 137 180 186 121 120 124 128 126 124 \n124 122 120 117 176 111 149 154 159 136 136 174  97 159 177 134 \n133 131 130 131 129 129 128 126 128 129 130 128 132 135 136 134 \n134 135 141 141 147 151 193 235 252 249 250 250 249 252 250 243 \n235 223 190 161 167 193 218 238 244 240 193 139 125 131 131 130 \n127 122 124 124 123 147 181 117  92 113 108 101 143 187 125  90 \n 97  95  91  93  96  95  98 103 104 106 108 108 107  98 106 116 \n115 115 112 114 114 114 114 115 111 109 110 113 159 186 184 143 \n149 131 129 123 127 136 122 135 178 184 101 127  85 113 139 122 \n119 118 120 123  78  67  82 110 127 126 132 131 133 135 133 132 \n130 135 136 136 140 142 142 143 137 139 149 180 241 250 245 246 \n240 238 246 243 235 223 231 236 241 241 241 243 239 235 246 247 \n246 244 240 237 243 237 193 173 157 130 175 140 171 196 181 177 \n165 136 230 243 221 189 140 147 170 189 228 244 245 242 241 241 \n237 237 236 242 246 244 241 241 245 244 239 243 237 245 245 243 \n239 235 238 241 247 247 248 251 248 247 230 237 245 244 246 247 \n239 236 240 240 242 242 241 235 232 219 167 181 166 140 215 197 \n108 110 105 115 210 186 183 198 118 150 177 136  83 101 137 194 \n237 238 238 240 240 240 241 242 244 233 240 236 231 234 240 244 \n238 238 246 243 236 233 236 241 241 238 233 235 211 145 178 130 \n184 242 237 228 229 230 239 230 141 146 130 156 212 214 248 247 \n245 242 238 236 231 218 207 201 189 181 204 199 159 159 155 154 \n151 147 148 151 151 152 158 156 150 149 145 145 148 152 151 145 \n146 149 153 151 150 151 152 154 155 150 145 149 139 149 144 146 \n146 149 149 148 150 154 151 149 153 149 148 150 151 155 157 166 \n187 207 229 241 243 246 241 242 248 247 246 244 242 245 245 245 \n244 245 237 243 195 169 158 144 118 149 217 248 243 243 244 247 \n163 155 152 175 167 181 129 140 182 196 212 230 243 247 251 248 \n249 253 253 254 252 249 247 250 246 248 249 252 252 253 251 226 \n178 152 144 141 139 137 143 138 139 138 136 138 139 142 141 146 \n144 146 140 140 139 138 142 143 140 139 138 134 133 133 133 133 \n133 132 134 135 126 131 133 136 136 133 130 127 132 142 177 202 \n103 121 133 130 130 130 131 138 184 178 128 126 122 122 123 123 \n120 117 121 121 163 139 129 167 145 144 126 169 122 132 195 137 \n134 132 131 134 130 129 128 127 129 130 130 129 134 133 130 126 \n128 135 141 144 142 163 237 252 248 247 251 252 250 244 216 191 \n169 164 175 200 231 244 244 248 222 176 134 128 132 130 131 126 \n127 125 123 123 116 139 175 103  95 113 117 113 132 162 120  99 \n112 109 104 110 112 107 107 109 102 102  96  92  96  96 101 107 \n113 115 112 111 109 113 112 115 109 113 115 115 159 188 174 133 \n129 181 157 129 119 114 128 146 179 178 105 125 113 147 144 127 \n124 123 127 129 101  64  74 105 128 127 129 131 132 131 129 129 \n131 133 133 133 134 136 138 137 134 132 134 136 202 243 247 245 \n244 243 244 244 238 227 233 243 242 240 239 242 242 244 248 246 \n246 241 240 240 236 222 174 179 157 135 197 208 232 242 185 182 \n155 142 193 172 142 143 168 203 231 236 237 243 244 240 241 241 \n240 240 240 245 244 242 239 245 243 243 244 246 238 246 246 247 \n241 239 247 248 243 242 239 241 247 246 241 240 246 244 245 245 \n244 241 241 239 244 239 239 241 240 214 171 185 162 144 222 220 \n111 114 104 115 192 186 183 198 111 155 199 140  82  96 150 182 \n243 243 236 237 242 241 242 238 242 239 242 238 235 237 238 243 \n241 242 243 240 243 241 241 240 238 242 236 236 198 153 175 123 \n198 245 228 234 235 233 235 224 142 150 127 162 210 211 239 242 \n246 243 239 241 242 242 243 240 184 162 208 205 207 205 201 194 \n185 179 171 169 163 162 164 162 156 155 153 152 156 157 157 154 \n148 149 156 156 157 161 160 153 148 148 149 150 149 152 148 148 \n150 154 153 153 154 151 152 153 155 156 156 164 175 192 210 223 \n235 239 240 240 242 244 240 242 244 244 244 244 242 243 246 246 \n247 246 240 247 201 164 139 146 116 142 205 247 243 242 245 249 \n159 162 168 185 173 181 156 124 226 252 250 249 243 245 244 249 \n249 250 251 251 252 251 252 252 251 249 248 250 248 238 181 149 \n144 147 147 141 136 135 145 140 142 142 140 139 139 141 141 141 \n141 138 138 137 137 140 140 142 136 136 137 132 138 138 135 140 \n134 130 133 135 130 135 134 136 131 129 132 132 130 143 185 195 \n102 126 134 135 133 133 134 142 189 169 129 127 121 119 118 121 \n119 120 118 123 141 173 113 181 134 153 131 150 160 112 192 147 \n135 131 133 132 130 130 132 131 131 130 134 132 128 127 124 125 \n135 138 148 158 150 137 171 210 236 232 212 199 186 169 172 186 \n208 225 245 248 245 247 241 213 149 133 127 128 129 129 132 126 \n125 122 117 114 105 109 115  79  94 112 115 107 147 130 107  97 \n111 112 116 118 117 119 120 119 116 119 118 121 121 120 114 113 \n121 125 116 115 107 105 106  99  99 110 114 115 166 192 153 122 \n129 133 147 137 104 110 129 151 184 170 100 120 107 163 144 130 \n124 124 124 125 125  70  68  93 121 126 129 130 129 128 129 129 \n130 128 128 129 130 127 129 128 127 130 138 140 168 231 245 247 \n248 249 246 243 244 246 245 248 244 238 239 243 243 245 241 243 \n243 238 236 220 179 141 151 188 153 130 210 213 198 206 170 186 \n147 129 125 123 138 201 228 229 235 230 233 234 232 237 236 233 \n235 242 237 241 241 233 238 242 234 242 243 246 244 248 244 239 \n237 242 247 243 242 241 238 240 244 243 243 245 244 231 229 239 \n243 241 242 239 235 241 242 240 243 197 174 186 152 152 226 230 \n115 113 102 115 167 183 183 195 105 162 217 151  82  85 152 158 \n228 241 242 241 241 239 236 238 241 238 242 238 235 237 238 238 \n241 244 242 246 246 245 243 238 238 239 241 241 181 161 174 126 \n210 235 228 239 245 237 239 212 144 158 125 172 161 162 230 245 \n245 244 247 243 243 245 243 244 182 133 206 204 239 244 243 246 \n244 242 239 238 234 231 226 223 218 212 200 193 190 186 181 179 \n176 173 171 174 169 168 158 157 157 156 157 160 158 161 159 161 \n163 163 170 172 174 177 182 189 199 213 224 232 239 242 244 239 \n242 244 242 237 243 241 246 250 244 246 244 244 244 247 246 246 \n241 243 245 247 199 139 153 168 124 143 192 245 242 240 246 246 \n167 226 237 240 189 175 181 125 188 250 242 243 243 246 247 251 \n250 253 254 253 252 251 246 249 248 238 220 224 189 175 151 149 \n144 140 143 136 127 133 142 145 145 145 140 138 138 140 141 146 \n145 144 141 141 140 139 140 141 140 139 137 129 134 136 136 140 \n137 135 136 135 135 142 138 136 130 130 134 138 139 146 188 184 \n104 129 137 137 132 131 127 143 192 160 132 127 126 125 122 120 \n117 121 127 128 131 178 123 166 147 147 141 136 178 114 180 159 \n137 139 133 131 128 128 133 133 134 129 133 131 130 132 132 132 \n134 153 207 225 204 185 179 165 166 163 154 147 150 170 198 212 \n209 209 203 200 208 209 175 151 138 134 127 127 130 131 132 131 \n127 125 119 117 102 109  75  53  89 114 122  95 117 110  92  90 \n108 111 116 114 116 118 120 119 123 125 124 124 126 129 131 130 \n133 130 122 122 123 121 119 117 117 122 122 122 167 192 137 121 \n139 141 151 146  91 109 125 152 189 161 106 118  94 166 140 134 \n120 121 118 119 134  76  71  87 113 130 127 128 127 131 131 132 \n130 134 130 130 130 127 128 129 127 130 137 141 193 232 239 243 \n243 245 247 244 240 239 243 243 241 238 240 239 243 246 242 245 \n241 228 186 143 125 125 154 188 147 123 132 126 123 130 153 192 \n139 122 119 119 127 145 151 152 156 151 159 163 170 183 184 200 \n222 234 243 245 240 234 245 241 241 242 245 249 245 240 241 240 \n240 243 245 241 239 237 244 245 242 242 238 237 242 245 245 248 \n242 240 241 237 234 233 242 241 239 188 176 190 145 161 229 235 \n126 112  94 115 147 180 183 192 104 170 230 163  89  82 147 152 \n236 246 233 227 224 230 240 244 237 242 245 239 246 242 236 238 \n240 239 240 244 244 244 244 245 240 239 238 238 181 168 170 127 \n217 225 235 236 235 236 244 206 150 159 127 177  92 141 240 244 \n246 244 245 246 248 247 242 243 178 114 191 198 241 243 245 247 \n242 243 245 243 243 245 245 243 245 240 241 240 238 241 233 234 \n234 231 227 224 222 224 221 216 211 217 216 217 213 215 212 219 \n224 224 228 230 231 231 234 238 238 240 241 239 241 244 241 239 \n245 246 241 240 241 242 243 245 242 246 245 247 243 245 243 246 \n240 245 245 246 188 127 181 177 122 149 188 243 243 243 246 244 \n147 238 248 248 225 172 197 142 143 232 243 238 246 251 249 249 \n247 249 253 254 248 249 250 246 221 187 156 150 149 153 151 149 \n146 144 145 138 142 141 152 153 149 145 143 143 143 142 144 145 \n144 139 140 140 141 146 143 140 141 143 138 136 135 135 136 139 \n139 138 136 137 140 137 133 127 124 124 130 136 138 150 191 173 \n105 133 136 131 125 126 126 143 197 150 134 125 120 122 123 122 \n126 129 133 131 128 160 161 139 175 136 153 135 167 136 163 172 \n142 138 128 131 127 125 129 132 134 133 128 127 130 132 136 139 \n149 198 208 191 186 177 174 174 179 189 190 190 190 189 188 190 \n191 182 170 148 135 129 132 133 134 134 129 129 130 125 125 125 \n124 122 109 101 104  88  66  76 105 113 109 112  97  66  55  93 \n114 120 122 118 124 127 127 128 126 127 127 127 126 129 129 130 \n128 127 120 119 120 125 125 122 124 130 127 132 170 194 124 119 \n127 138 151 180  93 107 126 158 187 149 108 127  94 157 143 136 \n116 119 121 121 137  98  67  75 106 123 124 127 125 126 128 129 \n132 133 131 132 128 127 129 131 131 137 140 184 237 237 241 240 \n237 239 237 231 222 231 243 243 241 239 240 242 242 239 235 211 \n165 143 133 130 125 127 155 187 134 112 115 116 113 118 157 191 \n130 117 119 122 124 133 128 126 119 121 117 121 122 115 120 125 \n134 141 152 158 166 184 202 190 192 213 222 222 221 231 233 235 \n242 231 242 243 238 240 243 241 240 237 240 242 242 244 241 240 \n238 230 219 231 238 243 241 239 234 183 176 188 141 174 217 233 \n147 112  87 105 137 180 185 184 109 186 237 174 103  87 125 144 \n223 233 238 238 237 236 235 236 240 238 242 244 234 241 240 240 \n242 241 238 237 244 242 241 236 237 240 237 238 179 189 171 132 \n222 227 232 231 235 239 228 186 159 157 131 184 184 225 244 245 \n245 242 247 247 244 242 237 235 135  87 116 127 210 245 242 245 \n241 242 249 247 242 241 244 243 247 244 243 243 242 243 238 242 \n242 243 244 243 242 244 243 243 246 247 242 243 246 246 246 245 \n246 245 243 240 244 244 243 246 242 241 240 242 239 242 244 239 \n244 241 241 238 236 239 243 243 244 247 245 244 241 246 245 244 \n245 241 243 248 177 133 184 163 123 159 187 242 241 243 242 241 \n119 210 247 249 244 188 181 164 121 199 246 242 248 249 250 250 \n251 252 253 251 251 243 205 186 164 155 160 158 153 150 151 151 \n152 154 153 147 155 150 145 145 146 146 143 145 143 143 145 145 \n139 139 141 141 146 148 148 144 144 145 140 138 136 139 140 140 \n142 138 137 137 138 133 127 124 127 129 133 137 138 153 197 165 \n110 132 129 130 124 122 123 145 199 141 138 127 128 127 128 129 \n131 134 137 135 136 147 181 135 186 140 155 142 153 160 152 190 \n146 145 128 130 131 127 132 138 141 142 138 136 137 137 149 165 \n178 196 211 213 221 225 230 237 243 244 241 238 242 243 243 244 \n244 213 164 140 135 134 132 133 133 132 126 128 128 130 128 124 \n123 122 115  96  85  85 102 108 109 105  91  80  68  75  94 112 \n122 126 128 124 129 130 129 128 124 123 126 129 132 135 132 132 \n126 126 122 124 126 130 129 127 125 129 125 136 175 193 120 116 \n122 131 161 188  88 107 127 161 188 144 113 149 109 142 156 136 \n112 111 116 120 134 117  64  70 101 120 127 129 128 126 125 127 \n131 131 129 129 127 126 127 130 132 136 170 222 236 235 236 239 \n238 232 241 238 233 233 244 240 243 240 244 238 225 198 160 134 \n126 128 128 124 122 126 153 187 130 109 115 115 115 121 161 186 \n123 111 123 122 122 127 120 116 113 114 115 118 123 122 123 125 \n126 126 129 130 130 135 138 132 134 140 143 144 151 153 157 170 \n181 177 199 192 189 204 209 223 236 238 234 239 238 236 234 237 \n236 231 234 236 244 246 237 234 231 179 174 188 136 181 219 241 \n159 111  88  97 134 184 186 172 114 194 242 192 103  90 111 142 \n201 233 237 237 238 243 237 238 240 233 244 245 243 244 244 236 \n237 242 240 240 244 242 236 231 236 240 243 238 179 199 162 139 \n225 231 234 231 226 198 156 156 173 157 132 205 247 247 244 244 \n243 244 248 247 241 234 209 167 101  77  87 128 226 244 243 243 \n241 241 247 246 244 244 247 243 251 250 239 245 246 245 245 242 \n241 240 241 241 242 243 243 244 244 244 242 243 244 244 244 244 \n244 244 245 243 244 244 244 244 243 244 243 244 242 241 241 244 \n244 240 239 242 243 243 244 246 245 245 246 247 245 246 241 243 \n244 243 243 246 171 143 192 158 125 164 189 246 241 243 242 244 \n101 159 249 252 250 220 164 179 119 147 250 252 251 252 248 252 \n250 252 251 241 211 169 140 144 148 146 159 161 151 151 150 150 \n149 148 150 147 152 147 149 150 143 141 141 145 149 146 145 144 \n145 144 143 143 144 144 142 143 145 146 139 137 135 138 140 138 \n135 133 138 140 133 135 139 140 140 138 140 142 143 150 203 158 \n112 136 134 133 132 127 134 150 197 136 141 126 125 132 132 135 \n132 135 134 135 138 136 181 156 168 162 148 151 140 175 153 196 \n156 151 131 129 128 127 134 141 143 142 145 146 150 170 227 247 \n245 247 249 248 248 245 244 248 243 247 246 247 246 248 246 248 \n233 162 137 138 132 132 131 134 134 132 126 125 129 131 129 128 \n127 125 126 126 121 119 122 121 118 112 104 106 105 114 121 122 \n120 124 130 128 125 124 125 124 122 123 126 129 132 130 127 128 \n125 127 123 124 124 127 132 130 121 118 126 141 180 188 117 121 \n115 134 182 170  99 114 124 165 191 136 118 160 140 111 173 134 \n135 126 124 125 133 134  66  67 103 117 123 126 124 124 128 125 \n125 128 127 126 128 130 128 130 135 176 230 237 235 233 231 234 \n237 234 232 230 238 236 237 237 236 229 211 185 141 132 132 131 \n129 125 121 117 112 119 156 189 123 105 111 118 125 125 158 181 \n114 112 115 115 114 113 111 109 106 108 110 115 119 122 125 121 \n124 126 128 126 128 126 125 125 125 127 126 127 130 126 128 131 \n130 128 125 124 126 128 131 135 144 154 157 179 180 179 191 198 \n208 212 220 224 233 237 235 238 225 176 174 187 134 187 232 241 \n176 116  90  86 138 184 189 157 120 202 241 210 103  93  99 155 \n181 237 229 238 242 243 241 240 236 233 243 244 237 234 235 237 \n233 237 238 239 238 236 235 229 234 239 242 237 189 208 149 157 \n229 229 217 197 148 126 134 154 179 155 133 218 244 245 241 243 \n241 241 242 229 198 160 132 129 145 179 219 236 245 243 243 243 \n242 239 243 244 244 244 245 242 244 243 244 246 242 241 246 243 \n246 242 239 238 244 243 243 244 244 244 244 243 245 244 243 242 \n243 246 247 243 242 241 244 244 243 246 246 244 246 243 247 245 \n242 241 239 240 242 238 245 245 248 244 247 245 245 248 240 244 \n247 246 246 249 146 151 194 153 136 176 194 248 242 248 243 244 \n101 118 229 252 251 245 164 186 130 121 224 253 252 251 252 252 \n248 234 210 177 144 140 155 153 150 150 155 152 151 154 154 151 \n147 142 149 145 145 148 153 149 145 149 143 147 152 148 142 147 \n171 180 153 141 139 144 143 146 149 146 136 135 132 133 135 131 \n133 135 138 141 138 141 146 147 141 139 141 141 143 153 203 151 \n118 141 135 135 138 141 137 153 192 130 140 128 132 137 135 134 \n137 136 139 138 135 135 158 171 157 187 131 149 142 168 164 189 \n171 142 146 134 136 138 142 145 145 144 145 148 185 229 250 247 \n245 248 247 249 249 246 247 250 245 247 246 248 250 247 250 244 \n185 139 137 135 135 132 132 134 134 133 131 129 132 134 129 129 \n128 128 128 129 126 123 121 119 117 116 119 122 123 125 127 125 \n121 123 127 126 125 125 126 124 122 124 127 127 127 128 126 127 \n127 127 127 125 128 128 128 129 122 122 129 145 183 184 114 119 \n103 143 159 141 120 121 129 169 191 127 124 148 168  97 180 132 \n140 126 126 129 131 141  75  67 102 119 125 127 126 125 122 117 \n114 122 120 120 126 129 128 133 161 219 239 242 236 241 238 239 \n242 239 235 237 235 239 237 233 199 156 142 134 137 132 128 132 \n129 128 124 120 113 116 161 184 118  98 113 117 121 126 154 173 \n111 104 110 110 111 114 108 106 106 106 108 114 118 121 123 121 \n121 124 127 126 127 125 125 126 125 125 124 121 121 122 129 130 \n132 130 128 128 129 130 131 133 132 128 127 127 129 133 132 136 \n144 144 145 153 164 174 179 194 194 172 177 182 130 191 238 243 \n195 119  93  74 139 181 191 149 127 206 244 225 108  98  92 163 \n169 234 235 237 240 240 232 231 236 236 237 239 239 233 239 239 \n232 233 233 231 224 231 232 231 235 237 240 231 202 212 144 173 \n231 205 150 130 128 143 189 169 183 153 141 225 245 246 241 245 \n242 231 194 159 140 140 161 193 226 243 241 240 242 246 241 243 \n242 241 245 244 243 243 243 242 244 248 247 244 246 240 244 246 \n242 244 243 242 244 242 242 245 246 246 247 246 245 245 244 243 \n241 247 248 247 246 244 245 246 244 245 245 243 244 243 243 243 \n246 244 239 237 242 241 242 244 247 250 246 245 243 248 241 244 \n244 245 245 240 133 151 187 144 138 186 196 245 240 243 243 243 \n110 107 185 250 253 250 189 179 156 111 165 243 248 249 236 225 \n177 149 143 150 148 152 149 150 154 153 153 152 156 155 157 150 \n147 147 150 153 151 154 151 148 145 148 145 142 146 148 159 177 \n162 140 139 142 143 141 143 145 140 141 138 135 132 140 146 147 \n147 141 143 144 150 147 142 142 139 140 137 137 143 159 203 145 \n122 144 132 132 135 140 136 159 187 126 141 134 137 137 137 135 \n136 138 135 140 136 135 139 183 145 190 142 138 144 147 177 179 \n188 137 157 141 137 144 147 146 144 147 167 209 244 250 251 248 \n248 248 241 245 245 244 249 247 247 246 247 247 242 235 205 163 \n133 134 134 135 131 132 131 131 132 134 132 128 129 131 130 127 \n126 126 130 130 129 129 124 122 121 125 129 131 131 132 128 126 \n125 127 125 126 128 129 131 131 130 129 128 124 124 125 127 126 \n120 125 126 127 124 122 125 127 128 128 133 147 187 174 117 124 \n118 123 123 123 124 122 135 171 184 121 125 124 183 101 170 136 \n136 131 125 126 126 142  95  68 100 118 127 128 125 127 128 119 \n120 128 129 130 132 139 146 174 226 239 235 234 234 234 235 231 \n234 241 235 230 235 235 224 178 131 135 157 163 133 127 128 129 \n125 125 127 127 119 121 165 179 112  98 110 113 114 121 164 167 \n104 101 107 112 111 113 110 110 107 107 109 113 117 117 119 121 \n123 127 128 124 124 123 121 122 125 123 117 116 121 124 126 125 \n123 121 119 119 128 130 129 130 130 126 126 133 133 129 130 133 \n132 132 134 136 138 136 133 132 146 171 179 176 133 187 163 165 \n147 117  98  66 146 183 191 135 134 200 231 221 115 116  82 153 \n167 235 237 228 230 237 238 236 234 233 239 240 232 228 228 227 \n221 230 218 216 220 231 232 235 237 236 244 224 223 209 137 183 \n156 129 133 147 186 225 233 171 185 149 147 229 239 240 240 219 \n184 148 140 154 185 214 234 240 240 244 243 242 243 243 241 239 \n241 241 243 240 241 243 242 244 243 246 247 243 246 242 241 248 \n247 244 243 246 242 242 244 243 244 246 245 243 239 244 243 243 \n241 241 241 241 244 244 244 247 246 245 245 247 246 247 246 244 \n243 242 247 242 247 243 240 243 245 244 247 248 243 249 247 245 \n247 246 245 231 126 154 186 133 145 189 193 243 242 240 237 241 \n163 158 175 224 233 228 202 168 169 115 137 230 253 244 192 165 \n143 143 149 150 149 149 150 149 151 145 151 150 151 155 153 151 \n148 149 151 148 146 145 149 149 147 153 152 148 146 149 149 148 \n144 147 148 145 149 144 144 147 141 138 140 142 144 147 152 154 \n148 145 145 144 149 146 140 136 137 138 131 130 143 164 201 138 \n126 143 131 137 135 138 140 164 177 129 140 140 141 140 139 141 \n141 141 139 143 141 137 139 173 159 174 166 132 147 130 180 174 \n191 149 150 148 146 153 154 150 162 189 233 248 250 248 251 250 \n248 248 241 246 251 250 249 249 245 243 243 238 225 181 143 139 \n137 138 138 138 134 134 133 133 132 133 131 130 130 129 126 126 \n129 128 127 128 129 129 127 127 125 124 124 125 132 135 136 133 \n128 129 130 129 129 132 134 136 135 134 134 129 126 126 127 128 \n127 124 128 128 127 123 124 129 130 130 129 152 195 164 116 126 \n125 123 123 122 123 127 142 176 182 120 124 118 183 121 152 157 \n129 133 122 125 124 136 115  72  97 116 126 129 126 128 128 128 \n128 131 132 135 137 143 183 234 247 244 244 246 247 247 245 239 \n236 243 243 235 213 204 161 142 156 171 201 154 125 126 125 122 \n119 117 117 119 112 123 171 180 111  96 107 103 100 115 167 163 \n101  97 100 103  97 107 110 109 106 108 112 113 113 115 115 118 \n123 124 123 120 122 123 120 121 122 121 117 121 124 124 120 119 \n120 122 118 120 128 131 133 136 135 131 127 135 129 123 124 124 \n129 130 132 132 137 133 131 132 145 172 182 167 140 181 128 125 \n118 118 100  68 148 180 192 126 147 162 136 119  94 135  74 135 \n168 223 233 233 236 240 240 240 234 225 230 240 226 230 233 235 \n234 234 230 232 236 234 233 237 241 240 244 214 223 204 134 181 \n124 136 178 217 235 239 232 167 182 151 155 230 234 213 171 148 \n143 154 191 219 242 241 239 239 239 243 246 247 244 243 238 239 \n243 244 244 240 239 242 241 249 250 243 241 244 244 243 240 244 \n243 243 243 244 241 241 244 242 240 246 244 245 241 241 241 243 \n240 239 239 238 244 242 239 244 249 249 247 245 244 245 246 244 \n244 242 244 248 246 244 245 246 244 244 245 244 245 245 244 243 \n246 246 247 226 133 162 183 123 153 185 195 242 238 238 236 242 \n156 163 173 176 180 186 186 188 188 186 178 192 200 188 174 173 \n166 162 158 153 149 152 152 148 146 150 149 141 146 148 150 149 \n153 149 151 147 147 148 148 150 145 143 146 151 154 152 149 148 \n145 147 149 147 144 145 139 144 139 136 145 143 144 150 147 147 \n147 146 150 147 146 141 134 131 130 129 133 139 150 166 201 130 \n132 144 144 144 143 144 140 169 169 133 138 145 141 139 142 142 \n135 138 143 148 145 143 140 150 181 155 188 131 140 125 165 169 \n189 175 136 155 153 158 173 197 237 251 250 252 252 250 247 248 \n249 248 251 250 249 246 247 247 250 244 235 203 147 140 144 143 \n138 137 134 134 136 134 132 132 134 134 131 129 130 130 132 130 \n130 129 124 131 128 126 128 131 131 129 126 126 129 134 133 131 \n131 131 128 131 125 128 132 133 131 130 134 132 127 130 127 127 \n128 128 124 125 127 127 122 122 128 127 130 158 198 147 119 129 \n124 122 123 122 126 125 149 180 183 121 123 115 168 153 124 181 \n121 135 125 127 125 127 136  80  89 110 122 125 125 128 128 130 \n134 136 131 133 143 189 244 248 245 248 249 247 246 244 246 245 \n240 235 204 170 149 163 192 216 232 200 139 124 128 125 116 112 \n110 106 107 111 110 125 174 177 106  94 101 100  99 118 173 151 \n 97  94 100  99  97 101 102 102 106 108 110 110 110 114 112 115 \n116 116 114 114 119 121 114 115 113 112 115 118 121 117 108 113 \n119 123 121 121 122 123 127 129 132 130 133 133 127 129 123 126 \n129 128 126 130 134 128 129 129 144 172 183 159 148 164 125 117 \n117 116 111  73 160 182 189 120 155 123  89  78  75 151  77 110 \n172 203 235 238 238 237 239 238 238 240 243 244 238 234 231 234 \n237 242 239 236 234 236 241 240 239 241 240 199 219 200 129 177 \n180 220 239 235 238 240 227 163 186 141 166 188 148 132 148 171 \n210 229 241 239 237 240 237 234 240 238 243 244 244 243 243 240 \n244 244 245 240 242 244 244 244 248 247 242 243 246 243 241 240 \n241 244 242 242 241 240 240 244 240 241 238 238 239 238 239 239 \n239 237 237 238 236 237 239 243 244 246 245 243 243 241 243 240 \n242 239 244 244 243 243 241 242 245 245 241 244 246 243 244 242 \n243 244 247 213 152 167 181 112 167 179 194 241 240 238 237 242 \n 97  97 100 102 105 113 119 130 146 154 166 175 184 184 189 189 \n191 191 188 186 183 180 176 173 168 167 158 153 154 151 148 149 \n153 156 155 145 145 144 149 149 137 138 144 147 149 152 148 149 \n149 149 146 145 139 145 151 145 140 139 144 150 154 156 153 154 \n147 151 156 148 133 134 132 131 135 141 140 146 150 168 199 127 \n136 149 147 145 144 147 144 169 161 131 137 144 134 133 141 145 \n142 142 151 151 147 146 145 139 185 151 185 149 135 139 158 170 \n185 186 131 157 187 211 235 246 250 249 250 250 253 252 250 249 \n249 249 248 249 248 251 249 248 247 226 177 149 141 139 143 145 \n139 141 140 139 140 137 131 130 132 135 133 132 133 134 133 130 \n129 127 132 127 128 127 133 133 133 128 129 131 131 133 137 136 \n136 138 130 130 126 125 125 126 129 128 127 127 128 127 125 126 \n167 145 122 122 124 125 123 121 124 125 129 162 196 138 120 130 \n126 125 123 120 119 121 153 182 179 118 121 117 150 175 114 187 \n129 136 123 127 123 125 146  93  84 109 119 127 125 127 130 132 \n136 136 135 134 173 231 247 248 245 245 248 242 246 244 242 227 \n184 167 156 168 209 232 246 237 182 145 134 130 129 127 124 122 \n118 115 117 117 113 124 164 162 105  94  95  95  95 120 178 147 \n 98  91  99 100 101  99 100 101  96 102 110 110 112 113 112 117 \n114 111 109 112 117 117 111 112 114 114 116 118 120 117 113 114 \n121 120 119 115 116 118 119 122 127 123 126 127 126 125 114 128 \n128 125 124 125 128 125 127 126 145 171 183 151 155 154 120 123 \n125 118 117  88 164 183 188 113 164 112  84  79  70 161  84  94 \n179 191 237 234 236 238 238 236 238 237 243 243 243 236 235 235 \n231 236 238 235 232 234 239 239 237 241 232 187 218 189 125 190 \n230 235 237 235 239 240 221 162 194 146 169 143 140 170 210 234 \n242 239 239 242 240 240 241 236 233 233 238 240 242 242 243 241 \n244 244 242 241 240 243 244 246 244 241 239 237 244 243 241 240 \n243 242 240 241 241 242 243 240 243 240 240 237 237 240 240 240 \n239 238 238 236 237 240 238 240 242 245 241 241 244 240 246 240 \n240 236 238 238 241 241 243 239 242 243 242 244 243 243 245 244 \n244 242 246 200 171 170 182 107 178 179 191 243 244 242 240 238 \n 57  60  61  61  61  64  65  69  74  80  93  96 100 105 112 111 \n113 119 129 140 149 156 165 171 178 182 187 192 195 193 192 191 \n190 183 176 173 173 171 168 164 165 160 149 148 156 150 149 151 \n148 152 153 156 149 148 158 152 145 143 148 151 154 158 152 162 \n156 150 152 150 143 139 137 138 140 142 144 144 146 176 193 121 \n141 145 147 150 152 149 146 174 150 135 135 142 146 147 145 149 \n149 148 147 145 139 137 142 139 171 169 162 178 128 154 152 178 \n177 189 147 187 251 249 251 249 251 251 246 250 253 250 248 249 \n250 249 250 249 251 250 247 245 207 156 146 145 144 143 142 142 \n140 136 141 140 139 137 140 138 133 135 140 136 140 135 129 126 \n125 125 130 129 133 139 141 140 133 130 132 136 135 135 134 132 \n136 136 135 135 132 130 129 131 129 129 129 120 125 127 128 127 \n127 128 126 127 123 117 110 112 122 125 130 166 195 130 125 132 \n129 126 122 120 121 119 159 188 164 121 114 118 131 185 124 181 \n148 130 124 123 120 125 149 108  80 110 113 123 120 128 131 133 \n129 133 136 139 178 230 240 244 246 247 246 246 232 209 168 148 \n158 190 225 245 250 248 226 172 134 133 129 126 125 126 128 125 \n121 120 119 119 117 121 148 125  91  96 108 110 109 134 173 127 \n 97  95 103 103 103 102 101 102 103 107 105 103 105 108 107 108 \n109 111 109 113 115 113 113 113 115 118 118 116 115 115 114 118 \n119 119 120 118 108 113 122 123 114 116 122 120 117 120 125 128 \n126 123 123 121 121 123 125 125 150 172 187 141 159 143 123 123 \n123 120 126 135 166 183 186 106 167 107  88  82  66 161 100  83 \n170 181 239 238 239 237 232 229 233 239 241 240 228 229 231 234 \n235 231 232 232 234 235 236 233 220 183 170 167 215 176 117 202 \n233 232 233 234 229 224 192 160 198 147 172 184 217 239 241 237 \n234 238 236 237 239 233 231 233 240 240 239 241 244 247 243 242 \n240 240 240 243 242 242 241 242 243 240 242 240 239 241 243 242 \n240 240 242 241 240 242 242 240 244 238 242 243 242 241 241 240 \n242 245 244 243 242 242 244 242 244 243 241 238 245 246 243 239 \n238 238 237 236 245 241 240 237 240 240 239 236 240 236 240 242 \n242 241 245 187 187 173 169 105 185 177 197 248 244 243 242 232 \n 43  42  45  47  48  50  52  54  60  63  66  69  75  85  79  79 \n 79  87  98  97 102 108 107 111 114 115 121 122 135 140 148 158 \n165 174 178 183 189 190 193 193 191 191 192 188 186 184 184 182 \n182 179 176 174 173 172 172 174 167 162 161 156 155 161 154 162 \n158 153 154 153 154 152 141 139 143 141 137 141 154 180 185 123 \n148 154 155 152 152 146 148 179 143 139 138 145 151 151 150 151 \n149 149 151 142 134 139 144 147 158 187 146 184 137 155 189 199 \n171 186 163 168 252 252 252 253 251 247 244 248 253 251 252 253 \n250 250 248 244 252 253 235 189 154 145 147 148 147 144 145 146 \n143 139 140 141 141 141 142 141 136 137 140 138 137 133 130 126 \n128 129 130 135 134 138 143 145 136 134 137 140 137 137 141 136 \n138 136 135 135 133 129 131 135 133 131 131 128 127 130 128 131 \n130 132 133 134 128 111 107 114 122 124 138 168 190 122 128 130 \n125 125 125 122 125 123 163 192 153 127 114 126 130 187 141 167 \n164 128 126 121 125 126 143 125  82 112 125 120 126 126 129 136 \n129 130 147 150 146 161 175 205 214 211 201 186 165 160 175 194 \n226 244 251 251 245 208 149 133 133 130 127 128 126 126 125 127 \n121 122 119 118 120 120 126  96  66  87 105 106 103 102 105  76 \n 72  92 106 109 108 107 111 113 113 115 110 109 110 111 101  99 \n101 103 106 111 115 111 110 111 119 120 118 118 118 119 121 121 \n120 119 120 120 121 124 124 120 112 111 117 117 116 120 123 124 \n125 122 123 121 119 122 125 122 152 174 188 136 159 139 125 125 \n126 121 136 143 167 182 181 103 166 100  92  85  77 155 119  77 \n157 181 222 240 239 239 241 238 231 235 223 232 224 226 222 225 \n231 230 229 231 235 236 225 184 137 113 142 168 215 166 122 205 \n228 213 203 198 182 154 149 163 200 144 177 200 214 222 234 236 \n237 236 239 238 240 240 237 238 237 236 236 241 240 242 245 241 \n241 240 246 246 244 243 240 240 240 240 240 239 240 238 237 237 \n239 241 242 243 242 243 245 244 242 242 239 243 242 241 243 239 \n241 244 243 246 249 248 247 246 246 244 242 242 242 245 237 239 \n245 241 240 243 243 238 239 236 237 238 237 238 242 241 239 240 \n239 239 239 175 193 176 160 109 188 173 198 248 241 237 239 228 \n 35  37  36  39  42  47  56  57  59  61  64  63  63  64  61  60 \n 59  57  58  63  65  64  67  71  80  84  87  92  95  98  94  95 \n 97  92  93 101 111 116 129 135 142 144 152 161 167 172 176 179 \n181 185 192 192 191 193 195 196 197 196 199 201 198 197 194 193 \n193 190 185 181 175 173 165 154 153 158 157 153 157 189 168 127 \n158 157 150 147 145 145 148 181 135 138 143 153 157 157 154 149 \n149 155 147 147 151 154 163 169 178 201 156 172 161 144 241 234 \n169 182 180 145 236 251 251 253 251 250 252 252 251 251 252 250 \n253 254 249 246 232 194 154 154 150 149 152 152 145 141 142 142 \n140 141 143 142 140 144 141 139 139 138 134 136 137 135 135 131 \n131 137 138 130 130 135 145 137 141 138 136 134 132 134 138 138 \n138 133 133 132 134 133 134 135 135 135 133 132 129 132 137 133 \n133 134 133 129 128 129 131 130 127 124 145 177 178 118 131 133 \n129 131 130 126 130 129 166 188 141 127 118 125 124 168 169 153 \n191 124 135 127 129 125 133 146  81 106 135 123 130 131 138 133 \n129 173 231 233 205 183 164 150 142 147 147 150 159 183 198 199 \n204 209 208 195 167 141 138 133 130 131 131 131 127 125 128 129 \n122 121 118 110 105  81  51  42  49  87 105 108  91  47  44  42 \n 50  89 104 107 109 113 114 116 117 119 120 122 122 122 124 127 \n124 121 118 114 115 113 113 113 116 115 118 121 121 118 121 123 \n122 117 117 119 116 115 118 116 117 111 117 118 120 122 124 125 \n125 124 123 124 124 125 124 122 156 172 187 128 155 129 125 125 \n125 135 146 125 166 183 174 105 155 100  96  93 101 150 145  77 \n143 191 223 238 234 234 240 237 229 225 218 225 233 236 231 226 \n225 226 227 228 216 178 128 112 119 176 201 177 209 151 110 136 \n140 138 137 140 143 147 150 168 200 141 168 145 146 152 156 159 \n165 167 171 171 176 183 192 196 211 231 232 241 241 243 245 247 \n249 245 246 242 238 239 238 239 237 239 236 239 240 239 238 236 \n240 240 241 241 242 242 240 242 245 243 246 245 244 239 238 241 \n242 242 240 242 244 245 248 245 244 247 248 244 241 238 237 238 \n239 239 240 244 246 242 238 236 234 233 238 237 241 244 239 238 \n239 238 233 175 186 182 146 124 183 172 195 241 239 231 235 218 \n 35  36  37  39  43  51  57  55  51  53  57  57  59  60  59  59 \n 57  55  59  60  56  50  46  47  47  49  51  52  55  58  62  64 \n 71  73  76  80  85  89  93  99  99 102 105 103 108 113 117 121 \n127 130 140 145 156 168 178 184 190 192 193 193 193 192 191 194 \n196 196 196 196 197 198 199 199 197 198 193 192 188 196 177 151 \n162 157 155 153 150 146 148 178 130 142 148 155 153 157 157 152 \n149 150 151 162 184 201 217 229 238 238 169 157 177 135 220 246 \n181 178 189 146 212 252 253 249 248 250 251 251 250 251 253 253 \n253 251 233 203 171 162 151 152 158 157 154 152 148 147 144 141 \n138 139 143 145 143 143 139 141 145 142 137 138 137 140 134 135 \n137 138 136 131 135 136 140 138 142 139 138 136 133 137 142 142 \n139 133 133 137 139 139 136 134 134 132 135 134 130 132 136 134 \n132 132 134 133 128 129 130 129 128 128 149 184 168 120 131 134 \n131 131 134 130 131 130 169 188 134 130 117 128 126 152 190 158 \n204 133 141 134 129 123 127 154  92 104 138 119 129 132 135 133 \n144 199 200 190 179 171 166 160 165 177 185 187 191 187 177 178 \n188 189 158 143 140 139 136 134 132 130 128 127 131 129 129 129 \n121 116 115 103  92  76  58  58  74  98 110 107  91  55  40  42 \n 62  93 107 112 114 116 120 122 118 119 119 122 123 122 123 123 \n123 123 124 125 123 122 122 122 121 124 128 126 126 126 125 125 \n121 115 117 119 113 118 123 118 118 114 117 118 121 124 124 124 \n123 125 125 125 129 125 124 121 159 173 184 129 129 125 128 130 \n137 150 139 119 168 184 167 107 162 117 115 113 119 145 165  85 \n128 189 218 238 235 240 236 229 235 236 234 232 232 232 235 231 \n232 228 223 198 145 126 116 111 174 165 150 178 204 140 107 109 \n115 118 118 121 121 122 137 170 199 145 150 120 125 119 116 122 \n120 120 118 118 122 126 132 138 146 152 162 173 176 199 228 233 \n233 229 234 235 231 234 238 240 239 241 242 243 240 241 241 243 \n243 242 242 243 241 242 241 241 242 240 242 242 243 237 238 244 \n244 241 241 240 241 244 246 245 243 244 247 241 244 240 239 241 \n243 242 241 240 241 240 241 242 239 238 242 239 240 242 244 240 \n239 241 230 181 179 191 130 140 176 174 193 237 234 229 233 205 \n 38  38  38  40  44  48  53  52  51  52  54  55  55  53  59  60 \n 56  55  57  55  51  45  42  42  39  37  37  38  36  36  38  39 \n 37  36  38  38  42  44  45  48  54  56  65  70  75  79  84  86 \n 91  92 101 103 100  97 100 100 104 114 128 136 146 158 170 178 \n186 192 193 194 195 196 201 203 203 209 210 211 214 220 225 223 \n212 196 175 161 145 142 153 180 127 144 150 151 149 158 169 178 \n196 212 226 240 247 252 250 252 253 252 204 149 185 156 177 244 \n206 175 194 162 168 245 251 252 251 249 251 251 252 252 253 250 \n239 211 169 160 157 157 151 150 154 152 152 151 146 140 142 144 \n142 146 145 149 147 149 147 140 143 144 139 136 137 139 138 137 \n136 136 135 134 136 139 139 136 135 137 138 139 135 137 140 141 \n137 133 134 137 146 143 138 134 135 132 132 133 134 133 135 135 \n131 130 133 132 127 128 130 128 132 130 155 189 153 118 135 135 \n135 136 135 133 131 132 173 184 124 129 118 128 126 129 195 172 \n205 156 133 136 135 130 126 155 112 102 141 121 134 134 135 144 \n160 175 191 198 215 226 233 236 243 248 246 246 251 247 245 247 \n241 190 142 141 135 132 131 131 132 128 126 126 128 131 126 127 \n130 126 117 107  97  90  91  96 104 108 109 104  95  86  80  85 \n100 104 113 116 120 119 123 123 122 121 121 122 121 121 121 120 \n122 123 122 123 121 120 123 121 121 121 124 123 123 127 126 123 \n117 118 120 122 125 129 130 124 123 122 123 120 123 117 113 119 \n121 120 122 123 126 122 119 117 164 174 183 121 121 129 173 162 \n157 140 142 133 168 187 153 114 155 114 120 122 119 126 177  93 \n111 188 206 237 242 243 239 231 240 244 236 233 227 227 222 220 \n220 198 142 122 134 142 128 124 124 116 133 179 202 132 103 112 \n113 116 116 118 118 116 133 179 198 140 137 114 115 114 115 113 \n111 111 113 112 115 116 122 123 125 127 127 126 125 127 130 134 \n138 140 141 140 141 144 157 167 171 175 199 217 224 228 238 241 \n242 242 240 239 239 240 237 237 241 242 242 241 239 239 240 241 \n239 240 240 241 239 239 241 243 245 248 244 246 246 245 241 242 \n243 242 240 238 239 240 242 240 240 242 239 238 241 242 244 242 \n242 243 222 182 172 198 114 158 162 172 196 242 238 233 240 194 \n 35  36  38  39  41  45  47  49  50  51  51  53  57  58  56  58 \n 54  54  54  51  48  47  48  48  43  41  40  41  36  36  36  34 \n 35  36  37  37  37  39  40  39  37  36  37  38  41  42  44  45 \n 47  49  58  63  62  65  76  79  90  93 106 109 115 116 135 132 \n130 135 134 140 146 158 172 185 203 214 215 226 239 246 249 248 \n243 229 219 211 180 159 157 178 127 148 159 175 191 202 225 231 \n246 251 251 249 248 247 246 248 252 251 227 156 177 172 151 231 \n227 175 189 180 142 230 250 251 253 248 249 252 252 252 250 230 \n184 162 158 156 154 153 155 152 151 153 149 148 147 147 144 146 \n150 151 150 150 151 145 149 142 141 142 136 135 141 141 143 142 \n140 142 136 135 138 141 142 140 141 140 137 135 137 140 139 143 \n137 137 134 137 141 140 140 137 133 130 130 134 135 135 137 138 \n136 134 136 134 134 135 133 130 133 131 158 193 143 121 138 139 \n138 139 136 134 132 138 177 179 120 128 125 129 127 126 185 179 \n200 180 125 132 129 128 128 149 132 101 145 128 139 135 163 211 \n229 237 244 247 248 246 250 248 246 246 248 245 247 246 247 244 \n197 147 139 139 137 136 131 129 129 128 130 130 129 131 131 130 \n128 121 117 116 108 112 114 119 115 115 116 111 106 104 103 106 \n112 115 117 119 122 121 123 128 129 123 118 120 121 123 123 121 \n126 125 124 123 123 123 124 124 123 126 127 125 123 124 123 123 \n120 117 121 125 123 122 128 126 125 125 125 122 123 123 123 123 \n126 126 131 128 125 123 117 118 166 176 175 115 132 123 152 178 \n175 115 123 135 172 187 144 121 147 118 121 122 121 125 179 106 \n102 184 200 233 232 235 240 241 241 240 235 230 227 226 216 191 \n149 131 125 135 182 199 152 113 115 113 136 185 196 123 103 109 \n108 111 115 117 117 115 134 185 191 134 124 111 111 108 109 109 \n107 107 113 113 115 117 119 120 120 120 122 122 122 124 124 123 \n123 125 123 124 122 123 122 124 127 130 134 144 148 153 171 184 \n207 217 223 229 229 228 227 233 239 237 242 242 239 241 240 241 \n239 238 241 241 240 237 243 243 243 242 238 246 245 240 241 240 \n243 243 240 241 241 244 243 241 244 242 243 241 242 240 243 243 \n244 247 215 187 172 196 109 171 147 173 194 242 234 236 239 182 \n 38  38  39  40  42  41  43  45  47  48  46  48  52  54  53  52 \n 51  49  49  48  46  48  51  51  50  49  49  47  42  38  39  42 \n 46  45  43  44  42  43  45  45  44  45  45  45  45  44  44  45 \n 45  48  47  47  47  48  45  47  47  47  50  56  65  74  86  91 \n 98 110  99 116 103  97  97 104 109 123 145 163 193 224 246 251 \n253 245 231 217 215 211 186 172 135 147 231 247 249 249 243 244 \n250 250 250 250 247 249 250 249 250 249 244 185 152 179 150 201 \n241 187 178 194 139 197 250 252 247 246 250 249 240 212 173 159 \n158 156 155 150 149 151 152 151 152 153 155 155 152 154 150 151 \n153 152 149 152 149 147 147 144 144 142 143 147 144 145 146 144 \n142 144 141 141 139 139 145 143 148 144 143 138 140 143 140 142 \n138 140 140 139 139 138 138 138 138 135 134 138 138 141 140 137 \n137 136 142 141 138 138 133 134 139 139 161 190 134 125 142 139 \n138 137 136 135 130 140 178 172 116 129 130 137 140 131 169 187 \n184 201 123 135 130 130 134 139 154 103 144 141 138 166 233 247 \n242 248 247 250 252 251 244 245 246 247 250 244 245 246 234 195 \n137 133 136 136 140 137 137 135 138 136 134 133 126 127 129 128 \n126 128 129 127 123 127 128 129 125 121 117 115 115 114 118 117 \n119 119 119 122 123 123 121 124 123 117 118 120 122 123 122 122 \n122 125 126 125 125 125 126 125 126 129 130 132 128 125 126 122 \n124 125 126 126 124 124 125 125 125 128 129 123 123 122 126 126 \n127 127 127 130 133 131 130 122 174 175 161 111 119 117 148 140 \n104 107 117 134 178 195 128 131 139 113 110 118 133 175 176 126 \n 93 171 193 226 226 232 231 229 232 229 231 231 222 192 139 123 \n126 130 123 147 187 140 122 116 117 114 141 194 190 119  99 110 \n108 110 115 116 116 117 142 190 181 136 117 112 109 109 110 110 \n108 108 109 115 117 117 120 120 117 120 121 119 117 120 125 120 \n118 118 118 118 120 124 128 127 125 124 128 130 130 131 132 127 \n130 134 135 137 138 137 142 154 171 185 202 210 221 229 233 237 \n235 239 242 241 240 237 241 242 241 241 242 242 237 236 239 237 \n237 242 238 235 236 239 237 239 238 242 241 238 238 243 239 243 \n242 246 201 182 174 190 108 182 129 178 193 239 232 234 233 164 \n 38  41  42  42  43  43  45  44  43  44  41  41  46  46  48  48 \n 47  45  44  45  45  47  50  49  47  46  47  45  42  39  40  42 \n 45  46  45  45  43  45  46  46  46  48  48  47  46  46  46  48 \n 47  50  50  51  50  50  50  50  51  52  51  51  49  51  49  49 \n 51  56  58  60  62  65  69  72  78  80  88  94 118 141 174 188 \n225 226 230 206 205 201 201 192 165 160 248 249 248 243 244 248 \n252 243 241 251 250 251 252 250 246 250 248 213 142 175 158 169 \n248 206 171 188 153 162 251 248 247 246 246 219 172 158 155 160 \n160 155 146 143 143 146 150 148 152 150 154 155 155 154 148 148 \n151 149 152 153 148 146 145 141 144 147 150 147 143 143 144 145 \n142 143 147 146 142 141 144 143 146 144 146 142 146 146 140 143 \n138 140 141 139 137 139 140 140 141 140 138 141 139 140 140 138 \n139 137 142 142 143 141 139 136 136 144 163 191 125 127 144 140 \n139 140 141 142 136 142 180 166 117 129 132 142 142 139 150 196 \n176 208 138 134 133 131 130 132 160 113 136 146 151 216 246 242 \n243 241 236 242 249 250 243 241 245 241 245 247 244 235 177 144 \n132 128 136 140 141 138 136 139 139 135 133 130 131 129 125 126 \n126 125 128 127 129 127 127 122 119 122 122 118 119 120 121 123 \n123 122 120 120 121 121 122 122 120 117 121 123 122 121 122 122 \n123 123 129 128 126 126 128 129 124 125 126 129 127 127 129 126 \n124 127 126 125 127 128 128 125 122 124 126 127 129 123 123 123 \n123 127 128 130 134 132 128 125 173 178 150 109 117 118 147 144 \n 98 102 115 134 180 200 120 135 132 114 118 118 154 198 176 140 \n 87 154 198 219 225 229 235 232 229 223 220 211 158 132 124 131 \n174 185 145 126 108 108 116 114 113 114 147 192 183 114  97 109 \n109 114 117 117 115 118 142 195 174 131 111 107 106 105 105 110 \n113 114 112 115 115 115 115 117 120 120 117 116 118 119 121 120 \n118 118 115 114 117 118 120 121 121 123 128 127 128 126 126 125 \n125 124 126 128 131 131 131 131 133 134 135 137 143 154 164 171 \n181 195 209 216 226 231 233 238 237 242 245 242 241 238 239 239 \n235 238 238 237 238 237 239 240 237 236 237 240 240 240 244 242 \n242 246 194 179 175 179 115 185 114 176 190 235 230 235 230 166 \n 41  41  43  42  41  41  43  44  42  41  42  41  41  40  41  41 \n 40  41  39  41  42  44  47  47  43  43  43  41  38  37  38  39 \n 41  40  40  38  41  40  41  39  40  41  41  40  42  42  40  40 \n 41  43  44  44  45  43  44  41  42  44  47  47  48  46  45  47 \n 47  45  47  48  46  44  42  44  44  44  48  49  57  63  76  80 \n 82  90 123 140 159 181 180 185 188 176 221 249 250 248 250 252 \n250 248 250 250 250 250 247 249 253 248 250 238 153 153 178 142 \n220 225 168 178 165 129 228 235 227 209 159 140 134 146 158 160 \n160 156 148 149 150 152 156 153 153 155 153 152 149 151 147 141 \n146 143 144 146 147 147 148 145 145 146 141 143 146 146 147 145 \n151 148 142 140 136 138 143 144 138 138 146 140 143 143 130 135 \n141 142 144 142 140 139 141 138 140 142 140 140 144 144 141 140 \n141 142 146 151 153 148 151 151 149 150 165 179 127 129 145 147 \n146 144 144 149 142 145 183 155 124 132 131 133 139 137 147 193 \n177 199 164 129 142 136 134 133 158 130 136 149 163 239 244 242 \n241 238 239 244 246 249 248 245 242 244 246 250 225 173 143 140 \n134 135 132 136 138 136 135 134 130 129 132 135 133 126 124 126 \n124 124 123 122 128 129 123 121 118 122 130 123 122 123 127 129 \n129 128 120 121 120 116 121 121 121 120 125 128 123 120 122 127 \n128 146 162 136 128 128 128 126 127 123 124 126 125 121 125 124 \n127 124 122 122 122 125 123 122 126 124 123 126 130 125 123 121 \n126 132 137 141 144 145 144 138 170 185 137 111 119 120 147 138 \n 87  95 109 135 181 195 112 143 136 134 136 171 239 249 198 159 \n 85 131 199 214 227 226 233 228 223 220 173 130 128 133 155 197 \n234 226 155 107 102 108 110 108 105 106 153 198 176 106  91 102 \n105 108 109 110 108 105 148 198 166 122 105 106 105 103 103 107 \n111 111 114 115 111 112 112 114 119 117 116 115 118 118 115 112 \n115 120 114 114 115 115 116 117 118 120 118 122 120 121 122 121 \n121 120 116 121 124 126 126 128 131 126 124 122 121 124 128 130 \n125 125 127 133 137 141 148 157 165 176 191 198 205 213 220 225 \n232 234 234 240 242 240 241 240 237 239 238 238 240 239 245 240 \n243 245 185 182 179 161 124 178  98 188 211 232 238 243 220 158 \n 40  39  41  42  39  39  41  42  41  39  42  41  37  38  40  40 \n 37  39  38  40  41  39  43  43  41  43  44  40  37  36  35  36 \n 37  36  36  35  36  35  37  33  34  35  35  36  35  34  35  33 \n 37  36  35  35  37  36  36  36  35  36  40  41  41  42  42  42 \n 45  45  46  46  43  42  42  41  41  39  40  41  45  47  50  51 \n 53  57  59  68  85 100 125 159 177 180 179 214 251 251 253 252 \n252 249 251 250 249 251 246 250 253 248 247 249 182 139 182 145 \n190 243 174 169 174 129 197 216 168 137 134 139 146 150 157 158 \n159 156 157 160 151 151 150 146 147 153 145 143 151 151 150 145 \n148 141 143 143 138 138 143 146 148 143 140 143 144 146 147 145 \n143 143 142 144 146 150 144 138 122 121 127 125 117 119 123 131 \n139 138 141 142 143 138 136 137 138 140 143 140 138 141 145 143 \n148 154 159 162 168 174 176 180 184 184 182 179 160 154 154 149 \n147 146 144 154 149 151 184 149 129 131 136 137 140 135 148 183 \n184 192 184 127 150 140 141 139 157 139 140 159 156 234 245 244 \n246 245 245 245 246 247 244 245 246 249 239 222 171 148 142 138 \n137 134 133 134 137 134 130 131 129 130 131 134 133 129 124 127 \n123 125 126 125 128 130 125 126 127 126 123 123 126 129 127 125 \n128 131 125 123 119 116 121 125 126 122 124 128 125 125 126 129 \n127 153 173 138 130 128 130 127 135 164 160 128 123 121 123 121 \n122 124 124 123 120 120 119 123 126 122 122 125 124 123 123 125 \n132 185 211 210 212 214 192 147 172 190 129 115 112 120 144 130 \n 87  96 110 142 186 197 106 150 138 139 159 222 248 249 209 175 \n 87 121 198 217 252 252 249 249 223 184 153 138 151 191 223 222 \n215 171 114  98  91  87  88  93  95 101 159 200 166 101  97 101 \n100  99 102 106 107 107 149 205 156 112 105 107 105 104 103 103 \n106 106 108 111 108 111 111 112 115 113 114 114 118 119 116 113 \n112 115 113 112 114 115 117 118 120 119 117 117 118 115 110 111 \n116 116 114 121 120 116 105 118 126 124 123 125 124 128 128 128 \n125 126 123 123 125 127 125 128 132 132 132 134 140 143 150 151 \n160 168 179 196 220 228 236 237 239 240 241 242 248 244 243 237 \n239 243 178 179 186 151 133 171  91 154 203 235 240 241 216 158 \n 43  44  44  42  41  40  41  40  40  39  39  40  40  41  38  38 \n 39  39  38  38  39  39  39  38  39  40  40  37  37  36  36  33 \n 33  32  32  30  30  29  31  31  31  31  30  29  29  29  30  31 \n 31  30  30  29  29  30  30  30  32  32  33  34  37  40  40  43 \n 42  43  41  40  38  36  35  35  37  36  36  38  41  40  41  40 \n 40  40  40  40  52  62  78  85 112 136 172 164 205 246 251 251 \n251 252 249 250 250 250 251 250 247 247 249 249 221 148 166 164 \n156 235 204 162 187 144 143 149 126 127 129 145 151 155 156 153 \n158 158 153 156 155 156 147 147 152 156 155 150 146 145 150 150 \n148 147 145 146 144 142 144 145 148 143 145 146 144 144 147 145 \n144 143 144 147 149 149 139 129 121 115 116 118 118 127 131 135 \n140 140 140 147 145 141 140 142 139 143 138 138 138 138 131 133 \n136 137 138 140 142 143 149 154 163 168 175 178 180 186 185 184 \n182 178 170 173 163 161 179 149 136 136 146 142 140 136 147 172 \n191 182 203 136 147 148 159 180 193 148 138 161 154 218 247 245 \n247 248 247 246 246 243 241 240 245 237 198 146 137 135 129 130 \n135 134 132 132 131 131 131 129 130 131 136 138 134 133 129 131 \n129 132 129 127 128 132 134 128 127 124 119 122 125 128 134 126 \n132 138 132 125 120 120 118 121 123 121 122 129 135 133 143 161 \n159 151 123 132 181 164 127 129 130 167 155 124 122 122 121 119 \n122 119 121 122 119 116 115 118 123 124 126 123 125 127 131 131 \n129 146 152 146 144 139 130 138 172 192 118 124 126 124 132 124 \n105 109 120 147 187 192 105 157 131 140 214 246 247 245 222 185 \n 99 105 195 202 247 242 218 184 156 148 163 194 235 248 250 237 \n177 140 134 125  92  84  92  97  99 111 155 198 152  97  95 102 \n104 105 101 100 101 104 153 206 145 102  99  98  96  98 102 103 \n106 107 107 107 112 111 108 109 108 108 107 110 111 111 111 111 \n110 110 107 108 111 109 111 115 119 120 118 118 117 115 111 113 \n115 121 121 123 121 117 117 121 121 121 119 121 123 125 124 124 \n123 118 115 117 119 123 124 126 128 129 129 127 128 129 128 125 \n129 129 126 126 129 135 155 172 198 218 235 238 246 248 241 241 \n245 242 175 180 187 138 142 152  95 111 187 239 243 230 205 154 \n 52  52  50  49  48  46  47  44  40  40  40  39  39  38  38  38 \n 39  37  38  36  38  38  38  37  38  39  39  37  37  36  36  31 \n 32  30  30  28  29  28  29  28  27  28  29  29  29  29  30  30 \n 29  29  28  27  28  29  29  30  29  28  29  31  35  38  40  42 \n 42  41  38  36  33  32  31  31  33  33  34  35  38  39  38  38 \n 38  38  36  35  39  44  53  64  77  86 123 156 162 206 253 251 \n251 249 253 254 251 250 244 248 251 251 251 251 239 171 145 175 \n136 213 221 160 186 166 124 158 137 130 140 148 154 157 151 153 \n156 155 152 151 156 161 149 150 156 156 157 161 152 146 151 156 \n156 153 148 149 149 146 147 146 148 147 149 150 147 146 151 149 \n143 147 151 147 146 140 137 136 131 126 122 128 129 124 132 138 \n140 145 144 144 146 150 146 142 137 139 140 136 124 122 120 117 \n112 112 113 117 116 118 123 125 132 137 145 148 149 155 161 165 \n171 173 178 182 183 185 188 184 179 174 170 166 156 150 152 165 \n190 173 208 151 144 174 222 238 231 160 135 157 160 200 251 245 \n245 250 249 248 251 243 241 246 236 184 141 135 132 127 124 128 \n130 129 131 136 129 127 131 131 131 136 139 139 136 137 132 130 \n130 131 131 133 133 134 132 133 127 124 126 130 127 124 122 121 \n128 131 131 130 120 118 119 120 126 126 123 128 138 131 157 208 \n178 153 130 126 141 139 133 135 125 123 119 120 121 121 119 117 \n116 118 119 117 117 118 114 116 122 123 126 123 123 130 132 126 \n127 128 130 132 134 134 137 145 173 190 115 147 131 128 128 131 \n131 128 132 156 190 185 107 163 127 133 219 248 247 251 236 191 \n113  94 188 190 227 181 153 144 163 190 226 243 246 243 226 181 \n146 143 131 120 110 110 112 115 113 115 146 190 125  90 102 108 \n108 106 109 108 108 106 155 205 130  96  98  96  93  98  99 100 \n102 102 105 103 102 105 108 106 104 107 106 105 103 104 108 112 \n112 111 108 108 112 113 112 116 118 120 117 120 119 116 116 115 \n117 118 116 120 120 119 121 118 119 120 119 118 119 120 122 122 \n123 122 121 121 122 122 120 123 123 124 125 123 125 126 126 127 \n127 126 126 124 123 125 127 132 136 146 177 219 239 248 246 241 \n247 231 172 178 190 131 155 136  95 113 193 245 235 222 204 148 \n 54  55  55  55  56  58  57  54  51  49  51  48  43  43  41  39 \n 39  37  36  37  37  37  39  39  39  40  39  37  36  34  34  32 \n 32  30  31  30  29  27  26  27  26  27  27  28  28  27  29  28 \n 27  28  26  26  27  27  28  28  27  28  29  31  34  35  39  40 \n 39  38  36  34  29  29  29  29  29  29  33  32  33  36  35  38 \n 39  38  37  35  35  37  39  45  56  70  81  98 142 155 207 249 \n247 242 246 251 248 250 247 244 253 251 251 254 250 206 139 174 \n128 152 182 159 174 185 113 150 131 132 131 135 151 157 157 154 \n147 145 153 158 158 154 150 148 149 150 148 153 149 145 154 151 \n155 152 147 146 149 150 147 149 151 151 150 151 151 152 148 145 \n144 142 141 144 147 148 146 142 143 146 142 138 138 140 143 148 \n145 148 144 137 135 138 146 140 136 135 141 120 104  99  99  96 \n 96  94  94  99 101 101 100 101 101 108 110 113 112 116 120 123 \n130 131 135 139 146 152 156 160 166 168 175 178 184 188 186 184 \n189 183 187 176 177 209 224 231 231 178 143 156 158 174 251 247 \n247 250 249 248 247 245 242 216 156 140 141 137 128 132 135 131 \n133 133 138 139 134 129 128 132 134 136 138 134 132 133 132 129 \n133 134 133 135 134 136 132 128 129 132 130 126 120 115 111 118 \n130 125 123 126 122 122 125 127 127 125 126 131 135 131 133 135 \n133 126 126 126 124 129 162 200 132 123 123 121 122 124 119 117 \n118 118 114 111 113 118 116 114 116 120 123 127 123 127 128 127 \n135 133 129 129 133 136 129 146 176 187 112 156 129 130 131 135 \n139 139 134 157 193 176 112 166 140 132 152 186 221 239 235 190 \n135  84 181 190 126 137 155 185 236 249 253 251 239 207 164 144 \n143 136 118 112 116 114 112 115 113 105 117 125  73  65 111 113 \n109 115 114 112 103 105 152 177 109  99 102 105 105 108 110 111 \n106  98 112 108  97  91  91  86  82  82  84  83  83  82  87  91 \n 98 102 108 107 110 117 116 117 116 117 116 116 113 115 115 113 \n113 115 111 113 114 115 114 113 116 118 113 114 118 119 119 118 \n121 123 123 123 124 126 124 124 124 123 123 120 121 121 122 124 \n126 125 124 123 124 125 127 127 128 129 127 132 190 233 248 243 \n244 218 170 175 187 124 168 122  93 121 202 236 216 228 164 150 \n 55  55  56  55  57  57  57  57  56  53  54  52  47  46  42  41 \n 41  40  40  41  45  45  49  48  48  46  41  39  35  35  33  33 \n 45  44  38  32  35  31  27  27  26  27  26  26  26  26  28  26 \n 27  27  26  25  25  27  27  26  27  29  28  31  33  35  37  37 \n 38  36  34  31  27  28  28  27  28  27  30  29  31  33  33  36 \n 38  37  39  39  36  36  36  38  42  49  63  76 110 137 160 224 \n250 246 250 253 251 254 250 247 249 253 253 253 249 230 144 148 \n141 125 164 156 159 188 127 138 127 130 136 137 153 158 161 156 \n150 149 156 156 158 161 153 147 144 141 141 140 138 142 153 152 \n151 153 147 146 149 148 146 148 153 159 151 149 150 150 148 148 \n148 143 143 144 146 152 151 144 146 148 148 146 142 144 143 143 \n146 149 150 143 144 143 142 138 136 132 105  79  64  59  54  50 \n 51  51  53  55  57  60  64  69  75  87  92  98 100 106 102 105 \n106 108 110 110 114 121 124 127 130 133 139 141 144 147 154 160 \n170 172 177 180 183 183 190 196 202 192 184 181 177 173 221 231 \n235 239 242 244 244 243 215 161 141 140 140 137 135 138 133 131 \n130 132 134 133 135 131 131 132 131 131 139 137 133 131 133 130 \n132 134 133 137 135 133 134 131 130 124 126 126 127 125 121 125 \n131 126 122 121 123 129 130 125 123 124 126 129 127 126 127 125 \n118 116 121 124 124 123 128 129 118 123 122 122 121 122 118 122 \n121 121 118 117 122 120 114 113 113 113 119 123 124 126 124 126 \n129 126 127 129 128 134 132 149 176 180 115 159 129 132 136 138 \n134 134 131 162 196 167 119 160 158 164 140 140 155 168 173 172 \n152  83 167 199 141 182 214 239 250 252 241 210 168 144 143 140 \n139 122 103 114 115 116 120 119 104  74  55  54  45  58 108 117 \n119 114 118 114 102 111 133 144 100  83 102 106 106 110 115 117 \n113 103 125 113 118 118 115 115 113 112 108 102 100  96  91  90 \n 96 101 109  99  97 105 107 109 109 110 111 114 111 110 113 114 \n114 117 113 110 113 111 110 112 111 110 111 112 115 115 115 116 \n120 119 117 119 121 122 122 124 125 124 123 119 121 122 123 123 \n126 124 126 125 124 124 128 129 131 132 128 128 141 204 240 235 \n234 202 169 176 184 116 178 119  93 111 184 226 219 217 136 151 \n 57  57  58  58  57  56  56  57  57  55  56  54  51  44  41  39 \n 40  42  41  41  47  49  53  52  52  51  48  43  37  34  32  30 \n 47  54  51  40  34  30  28  28  26  27  26  26  26  27  28  25 \n 26  24  25  25  26  27  26  26  26  28  28  29  31  34  34  38 \n 35  33  31  29  28  26  25  25  27  27  29  28  29  29  29  31 \n 37  37  37  38  37  37  37  36  37  39  44  50  75  99 139 161 \n236 247 251 252 254 253 252 248 250 252 249 248 234 208 154 139 \n138 104 152 138 149 186 147 116 143 120 127 138 152 154 146 145 \n145 141 139 135 141 147 153 154 147 141 133 135 141 144 146 153 \n150 145 145 148 148 147 146 153 152 154 146 143 149 148 148 150 \n153 150 148 148 149 147 145 145 144 148 149 147 144 144 140 142 \n145 148 146 146 151 142 138 134 133  89  67  57  39  31  28  28 \n 30  34  39  44  35  34  35  36  36  40  41  43  51  55  60  67 \n 74  77  83  89  96  96  95  99 103 105 109 110 110 112 115 116 \n122 127 132 136 139 143 148 154 160 160 162 168 179 185 185 187 \n188 191 193 197 199 199 181 170 161 154 152 154 152 152 146 140 \n131 130 132 134 135 139 138 136 134 136 136 136 134 135 133 133 \n131 132 135 136 133 133 135 135 135 131 130 134 135 137 130 128 \n130 133 132 122 122 128 125 122 121 119 122 127 131 126 122 122 \n126 127 121 122 124 123 121 122 122 121 117 114 120 123 121 114 \n121 122 118 117 116 112 112 120 122 120 120 124 125 124 121 126 \n125 123 125 129 128 128 130 152 181 174 113 160 130 128 130 131 \n132 134 134 168 200 155 129 166 165 220 209 195 194 189 161 160 \n170  93 146 207 169 193 200 197 198 187 149 136 134 132 135 136 \n133 108 107 114 118 118 116 111  98  79  62  54  58  82 105 111 \n116 115 116 115 106  81  77  75  57  52  99 110 113 113 116 118 \n123 122 121 123 124 122 120 123 122 124 121 121 123 125 121 125 \n126 125 121 117 116 115 115 113 107 108 114 110 103 100 101 102 \n103 102 101 101 102 103 108 109 110 110 111 110 108 111 112 112 \n113 113 112 113 117 117 117 118 118 116 117 120 117 120 125 126 \n124 123 122 120 123 122 124 129 128 130 131 128 130 182 241 235 \n227 178 177 177 179 115 188 116  97  81  83 137 207 177 147 149 \n 60  60  63  60  57  59  59  57  57  54  55  53  54  45  40  40 \n 39  38  41  42  45  50  52  55  55  54  50  43  38  35  33  31 \n 29  34  46  48  40  29  27  27  25  25  24  24  25  27  27  25 \n 24  24  25  26  26  27  26  27  28  27  26  28  31  33  35  36 \n 35  34  30  28  27  27  24  26  27  28  28  26  29  29  28  31 \n 34  33  36  38  38  38  39  37  36  36  41  46  53  70 110 144 \n184 237 250 250 250 250 253 251 249 251 240 213 170 158 161 141 \n129  93 133 129 136 174 169 106 141 124 130 146 150 148 147 149 \n151 151 147 143 144 147 147 156 155 148 147 150 149 145 144 146 \n144 147 151 148 149 150 153 155 153 155 160 152 152 152 154 152 \n152 151 149 148 149 145 142 143 144 145 146 145 144 145 146 148 \n150 148 148 151 149 141 139 133 121  79  58  41  24  21  20  24 \n 27  31  37  42  26  24  25  24  26  31  36  39  48  49  51  50 \n 48  46  45  48  51  52  54  57  61  64  68  69  75  77  78  82 \n 86  92  96  98 109 114 120 125 131 135 133 130 134 140 146 146 \n148 153 162 171 174 178 181 184 186 189 188 191 191 190 186 179 \n172 169 164 156 153 150 144 139 132 134 139 141 138 137 138 138 \n134 132 133 133 136 139 136 136 133 131 135 137 134 135 130 127 \n128 132 139 131 123 124 126 121 119 118 119 128 126 124 125 124 \n123 119 117 121 122 116 110 115 113 113 116 116 119 119 119 116 \n120 121 118 118 119 120 120 118 117 120 121 122 125 122 121 125 \n123 125 124 121 123 126 126 155 186 166 119 157 129 125 127 130 \n135 139 138 172 199 142 138 171 159 200 195 176 174 175 161 156 \n184 101 133 208 167 177 183 188 155 134 134 137 135 131 129 125 \n114 102 110 114 114 119 119 111 101  94  91  90  92  99 103 107 \n112 112 115 117 109  76  48  43  48  64 102 112 117 117 116 120 \n122 124 127 126 123 121 123 121 124 126 123 122 123 125 125 122 \n124 125 122 121 121 122 126 126 125 125 125 122 118 112 111 109 \n104 102 104  96  97 104 106 106 104  99 100  97  98 102 103 104 \n108 108 111 113 115 114 115 117 114 115 114 116 115 119 119 123 \n125 121 121 121 123 122 123 125 124 126 125 127 133 186 238 238 \n231 173 180 181 172 114 195 117 107  88  99 192 204 163 156 147 \n 99  89  79  74  67  63  64  62  62  58  57  56  52  48  44  42 \n 40  41  40  42  45  49  52  56  55  55  50  45  39  34  30  28 \n 29  27  33  47  51  40  27  25  24  24  24  25  26  26  24  24 \n 23  24  26  26  26  27  26  26  27  27  26  29  31  33  34  34 \n 32  32  29  27  26  26  24  25  25  26  27  27  30  28  28  29 \n 29  32  34  36  35  36  40  41  39  36  40  42  46  49  75 107 \n153 204 253 253 252 251 249 248 232 196 165 155 152 156 156 139 \n136  95 101 129 116 138 188 111 121 134 140 144 149 144 142 144 \n151 151 149 148 151 150 148 149 152 154 157 160 151 144 144 147 \n150 156 158 151 149 152 153 149 148 152 149 149 151 153 154 157 \n150 152 151 150 149 149 149 149 143 143 146 145 148 149 150 153 \n151 149 144 143 141 140 138 141 117  59  48  26  21  20  19  22 \n 27  30  35  36  22  21  23  22  23  25  31  35  41  45  51  56 \n 54  50  43  41  43  40  37  37  38  40  43  44  45  44  44  44 \n 46  48  47  48  50  53  54  57  65  72  76  80  87  95 102 104 \n116 123 127 129 134 136 138 142 140 146 145 147 152 159 166 170 \n176 184 195 199 200 200 195 192 187 181 174 170 163 158 153 150 \n149 144 144 142 139 139 137 134 131 131 136 137 134 131 131 125 \n125 129 127 126 119 122 125 121 118 121 118 117 117 118 116 115 \n116 115 110 111 113 112 110 112 116 119 116 119 115 116 118 118 \n120 118 119 116 117 118 114 112 115 115 118 120 119 118 119 126 \n124 129 133 126 121 125 128 160 185 152 125 151 127 126 128 132 \n135 134 139 176 198 133 144 168 162 156 174 178 196 213 229 230 \n181 117 115 202 201 241 244 241 152 135 142 139 135 133 126 111 \n100 113 118 116 116 120 117 112 110 107 108 116 114 112 113 114 \n119 121 116 118 112  98  84  77  82  98 112 118 122 123 127 129 \n125 124 125 122 125 125 123 122 122 121 125 122 123 125 124 123 \n122 123 124 123 119 120 121 125 122 123 122 122 119 120 115 112 \n114 116 115 124 124 127 127 126 116 111 110 106 102 103  94  91 \n 86  84  94  99 107 107 114 114 113 113 110 107 106 110 116 119 \n121 119 116 118 120 121 121 120 118 119 121 122 152 215 233 236 \n226 168 179 184 165 119 206 149 126 118 179 184 141 175 141 149 \n163 158 146 139 122 104  87  76  65  59  56  59  58  55  52  48 \n 45  44  43  44  46  48  52  54  56  55  51  46  39  36  33  32 \n 31  27  29  35  57  45  30  24  24  24  25  26  26  25  23  23 \n 25  23  27  26  25  27  26  26  26  26  29  29  31  34  32  34 \n 32  30  29  28  25  26  25  26  26  27  27  27  28  26  27  28 \n 29  30  31  34  34  37  40  42  42  38  37  39  44  46  52  83 \n131 163 242 253 253 252 240 209 165 149 146 150 149 151 150 140 \n136 107  82 110 119 121 180 119 104 134 142 144 154 153 151 145 \n148 150 145 143 149 156 154 160 156 156 155 154 152 151 147 148 \n146 151 155 149 148 145 141 142 149 152 153 152 153 154 154 153 \n152 151 154 152 153 151 153 153 151 150 147 149 151 152 153 152 \n150 151 144 147 146 146 148 144 118  54  34  23  21  19  20  24 \n 31  29  34  35  20  19  21  20  23  24  30  34  37  37  45  55 \n 58  59  48  43  40  38  35  36  37  37  38  37  36  35  35  36 \n 39  40  38  39  39  40  44  44  45  47  47  49  51  55  59  60 \n 64  65  70  74  78  81  83  93 100 108 116 117 127 136 136 137 \n139 144 152 157 163 166 174 179 188 200 195 194 193 195 196 193 \n194 193 189 186 177 174 168 160 152 147 143 141 130 125 128 127 \n127 130 130 129 126 124 122 120 121 119 113 110 118 122 119 117 \n111 108 107 107 110 115 116 117 118 122 121 117 116 116 116 119 \n117 113 116 114 118 118 115 115 117 117 115 115 117 117 120 122 \n123 126 130 129 122 125 131 161 187 147 130 147 131 133 129 126 \n129 130 141 178 196 123 155 159 173 197 237 236 243 243 245 247 \n192 131 107 193 198 235 247 235 147 137 141 144 139 142 121 105 \n112 118 117 121 121 120 118 116 109 108 113 118 116 115 118 123 \n122 123 120 117 119 112 107 106 108 118 120 120 124 127 124 123 \n124 124 123 121 124 127 124 123 126 128 129 124 125 126 124 124 \n125 127 127 125 122 124 121 122 121 121 123 126 124 122 119 117 \n121 122 123 126 123 125 127 128 126 126 129 127 126 124 122 122 \n114 113 120 120 119 116 115 115 114 116 104  93  98 100 100 111 \n116 112 106 106 108 113 119 117 116 118 121 125 196 228 231 232 \n215 168 176 188 155 130 214 225 206 204 172 157 116 173 135 150 \n170 170 170 170 173 173 172 166 155 148 129 114 101  92  84  79 \n 68  63  57  57  54  53  55  57  58  59  57  52  43  40  37  37 \n 37  37  38  34  63  47  35  27  25  25  24  24  24  24  24  24 \n 25  25  26  25  26  26  24  24  25  26  25  28  29  30  32  33 \n 32  31  30  26  24  25  25  27  24  24  26  27  27  26  26  27 \n 28  29  31  34  34  36  38  39  41  39  38  35  38  45  47  60 \n100 138 195 249 250 249 210 175 167 165 164 174 170 165 157 143 \n109 108  66  86 107 107 147 124  98 120 141 139 141 139 144 142 \n136 133 136 139 141 145 148 142 147 149 144 142 142 144 144 147 \n154 161 153 146 153 153 157 154 152 154 154 150 151 152 145 150 \n154 152 153 152 152 152 156 151 148 151 147 147 148 147 147 148 \n147 147 148 152 152 150 151 149 116  49  31  22  19  19  18  23 \n 32  30  32  34  19  18  19  21  22  22  27  33  34  35  40  49 \n 59  59  56  51  40  39  36  36  38  38  34  34  33  33  35  35 \n 34  35  36  36  36  37  37  38  39  41  42  42  45  49  56  58 \n 57  57  58  56  56  58  57  54  51  49  47  48  56  65  72  72 \n 80  87  91  98 106 112 121 127 140 148 152 154 159 158 161 165 \n169 173 185 187 195 198 203 204 208 208 208 206 202 197 190 183 \n176 171 167 161 156 152 145 138 131 129 124 121 118 116 120 117 \n117 113 110 108 109 110 114 117 118 120 117 110 120 121 118 119 \n117 116 113 114 115 119 113 115 110 112 118 119 119 120 118 119 \n120 121 122 123 123 126 135 166 187 135 139 147 134 131 131 130 \n128 130 148 185 192 119 159 139 180 190 246 240 243 248 246 248 \n204 148 101 180 199 225 247 217 140 136 135 135 136 136 109 107 \n118 119 120 123 121 118 117 117 121 121 124 124 122 123 122 120 \n122 123 123 118 118 113 113 116 118 122 121 121 121 122 126 127 \n123 123 124 123 127 128 126 123 126 128 128 128 125 124 126 122 \n125 124 126 127 125 122 123 124 124 122 124 123 123 124 119 117 \n121 122 123 120 122 123 124 129 126 125 124 121 121 124 120 119 \n125 126 125 125 126 126 127 124 124 127 123 119 112 108 108 104 \n104 104  94  89  90  90  93  90  90 100 113 134 215 219 215 214 \n204 165 177 193 135 148 168 150 223 244 168 137 120 138 128 157 \n171 171 172 172 172 171 173 171 171 170 170 167 167 163 158 151 \n143 138 132 125 113 105  91  78  76  71  70  66  59  51  48  52 \n 52  49  55  49  70  54  43  30  26  26  24  25  26  24  24  25 \n 25  25  25  25  25  25  24  25  26  25  25  26  29  31  33  35 \n 33  31  30  28  25  25  25  25  24  25  25  24  25  25  24  25 \n 26  29  31  32  32  33  36  37  39  38  39  37  37  43  48  51 \n 79 117 167 220 242 241 205 166 140 139 144 157 160 157 156 143 \n 90  85  67  66 101  98 110 110  96 104 124 131 132 129 131 133 \n131 132 142 143 141 142 139 139 137 137 134 137 137 141 143 148 \n149 161 148 142 150 155 157 156 154 151 150 151 153 154 152 155 \n153 148 151 148 152 153 159 156 150 147 149 151 154 156 151 155 \n153 151 152 155 150 145 146 147 116  45  27  20  19  19  19  22 \n 32  32  31  37  21  18  18  21  21  23  27  31  33  35  36  43 \n 54  57  56  53  44  40  37  40  37  36  35  34  35  33  34  35 \n 34  35  36  35  34  35  34  36  37  38  40  41  45  49  55  57 \n 56  56  58  57  57  59  60  59  55  54  47  43  43  41  43  42 \n 43  43  45  45  51  53  59  58  65  72  85  96 103 111 122 128 \n130 133 141 148 155 161 166 171 174 179 184 190 192 195 198 200 \n203 207 206 207 209 207 204 203 198 194 188 186 180 175 172 167 \n160 154 145 140 136 127 123 121 122 123 119 117 122 124 123 120 \n118 117 120 118 122 125 122 122 120 119 124 124 124 125 124 126 \n127 123 125 125 122 126 139 169 190 131 145 146 129 132 137 134 \n138 132 153 189 187 119 157 124 184 175 250 247 240 248 246 249 \n216 164  99 168 202 213 214 158 133 133 134 136 128 114 109 116 \n123 123 122 123 118 119 115 113 121 122 126 130 131 127 127 125 \n126 123 122 119 118 120 120 124 124 122 122 122 123 122 123 128 \n127 128 124 122 130 128 129 125 125 124 123 125 122 123 124 122 \n124 123 125 124 124 122 124 124 122 124 124 122 122 124 127 121 \n120 122 123 122 123 125 124 126 124 125 124 122 124 123 123 122 \n126 125 122 123 124 126 124 117 119 123 122 122 123 123 122 122 \n124 125 120 113 117 114 110 105 104 107 120 166 210 207 207 210 \n178 160 177 198 131 144 157 111 144 205 169 123 141 124 128 159 \n160 166 150 165 173 174 174 174 173 172 172 171 168 170 169 167 \n166 167 166 167 166 168 167 171 162 164 159 158 155 153 148 139 \n132 131 122 118 108  62  44  30  26  25  25  25  24  24  25  25 \n 25  24  26  25  25  25  24  25  26  25  24  25  29  31  34  34 \n 32  31  28  26  25  24  24  25  25  25  24  25  24  26  25  26 \n 26  28  30  31  31  30  33  35  36  37  38  37  37  37  44  48 \n 56  84 147 167 237 234 225 205 173 154 138 135 138 133 134 132 \n 82  68  65  58  71  96  82  87  94  93 108 128 130 132 131 123 \n127 131 137 137 140 145 139 137 136 134 135 139 146 150 148 155 \n156 150 143 139 150 157 156 152 148 146 144 150 151 151 145 144 \n145 145 150 154 154 148 154 158 159 151 155 154 153 162 159 154 \n152 150 152 152 149 149 148 147 108  48  29  19  17  18  19  21 \n 32  34  30  37  20  17  19  19  19  22  25  29  33  33  33  39 \n 47  55  56  55  51  44  39  39  37  37  36  35  34  32  33  34 \n 34  35  36  36  35  34  35  36  35  38  39  39  43  48  52  55 \n 55  54  57  56  56  57  56  56  55  53  46  42  39  38  39  37 \n 37  37  35  36  36  35  36  37  37  37  40  39  37  38  36  40 \n 47  50  60  68  79  86  96 103 115 127 138 141 148 149 155 163 \n166 172 176 182 184 191 197 202 204 205 213 218 219 218 220 218 \n220 219 217 217 217 217 213 210 207 205 203 200 195 191 186 184 \n181 177 172 163 159 155 151 146 142 141 142 139 135 131 127 127 \n136 134 135 132 135 138 147 175 188 124 153 145 132 132 135 137 \n139 133 158 192 181 121 160 108 184 162 248 249 245 246 248 250 \n226 178 109 154 208 175 146 139 136 133 133 121 110 109 120 122 \n125 128 124 122 120 124 125 123 126 125 130 131 131 129 129 128 \n131 130 126 123 123 127 126 124 126 127 130 122 122 122 126 125 \n125 126 125 126 123 124 124 122 120 122 125 126 125 126 125 127 \n129 127 125 125 123 120 126 123 123 127 127 125 123 125 127 123 \n122 124 125 124 122 122 122 122 122 124 121 122 122 123 123 122 \n122 122 122 122 119 122 122 120 119 118 122 123 120 122 123 125 \n126 125 123 114 126 127 126 126 128 127 182 238 244 242 238 234 \n190 161 178 196 122 134 155 113 119 165 133 167 163 149 125 164 \n144 165 129 155 174 174 173 174 175 173 174 172 171 170 172 170 \n169 170 170 170 169 168 169 173 166 172 167 166 166 168 167 167 \n165 165 165 167 163  72  47  31  27  25  24  25  24  24  24  23 \n 24  25  25  25  25  25  24  26  28  27  26  26  29  32  35  34 \n 32  32  29  27  25  24  23  24  25  26  25  25  24  24  24  25 \n 25  27  28  27  29  30  33  34  35  36  38  37  37  35  40  46 \n 49  66 124 154 215 246 232 234 231 211 177 157 138 130 126 117 \n 74  53  49  49  78 107  77  78  85  78  80 118 129 130 126 120 \n122 125 128 132 135 144 144 146 143 142 140 143 151 153 146 149 \n152 150 148 142 148 151 152 149 148 149 148 144 142 143 146 144 \n140 146 151 153 151 146 151 156 155 151 155 158 153 156 158 156 \n154 152 155 154 153 152 153 154 121  55  29  19  18  17  18  20 \n 30  33  30  38  20  17  18  19  18  20  23  28  33  33  35  37 \n 42  50  56  57  54  50  42  38  37  35  35  35  33  31  34  35 \n 34  34  36  36  35  35  34  35  34  36  37  38  42  46  49  52 \n 54  53  56  56  55  57  56  56  54  52  47  42  40  36  34  37 \n 36  37  34  35  34  33  33  34  34  34  34  33  33  34  36  36 \n 36  36  37  38  37  37  38  41  48  50  59  63  68  73  88  98 \n110 119 135 141 143 147 154 156 167 169 178 185 191 192 199 201 \n211 215 218 223 227 227 231 231 231 233 229 230 233 231 231 229 \n232 232 231 227 228 226 222 218 216 212 207 201 194 187 177 171 \n165 156 147 139 139 139 155 180 184 117 155 141 131 130 132 136 \n143 146 160 192 176 123 153 103 179 160 241 252 251 247 247 250 \n236 188 122 144 211 165 138 140 143 138 127 113 108 117 123 125 \n123 127 126 126 127 129 132 132 129 126 128 130 129 129 126 129 \n134 134 124 123 128 131 133 128 131 130 126 125 130 131 128 124 \n123 123 124 126 125 125 126 124 124 125 125 127 128 148 158 136 \n129 127 127 130 126 124 129 126 126 125 127 124 124 126 124 124 \n127 123 124 121 122 120 119 121 122 123 121 122 120 121 123 121 \n126 123 123 122 120 125 124 123 120 121 127 124 121 121 125 126 \n126 126 124 116 122 127 122 126 128 140 226 242 243 247 245 246 \n197 165 182 190 121 132 164 114 123 174  96 116 154 134 127 170 \n124 164 161 154 175 174 174 174 173 174 174 176 174 173 174 171 \n167 166 166 167 171 173 171 175 171 169 169 168 169 168 165 165 \n166 165 166 167 168  90  45  34  25  26  25  24  24  24  24  25 \n 23  25  25  25  25  25  25  25  24  25  28  28  29  31  36  37 \n 34  32  29  27  24  23  22  23  24  24  24  24  24  24  24  24 \n 26  25  26  27  28  27  31  31  33  34  36  35  38  38  38  43 \n 45  50  89 149 172 236 233 232 230 233 235 231 193 141 118 102 \n 85  74  79  90 109 109  71  61  60  53  86 121 128 123 126 133 \n135 133 133 134 135 126 113 106 117 127 134 133 141 147 146 134 \n130 134 140 136 148 151 147 145 142 141 147 148 143 141 141 142 \n137 140 140 149 153 146 145 151 157 156 155 158 159 155 153 152 \n155 155 151 153 154 152 156 171 136  51  32  21  18  17  17  19 \n 29  33  30  37  19  16  17  18  18  20  21  25  30  32  34  36 \n 38  42  54  56  55  53  46  40  38  36  35  36  35  34  36  34 \n 33  34  36  36  37  37  37  35  34  37  39  40  43  45  50  51 \n 54  54  55  55  54  54  54  56  55  53  51  47  42  40  38  36 \n 37  37  39  37  36  34  34  33  33  35  33  32  30  31  31  32 \n 33  34  33  32  34  34  34  35  35  38  38  39  41  44  42  43 \n 42  39  39  39  49  53  58  65  74  86  99 108 123 129 139 147 \n159 165 172 175 182 183 189 195 200 206 212 221 228 231 236 239 \n242 247 250 253 252 251 252 251 252 252 250 250 247 246 243 241 \n237 232 226 221 204 187 178 185 179 123 157 135 132 137 143 161 \n203 200 160 198 167 127 156 107 172 156 227 252 251 251 250 251 \n244 197 138 123 209 181 131 137 142 139 132 115 114 118 120 121 \n124 131 135 133 133 131 129 134 132 127 126 124 130 131 127 123 \n131 136 124 124 125 129 130 126 130 130 129 128 130 133 129 128 \n128 125 125 128 127 125 132 131 127 127 130 129 131 167 191 142 \n133 131 131 130 129 137 166 149 123 125 124 124 123 122 120 120 \n121 118 120 121 121 121 122 124 120 123 126 123 123 125 121 121 \n126 124 126 123 128 127 124 122 123 121 127 121 120 121 127 125 \n121 121 122 122 122 124 124 124 130 186 244 240 237 243 242 242 \n184 173 187 183 120 130 179 116 126 169  91 114 128 113 132 169 \n115 147 163 155 154 154 162 167 172 172 174 174 174 173 174 172 \n151 143 142 156 157 168 171 173 170 170 170 170 169 168 164 165 \n166 165 164 169 170 116  43  40  27  25  26  25  24  23  23  24 \n 24  24  24  24  23  24  24  24  24  25  26  25  28  31  36  37 \n 36  33  30  28  24  22  21  21  23  24  24  23  24  24  24  25 \n 26  27  25  26  27  28  29  29  32  32  33  34  36  37  38  40 \n 47  48  69 125 159 201 234 221 234 227 197 171 142 119 131 156 \n171 161 126 118 112 107  91  83  85  97 120 132 136 131 134 139 \n138 134 136 138 142 141 136 129 126 131 140 134 134 134 143 145 \n139 135 134 138 146 140 141 145 146 143 143 145 140 143 146 140 \n138 139 138 144 152 149 145 150 153 154 157 156 155 153 150 146 \n149 142 143 156 162 173 200 221 180  58  36  22  17  17  19  20 \n 30  35  29  34  21  17  18  18  19  20  21  25  31  33  34  34 \n 38  42  50  54  56  54  50  43  38  37  35  34  35  34  35  34 \n 34  35  35  34  35  36  38  36  35  38  40  41  44  47  49  51 \n 54  55  55  57  55  54  54  54  52  53  52  51  50  47  45  44 \n 41  41  41  39  37  34  35  35  34  35  33  34  32  33  32  33 \n 33  33  34  32  33  34  36  37  38  38  40  39  42  46  47  48 \n 50  50  48  49  50  48  46  47  45  46  45  44  50  54  55  59 \n 67  72  81  90 104 115 131 150 164 175 184 181 185 194 203 205 \n210 218 224 228 234 238 245 246 252 254 253 254 254 254 254 254 \n254 254 253 251 248 244 232 217 199 167 164 133 138 145 176 217 \n243 203 166 198 161 137 153 114 162 163 211 252 250 252 250 250 \n248 203 148 119 206 195 140 139 135 144 175 125 120 121 123 123 \n124 131 130 132 134 131 127 131 132 129 125 127 127 131 130 130 \n133 131 128 125 128 127 124 125 126 127 125 128 133 134 131 133 \n134 129 129 132 131 126 129 130 130 129 130 131 132 133 134 128 \n161 187 143 128 128 140 188 166 128 127 126 126 122 123 120 116 \n117 118 122 124 122 123 123 121 119 122 123 122 125 125 122 121 \n123 124 126 123 128 128 126 124 124 122 127 127 123 122 127 127 \n125 125 127 130 126 129 129 125 153 224 241 239 238 238 237 237 \n169 177 189 180 119 121 160 119 130 158 102 116 128 110 139 167 \n129 158 174 149 149 129 152 136 146 153 155 162 155 165 166 168 \n149 140 117 150 158 156 171 170 171 170 172 170 168 168 165 163 \n152 153 156 157 170 150  38  51  30  26  26  25  26  24  22  22 \n 24  24  23  24  25  24  24  25  23  22  25  26  27  30  34  35 \n 34  31  31  27  25  24  23  24  24  24  23  22  23  24  23  23 \n 25  25  26  25  27  27  27  28  30  31  34  35  34  34  36  38 \n 44  44  53  87 155 165 221 213 190 153 125 137 161 195 224 221 \n192 162 120 126 144 155 170 164 152 145 141 137 138 135 136 141 \n147 146 144 145 146 146 139 137 139 136 136 138 136 136 135 137 \n138 136 137 135 133 131 118 119 129 123 121 126 131 146 156 152 \n151 154 154 151 151 152 150 146 143 145 147 142 145 144 150 155 \n160 172 194 212 233 244 252 249 184  61  37  22  19  17  18  20 \n 28  36  32  36  20  17  16  18  17  19  21  25  30  34  34  35 \n 38  39  46  52  57  56  52  48  40  39  35  35  36  35  35  35 \n 35  34  34  35  36  35  36  37  37  41  41  40  44  47  47  51 \n 53  53  54  54  53  53  53  55  55  53  53  50  48  50  49  46 \n 47  48  46  43  41  37  37  38  37  38  38  40  41  41  39  40 \n 39  39  38  38  39  40  41  41  41  41  42  42  44  45  46  48 \n 48  48  47  48  47  49  48  48  47  47  45  46  49  48  48  48 \n 48  47  48  45  44  43  39  41  42  46  62  73  89 104 116 121 \n126 125 141 154 170 179 183 187 201 205 215 222 234 240 245 250 \n253 253 254 254 254 254 251 242 233 223 204 178 175 216 241 244 \n245 188 173 200 157 145 154 131 153 179 190 250 248 250 254 254 \n247 205 163 124 199 208 149 144 128 114 127 119 123 125 121 121 \n123 122 119 121 125 127 129 127 123 124 125 130 124 126 127 126 \n126 126 122 122 124 127 126 128 127 124 124 127 128 126 130 131 \n129 131 130 133 133 129 131 132 134 132 138 176 183 142 132 128 \n156 179 143 133 135 130 127 131 132 127 129 128 123 123 115 116 \n122 120 121 122 125 123 124 123 122 121 120 121 125 122 121 122 \n121 124 126 126 126 127 127 124 123 123 123 126 124 128 128 126 \n121 125 131 133 126 127 129 124 186 239 245 240 239 238 239 239 \n166 178 193 171 122 117 129 116 136 154 129 114 121 105 146 166 \n151 151 158 135 147 149 171 141 169 146 139 157 125 161 142 143 \n156 121 138 141 154 165 171 170 168 161 169 172 169 170 166 161 \n137 139 160 148 170 172  37  55  31  27  28  26  26  24  22  22 \n 24  24  23  22  25  25  24  24  24  23  25  27  27  29  33  34 \n 33  32  32  28  25  24  23  24  24  24  24  22  23  23  24  25 \n 25  25  27  27  25  26  27  28  29  30  31  33  32  33  34  36 \n 40  43  48  62 131 162 160 142 135 151 193 215 223 225 186 152 \n131 124 147 185 220 233 236 234 228 216 208 201 187 174 163 163 \n160 152 146 145 143 140 136 135 140 140 143 142 138 138 143 141 \n143 139 141 138 138 140 138 139 140 143 138 137 133 146 151 144 \n149 158 157 160 155 147 149 147 141 142 148 149 155 164 190 202 \n218 232 245 249 250 248 250 250 184  65  38  23  19  17  17  18 \n 28  35  32  34  22  16  17  18  18  17  21  25  29  34  33  34 \n 37  38  43  52  57  56  54  51  45  41  38  36  36  36  35  36 \n 34  32  33  34  36  36  37  36  36  37  38  42  47  48  51  51 \n 50  49  49  48  49  46  47  53  55  53  55  54  50  48  48  47 \n 47  47  48  44  41  38  41  40  40  39  38  42  44  42  42  42 \n 42  44  43  43  43  44  47  47  41  42  41  41  43  46  43  44 \n 44  44  44  45  46  46  45  45  44  46  44  44  44  45  45  47 \n 45  45  44  41  41  40  40  41  40  41  40  38  41  42  45  49 \n 55  59  61  66  76  82  95 105 116 124 138 158 168 172 197 207 \n210 221 231 239 245 249 248 240 228 218 207 198 189 207 237 247 \n243 182 178 202 152 151 159 139 155 186 174 246 250 251 251 249 \n208 181 175 139 195 212 156 146 120 106 121 122 124 127 125 125 \n129 126 125 126 126 129 128 125 119 125 125 120 123 127 127 125 \n125 124 123 122 123 124 122 123 131 131 125 127 131 130 129 128 \n129 129 127 132 127 129 130 133 134 133 136 150 154 135 133 133 \n129 129 133 163 190 146 131 132 133 131 128 129 125 123 118 117 \n124 119 122 123 124 122 123 125 123 122 122 122 121 121 117 117 \n124 124 123 125 126 128 128 128 129 124 124 129 130 131 124 123 \n122 123 126 126 122 125 129 128 169 211 240 242 241 241 242 232 \n162 180 194 161 120 118 126 109 140 148 118 116 113 104 146 165 \n173 174 172 169 128 136 147 141 170 139 155 145 133 170 130 118 \n177 117 151 122 152 166 163 155 152 121 157 148 155 152 145 134 \n150 132 156 158 168 181  67  53  36  28  26  25  26  25  23  23 \n 23  24  24  23  25  25  24  24  23  23  25  26  25  27  32  34 \n 33  31  29  28  27  25  23  23  23  23  24  24  24  24  25  27 \n 24  24  25  27  26  26  26  28  30  31  32  31  32  33  34  35 \n 37  42  46  50  91 151 152 176 213 228 225 191 152 129 128 142 \n181 208 232 240 234 242 241 238 245 248 243 239 234 235 229 231 \n231 224 216 210 197 191 188 182 176 174 168 162 159 157 153 150 \n151 146 145 147 153 154 146 145 149 148 148 148 147 145 149 148 \n147 148 153 160 163 160 165 180 183 183 187 187 206 226 243 237 \n228 230 232 244 250 244 238 248 200  75  39  24  19  19  18  18 \n 26  35  32  35  23  17  17  17  18  18  20  23  28  32  32  32 \n 33  36  41  47  54  54  56  52  46  43  39  36  36  35  35  36 \n 33  34  35  36  37  36  37  36  36  36  40  46  48  47  51  49 \n 46  44  43  44  43  45  44  49  53  54  53  53  50  47  49  50 \n 47  45  44  43  40  38  42  42  39  38  39  41  42  41  39  42 \n 43  43  42  42  43  44  44  44  42  40  38  39  39  43  42  40 \n 43  42  43  43  42  43  43  42  44  43  40  42  43  45  44  44 \n 43  42  41  38  36  36  34  34  34  34  34  35  35  35  36  34 \n 37  37  40  41  41  41  44  45  47  49  53  55  58  72 106 115 \n106 106 116 135 162 171 175 179 193 197 195 186 178 172 182 225 \n240 174 180 200 144 154 167 153 153 190 162 237 246 243 230 187 \n150 162 182 167 193 210 164 123 109 121 124 122 121 123 123 123 \n126 125 130 133 129 131 129 124 121 124 120 117 124 124 123 123 \n122 124 127 126 127 124 124 126 129 129 127 128 128 130 130 127 \n128 131 126 127 127 128 132 128 129 128 131 133 131 129 130 128 \n128 130 130 143 149 136 131 131 128 129 127 125 126 128 126 124 \n123 123 123 125 125 130 126 123 122 125 124 124 122 121 116 118 \n123 123 123 119 117 120 126 128 124 121 125 128 128 129 127 123 \n125 122 126 127 122 125 135 147 132 133 161 189 217 220 221 198 \n165 179 196 144 127 142 125 115 135 169 104 112 106 103 151 170 \n174 175 173 178 150 171 159 169 175 167 163 158 149 161 147 137 \n165 127 142 117 175 173 157 144 138 135 146 156 153 119 156 121 \n164 129 150 153 169 178  97  48  43  30  25  24  26  25  24  24 \n 23  24  24  24  25  25  24  23  23  23  24  26  25  28  31  32 \n 35  34  31  30  27  26  24  23  23  23  24  24  25  25  24  25 \n 24  24  26  27  26  26  27  29  30  30  30  31  31  32  32  33 \n 35  38  43  47  61 126 154 193 221 183 144 124 132 154 192 216 \n239 243 235 236 239 240 235 235 234 235 236 241 240 235 235 237 \n241 242 235 234 237 238 227 230 237 233 227 223 229 225 217 216 \n216 208 193 200 204 205 202 201 205 207 205 206 208 208 204 206 \n208 208 218 224 229 227 228 231 235 235 239 238 235 240 245 237 \n238 216 203 215 237 239 233 248 208  83  42  27  20  18  16  18 \n 26  36  33  35  24  17  16  16  18  19  21  22  29  33  34  34 \n 33  36  38  42  51  55  56  54  49  43  40  39  38  36  36  35 \n 36  36  36  37  37  37  37  38  38  39  43  49  50  48  50  49 \n 46  44  43  45  44  45  45  47  49  52  52  51  50  49  52  52 \n 50  48  44  43  40  38  40  41  40  38  38  41  42  41  39  39 \n 40  39  38  40  40  42  43  43  40  39  37  36  36  38  37  38 \n 40  38  38  39  40  39  40  40  43  42  41  41  42  43  44  42 \n 42  42  43  40  38  36  36  34  33  33  34  34  34  32  32  32 \n 33  32  33  32  35  35  37  36  38  41  43  46  46  47  47  50 \n 51  54  56  57  69  78  93 105 111 118 138 157 170 168 160 167 \n212 164 182 195 141 154 193 161 151 187 160 227 247 237 183 154 \n146 154 181 166 199 208 172 114 123 130 125 123 121 121 123 128 \n131 127 125 126 126 129 131 129 130 128 126 123 123 126 125 126 \n126 125 128 127 125 125 125 128 129 126 126 128 130 130 131 128 \n128 130 129 127 127 127 131 126 127 126 129 130 131 129 127 130 \n126 129 132 131 126 127 127 128 126 128 127 123 127 129 129 128 \n123 129 130 128 128 130 128 126 124 125 122 121 124 121 120 123 \n125 124 121 116 118 122 123 125 124 125 128 129 127 130 128 126 \n125 127 127 124 125 125 163 213 193 175 158 153 152 150 144 134 \n172 182 197 134 146 147 138 125 105 170 120 113 104 110 158 174 \n172 172 174 175 173 165 164 174 176 176 176 174 173 175 170 175 \n171 163 154 150 158 161 139 153 162 160 136 142 149 125 157 114 \n166 124 170 163 160 167 135  47  45  31  24  24  25  24  25  24 \n 23  24  24  24  25  25  24  23  24  26  25  25  24  26  27  29 \n 34  34  31  28  26  25  26  25  23  24  23  24  25  24  23  23 \n 22  24  27  25  24  26  27  28  28  28  30  33  32  32  32  32 \n 33  35  39  47  46  78 155 158 131 128 148 177 226 238 238 239 \n238 239 239 238 238 235 232 234 236 236 239 238 244 243 243 240 \n243 243 239 241 240 234 233 230 247 244 238 239 243 239 241 240 \n240 242 240 238 239 237 242 238 242 245 245 244 246 243 235 237 \n241 242 244 247 240 241 241 238 236 239 240 242 238 238 236 236 \n239 236 229 230 233 234 230 235 209  83  46  28  18  17  19  19 \n 27  37  34  35  25  17  17  17  18  18  20  21  27  32  32  32 \n 35  37  37  41  49  54  53  54  52  46  41  39  40  37  37  35 \n 36  35  35  36  36  38  39  42  43  43  47  50  49  49  47  46 \n 44  44  42  42  42  44  45  45  46  50  50  50  49  50  49  50 \n 49  47  43  42  41  39  40  40  38  36  35  35  35  35  35  35 \n 35  36  34  35  35  36  35  35  35  35  34  35  34  33  33  34 \n 34  33  33  33  34  35  34  35  37  40  40  41  42  42  43  42 \n 39  38  39  39  38  36  33  34  34  34  34  34  32  30  31  31 \n 31  33  33  30  32  31  32  32  32  34  36  37  37  39  39  41 \n 40  42  46  47  47  47  44  46  49  60  72  76  96 114 134 142 \n146 150 184 195 132 151 218 170 141 187 158 206 209 170 144 148 \n148 154 179 162 192 204 180 138 133 131 132 129 123 123 127 131 \n133 129 127 131 134 132 131 134 135 128 126 132 130 128 124 129 \n130 126 127 126 130 130 124 127 131 129 131 131 134 133 137 136 \n127 129 135 136 140 140 138 135 134 135 130 133 139 138 141 138 \n136 132 132 134 135 132 135 142 127 131 129 126 124 125 123 123 \n126 126 126 127 129 128 126 127 126 125 127 126 125 122 122 123 \n124 122 124 123 127 125 127 128 125 126 126 126 128 131 132 129 \n127 130 129 123 129 125 200 237 225 219 203 184 158 132 131 127 \n175 183 192 124 159 139 140 128 113 187 129 123 119 118 156 178 \n173 174 175 175 175 177 176 176 177 175 175 176 174 173 175 175 \n177 175 173 172 172 171 171 171 168 171 161 166 160 154 157 142 \n152 139 157 154 135 161 154  53  47  34  26  25  24  24  26  26 \n 24  24  25  25  25  23  23  23  24  25  25  26  26  26  27  31 \n 33  33  31  28  26  24  24  25  24  25  23  23  24  24  24  24 \n 23  25  27  26  26  26  26  28  28  29  31  30  33  33  32  32 \n 32  32  37  42  45  56 133 162 159 198 220 235 245 238 237 244 \n233 237 234 238 239 237 235 240 239 238 239 236 235 238 241 242 \n240 239 242 236 232 237 240 235 243 241 240 247 245 241 241 237 \n243 242 234 238 240 237 243 240 238 240 239 240 242 239 240 241 \n241 238 242 244 241 241 240 239 246 243 243 240 238 242 246 244 \n235 239 239 238 241 242 242 238 206  84  45  27  20  18  18  19 \n 26  38  35  35  28  17  16  17  18  17  18  21  25  31  31  33 \n 34  34  36  40  46  53  54  54  52  48  42  39  38  36  36  35 \n 36  36  36  37  36  38  41  44  45  46  49  49  48  48  47  47 \n 44  43  42  39  40  43  44  42  47  48  49  49  48  49  48  47 \n 48  47  45  43  40  37  34  35  35  34  32  32  32  32  32  31 \n 31  32  32  31  30  30  31  31  32  33  33  32  32  33  30  32 \n 32  32  32  32  33  32  32  33  32  35  39  41  41  42  42  41 \n 40  37  36  36  35  32  31  31  31  32  31  30  27  30  32  32 \n 30  32  33  31  31  33  34  36  35  35  35  37  36  38  42  41 \n 43  43  45  47  45  41  41  39  38  41  44  52  76  79  92 107 \n133 140 176 195 129 161 227 177 138 180 160 165 162 150 148 148 \n148 150 174 166 186 203 183 148 133 133 130 126 120 122 126 129 \n126 125 130 130 132 136 134 132 132 125 125 128 131 131 127 129 \n129 127 128 127 129 129 126 130 136 136 134 128 140 150 159 160 \n152 154 157 161 163 160 158 157 156 156 153 156 156 153 154 153 \n154 153 152 154 158 158 164 170 129 129 129 127 130 132 126 129 \n129 123 124 126 129 130 126 125 127 129 128 128 123 126 128 128 \n126 123 129 130 132 128 127 128 125 126 125 123 125 126 136 132 \n129 130 130 123 125 127 156 170 159 158 153 146 145 155 174 149 \n175 183 186 117 167 171 128 124 126 193 127 129 128 123 159 177 \n177 173 175 175 176 176 176 178 176 176 178 175 175 174 177 174 \n176 176 173 171 172 173 174 172 174 175 174 173 175 173 173 168 \n167 172 172 171 170 171 169  71  48  33  28  25  23  24  25  27 \n 24  23  23  24  24  23  23  23  23  24  25  26  26  25  28  30 \n 31  31  32  30  26  25  23  24  25  25  23  24  24  24  23  23 \n 24  24  24  24  26  27  26  26  28  30  33  33  35  34  33  32 \n 31  30  32  37  44  46  92 151 172 230 232 242 241 229 230 240 \n233 237 241 237 240 244 237 237 238 238 240 237 241 238 234 236 \n240 241 238 240 241 239 236 240 242 236 233 239 241 239 245 242 \n237 237 237 238 238 238 244 239 237 235 240 242 233 239 237 242 \n238 237 242 245 242 237 238 240 241 240 239 239 238 246 242 235 \n240 245 237 241 240 240 238 240 211  88  50  29  21  18  18  20 \n 27  38  35  34  31  17  18  17  17  16  17  21  25  29  29  32 \n 33  33  35  38  42  49  56  55  54  51  45  38  37  37  34  35 \n 36  35  34  36  36  38  42  45  46  48  49  49  47  46  47  48 \n 45  42  40  40  41  41  42  41  42  43  47  47  45  47  46  46 \n 49  50  47  41  37  34  33  35  34  32  32  31  30  29  31  32 \n 31  29  29  27  29  29  30  30  29  29  31  31  31  31  30  31 \n 30  31  31  31  31  31  31  30  34  34  38  40  39  42  40  41 \n 38  36  35  33  31  29  29  28  29  28  27  27  27  30  30  32 \n 29  31  31  33  31  32  33  36  37  38  39  40  41  42  44  44 \n 46  47  49  49  49  49  43  37  35  32  34  38  45  51  62  77 \n 97 122 145 180 124 168 230 182 144 171 172 144 156 156 151 149 \n149 147 164 171 179 202 181 148 130 126 125 123 123 123 123 127 \n125 124 130 130 128 133 135 125 130 132 132 135 137 129 121 122 \n126 125 126 128 131 132 130 128 135 135 130 127 141 142 136 140 \n127 130 133 131 130 133 128 127 132 131 132 128 128 127 124 128 \n124 122 124 125 125 127 128 132 128 128 129 129 130 134 131 128 \n129 127 125 129 126 128 124 127 130 126 125 126 129 132 132 134 \n133 128 132 133 134 128 127 127 124 129 130 125 130 131 132 133 \n131 130 131 127 132 150 172 190 206 216 222 228 233 239 236 176 \n180 185 181 121 167 148 141 118 147 182 126 130 122 130 158 180 \n182 173 175 176 175 175 176 176 176 176 177 175 174 175 175 175 \n175 176 175 173 172 171 172 173 175 174 173 172 175 175 173 171 \n169 170 172 172 170 172 174  99  45  39  30  24  24  25  26  27 \n 25  24  24  24  24  23  23  24  25  25  25  25  24  25  28  29 \n 31  32  33  31  26  25  24  24  25  25  24  24  24  24  23  23 \n 23  23  24  24  25  27  27  28  28  30  33  34  34  34  34  33 \n 33  30  30  34  43  43  69 134 162 204 242 245 239 232 237 238 \n238 240 240 238 242 239 240 243 240 242 242 234 235 239 239 238 \n241 240 237 239 243 243 241 241 239 237 235 237 242 237 237 237 \n241 246 240 241 243 236 243 242 236 236 238 239 237 239 240 242 \n241 241 241 238 239 238 238 243 242 237 239 242 236 240 237 241 \n241 241 236 234 239 237 238 238 214  89  51  29  21  19  18  21 \n 26  37  33  33  37  19  17  17  17  17  18  21  24  28  31  33 \n 34  34  35  37  41  49  56  56  55  54  47  41  39  38  36  35 \n 35  36  36  35  37  39  42  44  46  47  48  49  48  47  46  46 \n 49  46  43  41  40  41  39  38  40  42  45  45  46  46  46  45 \n 46  45  44  40  38  34  32  33  34  34  32  31  30  29  29  29 \n 29  29  28  28  27  27  28  28  28  28  30  30  29  29  31  32 \n 30  31  32  30  31  33  31  30  33  34  36  37  39  40  39  38 \n 37  34  33  32  31  29  29  29  31  31  28  27  27  29  30  30 \n 29  29  29  32  30  28  29  30  32  34  34  38  39  41  42  43 \n 45  47  48  48  49  50  48  44  39  35  32  34  38  43  46  56 \n 76  95 126 144 129 184 244 192 142 160 179 140 157 152 148 147 \n149 153 154 169 178 199 193 152 127 122 124 124 127 131 132 129 \n128 134 133 130 128 130 130 124 128 129 133 131 135 129 123 124 \n130 131 129 127 131 133 130 132 135 133 128 131 137 135 135 141 \n132 132 132 130 128 131 131 126 132 136 138 132 131 131 126 128 \n128 129 131 130 129 127 130 128 129 133 136 133 131 129 126 124 \n126 125 125 124 123 130 127 125 128 127 124 126 133 134 126 126 \n131 134 135 134 127 125 126 130 127 130 132 131 128 127 129 130 \n133 133 136 126 163 222 235 245 238 237 246 245 246 247 239 179 \n177 187 176 119 200 173 178 119 166 181 126 130 122 132 163 187 \n170 175 170 156 167 170 173 176 175 176 174 152 145 160 174 174 \n175 176 174 173 172 171 173 172 175 176 176 171 177 174 177 173 \n169 167 172 172 172 173 177 139  38  44  29  26  26  25  25  26 \n 25  25  24  23  22  22  24  25  24  23  25  25  26  25  27  30 \n 31  33  33  32  27  26  23  24  25  25  24  24  23  24  23  23 \n 23  23  25  26  26  27  27  27  27  29  32  34  33  34  33  33 \n 32  30  31  32  38  41  51  93 162 173 239 239 234 233 236 236 \n239 240 237 245 241 241 239 238 236 235 237 236 240 238 238 239 \n241 242 238 239 234 234 239 239 237 234 236 240 237 234 238 236 \n239 241 237 237 238 238 239 242 240 244 241 240 240 240 240 239 \n240 244 240 238 238 240 242 245 246 245 246 245 244 243 239 243 \n247 241 237 236 241 241 241 241 223  96  50  29  21  19  16  20 \n 27  36  35  33  40  19  16  15  18  19  21  21  24  28  30  33 \n 32  33  34  36  39  45  56  57  54  53  50  43  39  38  38  36 \n 37  37  35  35  37  41  44  45  45  47  47  46  49  47  48  48 \n 49  47  47  47  44  43  41  38  39  41  43  45  46  46  46  46 \n 44  43  42  40  38  36  32  31  33  33  31  30  29  29  29  29 \n 29  29  28  27  29  28  29  28  27  28  29  30  29  27  30  31 \n 29  29  32  30  29  31  31  30  32  32  35  37  38  39  39  36 \n 35  34  32  32  31  28  29  28  27  28  28  27  26  28  31  29 \n 27  27  27  29  28  27  27  28  28  31  32  32  37  38  42  45 \n 48  48  50  49  50  50  52  52  46  41  34  32  30  39  39  40 \n 48  67  83 108 141 196 243 198 148 151 188 140 154 149 147 141 \n144 150 134 161 173 195 204 153 132 126 123 124 129 135 138 133 \n139 142 139 132 127 125 132 137 132 133 130 132 134 133 133 135 \n138 138 138 138 143 138 130 126 126 129 132 133 132 130 131 136 \n132 128 127 130 133 135 133 130 131 134 138 133 131 131 125 130 \n129 129 130 132 127 125 124 128 129 130 136 134 129 127 127 125 \n123 122 126 124 123 123 124 123 125 129 131 130 132 130 125 128 \n132 129 124 126 128 126 123 130 130 128 130 130 130 131 130 124 \n124 133 129 133 213 246 247 247 236 233 239 247 247 245 232 175 \n177 191 164 122 219 191 188 119 178 176 132 132 128 133 166 192 \n156 175 170 136 159 156 159 177 168 173 170  98 131 116 159 174 \n173 174 175 173 173 174 174 174 177 177 177 175 174 176 176 174 \n170 167 172 171 171 171 176 165  44  51  31  28  27  26  25  24 \n 24  24  22  22  22  22  24  25  25  24  25  25  27  27  27  27 \n 30  32  32  31  26  25  24  23  25  26  25  23  23  24  24  23 \n 24  23  25  25  25  26  27  27  28  29  31  33  33  32  32  32 \n 32  31  31  32  36  43  46  69 154 164 209 237 242 241 244 243 \n239 242 240 243 238 241 242 240 236 234 244 244 245 242 238 237 \n237 236 236 240 240 244 240 242 242 241 244 242 236 243 238 235 \n241 243 239 238 240 243 243 243 245 243 241 242 241 241 241 241 \n243 244 244 242 243 248 244 241 238 239 236 240 243 243 242 245 \n247 242 236 244 247 243 249 243 223 100  51  33  21  19  16  19 \n 26  34  36  33  37  19  16  17  18  20  22  22  24  27  30  31 \n 32  33  36  39  38  44  56  58  56  55  51  43  39  38  37  37 \n 36  36  35  35  39  43  46  45  44  46  44  44  47  46  48  47 \n 48  47  47  47  46  45  43  40  40  40  42  45  45  47  46  44 \n 44  43  43  40  37  36  34  33  33  32  30  31  30  28  29  28 \n 28  28  30  27  27  28  29  28  27  28  28  28  28  28  29  30 \n 30  30  30  29  29  31  30  29  30  30  33  36  37  39  39  37 \n 34  33  31  31  28  28  30  28  27  28  26  27  27  27  30  28 \n 26  27  28  29  27  26  26  27  28  29  31  31  34  35  39  43 \n 47  47  48  47  49  51  51  50  50  46  39  34  29  34  39  35 \n 39  45  61  78 124 202 212 188 156 140 187 143 153 152 147 146 \n151 147 123 152 171 192 206 160 140 135 129 125 130 135 141 138 \n146 144 133 133 131 127 132 135 131 125 128 133 133 132 137 137 \n139 143 144 138 142 141 130 128 131 134 136 133 126 126 129 137 \n137 134 134 137 138 137 136 131 132 136 134 136 135 132 130 131 \n130 128 130 132 127 126 127 128 127 126 132 133 128 126 127 126 \n128 129 128 127 126 126 119 116 119 122 126 128 129 129 125 130 \n130 127 127 130 132 129 124 128 128 132 134 132 137 135 133 132 \n128 132 138 160 241 246 247 243 241 236 237 246 250 247 223 171 \n179 194 153 132 225 193 189 124 187 173 129 135 130 138 171 193 \n130 178 174 141 165 152 151 182 132 142 174  99 172 168 160 175 \n173 167 164 171 173 173 174 172 175 175 176 174 176 175 175 175 \n160 163 168 171 171 170 171 180  76  48  38  29  27  27  26  26 \n 25  23  23  24  24  23  25  24  24  24  25  25  26  26  27  28 \n 31  31  32  30  26  25  25  24  23  26  25  24  25  24  26  24 \n 23  22  23  25  25  27  28  29  28  28  29  32  31  29  28  29 \n 32  33  33  32  34  37  41  53 114 164 166 164 191 198 186 179 \n197 219 239 241 245 244 239 240 245 241 242 242 248 242 242 239 \n242 247 248 245 236 235 237 237 237 238 240 239 236 240 239 240 \n242 237 237 239 241 240 241 241 240 239 236 242 236 239 240 236 \n234 240 242 238 237 244 240 242 246 244 242 243 240 240 237 237 \n239 244 244 244 242 239 247 244 226 107  51  33  21  19  17  17 \n 25  36  34  31  37  20  16  15  18  19  19  22  24  25  31  32 \n 35  36  36  37  38  43  52  56  55  53  52  46  41  41  38  37 \n 37  36  36  37  39  43  45  45  43  44  43  44  45  46  47  46 \n 46  45  45  46  45  47  45  43  40  38  39  41  44  46  45  45 \n 45  44  45  40  35  34  33  32  32  31  29  30  29  27  28  28 \n 28  29  29  27  28  27  27  27  27  28  29  28  27  28  28  29 \n 30  30  30  30  29  26  27  28  29  31  36  36  38  38  38  37 \n 33  30  29  28  28  28  28  27  27  27  26  27  27  29  31  28 \n 27  26  27  30  27  27  25  26  28  27  29  30  30  32  36  40 \n 45  48  49  49  50  51  53  52  49  49  46  38  30  29  35  38 \n 33  36  42  54  94 139 149 173 167 134 184 159 150 154 149 152 \n149 133 122 146 173 189 204 170 140 137 135 131 132 133 132 133 \n142 148 137 136 135 132 128 132 127 125 127 130 136 134 145 142 \n133 137 134 132 137 135 130 138 141 137 133 127 125 132 138 142 \n144 139 135 141 145 142 131 128 138 132 135 133 135 138 133 131 \n130 130 131 132 132 135 130 129 132 130 133 132 126 126 130 133 \n132 131 130 129 133 130 122 118 117 117 122 124 120 119 125 126 \n121 123 125 126 123 124 124 126 131 135 128 129 132 126 130 131 \n127 133 157 214 242 236 247 244 241 241 241 247 245 242 211 169 \n186 201 135 145 234 199 188 127 196 174 126 137 128 139 174 191 \n108 174 174 170 175 165 152 155 132 136 172 131 141 179 152 171 \n178 150 149 154 136 149 169 153 164 167 171 172 172 175 176 156 \n100 143 166 123 120 158 172 176 108  46  40  31  26  26  27  27 \n 25  24  24  25  26  25  25  23  25  24  23  25  26  26  27  29 \n 30  30  32  30  26  25  24  22  21  25  26  24  26  24  24  23 \n 23  22  23  26  25  25  27  28  27  29  29  30  29  29  28  29 \n 30  32  33  32  34  37  41  47  82 152 173 146 130 137 127 122 \n132 148 171 192 197 201 216 228 236 234 237 238 240 240 238 238 \n238 246 247 248 237 235 232 227 227 232 239 247 246 246 239 237 \n237 238 244 240 243 239 243 243 241 239 241 239 236 236 232 235 \n244 240 238 234 233 239 240 246 244 243 244 245 245 244 242 245 \n245 244 246 245 246 247 248 246 229 111  51  31  20  18  17  18 \n 24  35  33  31  41  20  17  17  17  19  21  22  24  25  29  32 \n 32  34  34  37  38  41  51  55  55  52  53  47  41  40  40  37 \n 38  37  36  37  40  43  43  45  42  44  43  45  44  47  47  46 \n 46  45  44  45  45  46  44  42  39  37  39  41  43  46  47  46 \n 45  45  44  39  35  33  33  32  32  30  29  30  30  29  28  30 \n 30  30  30  30  30  29  26  27  28  28  28  28  28  28  27  28 \n 27  28  29  29  29  28  29  28  29  31  35  36  36  37  38  37 \n 33  30  30  27  27  27  26  26  28  27  26  26  25  28  29  28 \n 27  27  28  29  27  27  26  26  27  28  28  30  30  32  34  37 \n 44  48  48  49  51  51  53  52  52  50  47  45  33  26  29  39 \n 33  31  38  44  75 118 147 166 176 137 175 167 146 152 151 155 \n135 123 131 138 169 182 206 180 136 136 138 139 128 122 127 127 \n130 126 129 130 132 136 134 131 137 136 137 138 138 146 150 150 \n140 138 134 134 138 142 133 140 136 132 127 127 129 134 140 143 \n146 138 133 140 144 144 138 136 140 133 134 136 138 136 133 131 \n127 131 132 133 132 132 128 131 130 131 133 135 133 131 140 141 \n135 132 130 128 139 134 127 125 121 120 124 120 116 122 131 128 \n124 123 119 125 130 128 130 132 126 125 129 138 134 127 123 123 \n126 140 199 239 239 234 231 233 241 241 240 242 242 245 200 166 \n190 205 127 155 240 201 188 129 201 173 130 137 128 137 176 183 \n 84 162 174 178 176 176 176 174 171 173 168 175 130 110 114 169 \n176 160 135 151 140 170 137 151 142 154 130 148 141 149 174 165 \n107 114 168 115 125 152 175 173 146  61  46  32  27  26  25  25 \n 25  26  25  25  24  23  24  24  24  24  26  25  25  25  26  28 \n 30  33  31  29  30  25  25  23  23  24  24  24  24  24  24  24 \n 25  23  23  23  23  25  25  28  26  28  29  29  28  28  27  27 \n 29  31  31  32  33  34  39  44  59 122 169 163 128 119 115 119 \n124 125 121 120 120 121 124 129 132 132 141 146 152 167 180 192 \n203 210 224 229 243 245 244 244 241 239 239 236 230 226 235 241 \n238 242 238 238 245 240 242 247 244 243 244 244 240 236 238 236 \n236 235 238 243 247 243 237 244 239 237 243 241 245 244 241 244 \n247 249 247 245 241 243 246 242 238 124  54  38  22  18  18  19 \n 23  32  34  31  39  21  16  17  18  20  23  24  23  25  29  32 \n 32  32  34  35  37  40  47  53  53  52  50  48  41  39  39  38 \n 38  36  36  35  39  42  44  44  43  43  43  43  44  43  44  46 \n 45  43  44  44  44  42  39  40  39  39  39  40  44  46  46  46 \n 45  44  41  40  37  34  33  31  31  29  29  28  29  28  28  28 \n 29  29  28  29  28  27  27  27  27  27  27  28  28  28  28  27 \n 25  26  26  28  29  29  28  28  30  29  34  35  37  36  37  36 \n 31  29  31  28  28  27  27  26  25  24  24  25  26  28  29  28 \n 26  27  29  29  27  26  27  26  26  27  28  29  29  32  33  36 \n 40  44  47  48  49  50  48  50  51  51  50  49  39  29  25  31 \n 34  30  30  41  49  94 136 149 183 138 159 182 138 148 147 143 \n132 137 137 135 159 172 203 199 137 141 133 132 133 130 140 142 \n140 136 138 134 140 144 136 131 147 144 135 143 137 133 140 154 \n148 136 132 137 140 142 135 135 131 130 132 131 132 135 141 138 \n139 137 135 136 139 139 134 135 142 136 135 139 141 141 140 133 \n128 128 133 134 137 137 133 131 130 132 134 135 137 137 140 136 \n130 130 130 131 140 131 126 128 128 132 137 128 124 132 135 128 \n130 131 129 133 139 137 130 128 122 128 122 126 132 132 130 132 \n156 208 236 245 237 230 230 228 243 237 235 243 246 247 195 163 \n193 201 117 172 241 201 186 135 206 170 128 136 126 142 177 178 \n 66 151 175 177 177 180 177 176 176 177 177 177 172 165 169 175 \n178 174 160 180 143 151 134 154 146 172 144 146 172 150 164 174 \n148 100 179 142 116  99 174 174 166  84  53  35  28  27  27  25 \n 25  26  26  26  26  24  24  24  25  26  26  24  24  24  27  27 \n 30  30  31  31  29  27  25  25  23  24  23  24  25  24  25  25 \n 25  23  23  22  23  25  26  28  27  28  30  30  28  28  27  27 \n 28  29  29  31  32  32  36  39  47  76 161 167 133 115 115 121 \n125 125 128 127 124 121 119 119 122 130 131 130 124 127 128 128 \n133 141 141 149 178 191 202 210 212 223 239 226 234 239 242 241 \n235 242 244 245 243 245 240 244 239 237 238 241 243 241 242 241 \n241 241 247 250 245 239 238 238 241 243 246 247 246 241 244 245 \n243 247 243 244 242 243 243 239 236 127  54  41  22  17  17  17 \n 22  33  33  30  39  21  17  17  17  19  21  22  24  25  28  30 \n 31  31  33  35  36  38  45  52  53  51  49  50  45  41  40  39 \n 36  36  36  35  39  42  43  43  43  43  43  43  44  43  44  44 \n 45  47  47  47  44  42  40  39  39  40  40  40  43  46  46  46 \n 45  44  42  39  36  35  33  30  31  29  28  28  29  29  28  28 \n 28  27  28  28  27  26  26  26  27  27  27  27  27  27  27  28 \n 27  27  26  27  29  29  30  29  29  29  32  34  36  36  37  35 \n 32  29  31  30  27  27  27  26  25  24  25  23  24  26  29  27 \n 26  26  28  28  28  27  26  25  27  28  28  29  31  32  32  35 \n 37  43  47  47  48  50  48  49  50  50  51  51  45  36  27  28 \n 36  30  29  33  42  66 126 148 179 147 151 185 133 147 137 128 \n135 139 141 139 153 162 198 206 139 141 137 136 133 134 137 137 \n138 131 137 142 138 139 136 133 143 140 134 137 135 134 140 149 \n146 144 139 138 135 132 136 146 138 128 131 132 136 139 141 141 \n134 132 134 137 136 135 136 134 136 136 140 141 142 142 140 137 \n134 130 133 133 138 141 139 139 139 138 140 137 137 137 133 129 \n131 128 132 138 138 138 138 133 126 131 141 137 132 129 127 129 \n134 138 137 136 134 132 136 141 132 132 129 137 136 133 143 178 \n218 236 238 238 246 245 243 239 244 246 241 246 245 249 191 166 \n192 195 116 187 234 194 187 145 210 169 125 133 123 148 177 175 \n 54 124 178 175 178 177 178 178 177 178 176 178 179 177 176 176 \n178 179 177 177 174 170 174 169 156 171 164 172 153 142 164 174 \n167 103 177 154 140  77 165 172 175 119  60  40  29  28  26  25 \n 26  26  26  25  23  24  25  24  25  25  25  25  25  25  27  29 \n 29  29  30  29  28  29  25  27  25  23  23  24  25  24  24  25 \n 24  24  23  23  23  24  27  27  27  27  31  30  29  28  27  28 \n 28  27  27  30  31  32  33  38  44  46 130 169 150 126 114 114 \n116 118 117 118 119 120 118 120 116 115 117 115 114 111 113 117 \n121 121 124 125 125 123 124 125 126 130 142 154 169 187 201 204 \n215 223 228 233 244 246 235 236 240 235 235 236 243 245 244 245 \n244 245 242 238 240 240 239 244 244 242 237 240 241 245 250 248 \n243 245 248 246 242 244 242 246 247 140  50  34  21  17  17  17 \n 21  32  34  31  41  21  18  18  16  19  21  22  24  25  28  32 \n 30  32  34  35  35  39  43  51  53  52  51  49  45  42  39  38 \n 37  38  35  35  38  41  43  43  44  43  44  46  45  45  44  44 \n 44  44  44  45  44  42  40  40  39  40  39  39  42  45  46  45 \n 43  43  42  39  37  35  32  31  31  30  29  28  29  29  28  28 \n 27  26  27  27  27  28  27  27  27  25  26  26  28  28  28  28 \n 29  29  29  30  28  29  30  29  29  29  30  33  36  36  37  35 \n 32  30  31  30  27  25  26  25  26  25  25  23  27  27  28  27 \n 27  25  28  28  28  28  26  26  27  27  28  28  30  28  31  33 \n 38  43  49  48  46  46  47  48  51  50  51  51  49  44  33  28 \n 33  33  29  27  37  45 102 138 171 153 142 184 139 147 111 126 \n137 139 143 143 147 162 194 202 143 141 140 144 141 135 132 133 \n137 143 141 134 131 138 146 146 143 139 141 137 134 135 138 144 \n147 141 138 133 135 131 133 135 140 141 139 137 136 136 141 139 \n139 137 136 135 137 134 136 137 140 138 141 138 145 145 144 143 \n139 133 132 131 135 137 139 142 139 138 140 134 130 127 130 127 \n129 133 136 136 133 130 132 136 133 131 138 137 131 123 130 137 \n132 131 132 132 132 140 143 139 136 136 140 144 158 176 204 229 \n243 239 236 238 238 239 248 249 239 237 243 238 238 244 172 169 \n192 182 121 199 238 195 187 158 209 166 133 137 125 147 173 169 \n 51  94 183 175 178 179 177 178 180 178 176 179 178 178 177 176 \n176 178 179 178 178 177 177 177 179 175 176 175 171 173 174 175 \n172 153 174 173 134 127 169 170 175 148  58  45  30  28  25  26 \n 26  25  25  25  23  24  25  24  25  24  25  25  23  23  27  28 \n 30  30  29  29  29  29  25  26  23  23  23  24  25  24  24  24 \n 25  26  24  24  23  24  26  27  26  27  31  30  29  28  26  28 \n 28  28  28  28  30  33  32  35  40  45  92 164 157 133 108 112 \n112 110 108 109 114 115 115 113 111 109 106 110 115 113 111 118 \n117 118 120 124 125 128 128 129 126 123 120 123 126 129 132 133 \n135 142 146 160 195 224 234 233 234 238 234 229 236 239 246 246 \n243 243 243 246 249 246 246 246 247 245 243 245 242 243 246 246 \n244 241 243 243 246 247 242 240 240 141  48  30  21  19  18  18 \n 23  32  34  30  40  22  16  16  16  18  20  21  23  24  28  32 \n 30  30  32  34  36  38  41  50  54  53  51  50  46  43  40  37 \n 38  37  36  37  38  40  43  44  43  42  43  46  45  45  44  44 \n 43  44  45  43  41  41  39  38  38  39  38  38  41  43  44  44 \n 43  42  41  39  34  35  32  31  31  31  30  28  29  29  27  27 \n 27  27  27  27  27  27  26  25  27  25  26  25  27  26  26  27 \n 27  28  27  27  29  30  30  29  29  30  29  32  36  36  35  34 \n 32  31  30  28  26  26  25  25  26  26  24  24  26  25  27  27 \n 28  26  28  28  28  28  27  28  27  26  27  29  30  30  32  33 \n 37  44  48  47  47  47  48  47  49  50  51  50  49  47  38  29 \n 29  34  29  26  34  41  79 129 170 160 137 180 149 130 111 133 \n140 143 143 142 146 164 192 202 151 147 146 145 136 131 128 129 \n134 140 136 131 131 133 140 143 141 144 144 133 129 134 135 142 \n145 140 135 140 142 137 142 143 143 141 136 134 136 136 142 141 \n141 140 142 138 140 136 133 137 145 143 145 148 149 147 145 148 \n142 141 137 131 139 139 137 138 136 135 134 129 131 133 129 127 \n133 141 130 137 136 137 138 141 140 134 135 138 135 132 130 134 \n131 132 131 129 133 138 137 141 137 138 152 177 214 230 227 239 \n245 240 239 240 241 246 249 242 235 237 237 238 240 237 155 174 \n191 170 127 211 240 202 184 168 210 164 139 139 131 147 176 157 \n 49  69 175 175 177 177 179 179 179 178 179 178 180 179 177 176 \n177 178 179 180 180 178 178 177 177 175 175 176 175 177 176 176 \n176 172 175 176 175 172 169 171 169 170  64  48  34  30  27  24 \n 25  25  25  25  25  24  24  25  25  23  24  25  23  25  27  29 \n 28  28  30  31  28  28  27  26  25  24  22  23  24  23  25  26 \n 25  25  25  26  24  24  26  27  27  27  28  27  26  28  28  29 \n 29  27  28  27  30  30  31  32  39  44  61 134 160 151 112 108 \n113 109 107 109 114 113 108 111 114 113 112 110 109 110 115 118 \n112 112 114 114 115 114 118 117 115 116 113 114 118 120 125 126 \n125 123 123 125 123 129 139 145 150 156 163 171 188 197 211 222 \n232 241 237 239 243 243 245 243 241 238 240 241 242 249 240 240 \n242 244 243 242 245 241 243 239 240 140  50  33  20  18  18  18 \n 21  30  35  32  38  21  17  17  16  17  17  19  22  24  27  31 \n 32  31  31  34  35  37  41  49  54  54  52  52  49  45  41  38 \n 40  39  37  38  39  40  41  43  42  42  44  45  44  44  44  44 \n 45  43  42  41  40  39  36  36  37  38  37  37  41  43  45  45 \n 45  42  41  39  35  34  31  32  30  30  30  28  28  28  27  26 \n 27  27  26  25  25  24  26  25  26  25  26  26  26  25  25  25 \n 27  27  28  28  28  29  29  29  29  30  30  33  36  37  35  34 \n 32  31  31  28  26  27  25  26  26  28  26  27  25  26  28  27 \n 25  26  27  28  28  27  27  28  28  27  28  28  29  31  31  32 \n 37  45  48  47  47  45  48  48  47  47  50  50  50  49  46  36 \n 29  32  30  26  29  39  53 106 168 165 139 168 159 135 135 141 \n142 139 142 146 150 157 183 198 171 151 150 146 136 134 134 135 \n138 136 130 135 135 132 143 142 137 141 145 147 142 140 142 140 \n136 137 140 139 141 139 140 137 140 138 135 145 144 138 140 142 \n144 141 142 146 143 137 136 133 135 139 141 144 140 138 137 138 \n147 146 144 139 134 131 137 150 142 133 134 133 133 139 142 139 \n141 140 138 143 136 133 135 142 142 134 136 141 137 136 135 135 \n137 139 139 129 134 144 152 159 179 199 224 238 248 242 235 235 \n241 248 246 243 239 243 239 236 247 244 237 243 247 231 150 180 \n194 158 135 220 230 198 183 172 210 162 131 125 132 146 178 148 \n 46  55 154 177 177 175 177 177 178 178 180 179 178 178 178 177 \n176 175 177 179 180 177 177 178 177 175 174 176 176 177 177 178 \n177 172 175 176 176 174 172 172 170 175  75  46  38  29  26  25 \n 25  26  25  25  24  24  23  24  25  23  23  24  26  26  28  28 \n 28  30  32  32  29  28  27  27  25  24  24  23  23  24  25  25 \n 23  24  25  24  23  25  26  26  27  27  27  28  28  28  29  28 \n 27  26  27  27  27  29  31  31  36  44  47  99 164 157 130 108 \n114 112 112 111 110 110 109 108 107 111 114 109 105 107 113 114 \n113 114 113 112 110 110 113 116 120 118 117 119 121 118 123 123 \n121 118 119 120 123 124 122 124 126 127 126 128 129 133 139 141 \n155 171 184 200 218 224 233 239 240 245 248 244 244 243 239 238 \n236 246 245 240 246 243 238 242 245 138  49  32  20  19  18  19 \n 20  30  36  30  39  20  17  19  16  16  18  19  22  26  28  31 \n 32  32  32  33  36  37  40  47  54  55  54  55  52  48  42  42 \n 39  38  37  38  38  39  41  43  43  45  43  42  43  45  44  44 \n 45  44  42  39  38  38  35  37  36  37  35  36  39  43  44  44 \n 44  43  40  39  34  35  32  32  32  30  29  29  28  28  29  28 \n 27  28  28  28  25  24  26  25  26  24  26  26  27  27  26  28 \n 27  27  27  28  27  27  27  27  27  28  28  32  35  36  34  32 \n 30  32  30  27  26  26  26  26  27  26  26  27  27  27  28  27 \n 25  26  27  28  28  26  25  27  28  27  27  27  29  31  30  32 \n 36  45  49  48  47  45  46  47  47  46  46  48  50  49  49  42 \n 29  30  31  27  28  37  42  87 156 174 136 157 164 143 137 138 \n144 143 146 143 143 156 178 198 187 144 148 153 150 146 148 149 \n146 146 142 143 143 141 147 141 139 145 147 150 147 142 142 141 \n148 149 147 140 141 136 138 135 134 136 138 142 142 141 141 139 \n146 139 139 148 146 139 136 136 134 133 140 141 143 143 140 145 \n148 144 141 141 143 148 145 144 138 137 135 132 133 139 142 139 \n140 137 139 140 140 144 146 147 143 137 139 137 138 135 137 139 \n145 145 141 140 160 183 210 228 236 238 240 235 240 239 247 246 \n239 245 242 236 243 242 243 241 244 240 233 235 247 230 154 181 \n200 143 146 229 208 196 182 174 207 159 135 130 132 150 179 144 \n 45  47 121 177 178 178 174 178 179 179 178 179 178 179 179 177 \n176 175 176 177 179 179 175 175 175 175 176 176 177 177 176 176 \n177 172 174 175 175 176 173 172 169 171 108  40  40  29  28  25 \n 24  25  24  24  24  23  22  24  24  24  24  23  25  25  27  27 \n 27  29  31  30  28  27  27  27  25  24  25  25  27  27  26  25 \n 25  25  26  25  25  24  24  25  26  26  28  28  30  29  27  28 \n 26  27  26  25  26  27  30  32  33  40  46  58 150 160 146 116 \n114 114 108 109 114 113 109 109 108 111 114 112 109 114 117 113 \n112 115 114 116 113 115 116 118 116 118 120 119 116 117 120 122 \n118 118 118 118 119 120 120 118 119 121 122 121 120 121 125 122 \n127 128 124 124 128 131 139 149 164 184 203 215 224 234 233 235 \n236 246 243 240 245 237 238 240 240 141  50  32  20  18  20  19 \n 19  27  34  30  41  23  18  17  17  16  18  20  23  26  29  30 \n 31  31  34  32  35  37  39  46  54  55  53  52  49  45  41  40 \n 39  38  37  38  38  39  42  43  43  44  43  43  43  43  43  42 \n 41  42  40  39  37  38  37  36  34  35  36  35  36  41  42  41 \n 41  42  38  38  35  32  32  31  32  30  28  28  28  29  29  26 \n 26  27  27  26  25  25  26  26  26  26  25  26  27  26  25  28 \n 27  26  26  26  26  26  27  28  28  28  28  31  34  35  34  32 \n 30  31  31  28  26  26  27  25  27  25  25  25  26  27  28  28 \n 27  25  26  26  27  27  26  27  27  25  27  28  29  31  30  32 \n 36  46  48  46  47  47  46  45  47  47  47  47  50  50  49  45 \n 34  25  31  27  26  31  41  58 136 175 134 141 175 141 140 137 \n141 139 137 138 140 155 176 196 198 147 156 152 146 146 155 156 \n152 145 142 142 143 147 146 144 145 147 147 152 147 145 141 142 \n145 145 145 140 139 137 134 132 131 130 136 141 143 141 141 144 \n148 144 137 137 142 139 142 141 145 147 146 149 149 150 145 143 \n147 145 142 144 145 147 145 143 139 143 140 140 144 149 142 140 \n146 142 142 145 134 137 144 147 141 138 138 138 143 142 144 142 \n144 158 186 216 231 237 241 243 237 238 236 238 239 237 246 247 \n240 235 236 236 247 245 245 246 241 245 247 243 244 214 156 186 \n194 129 162 216 159 189 186 173 208 152 138 136 132 153 179 130 \n 45  45  86 134 159 173 180 179 177 178 177 179 178 178 177 177 \n176 175 177 175 177 178 174 175 173 174 175 176 175 176 176 176 \n176 173 172 175 175 173 174 173 170 169 135  49  41  30  29  25 \n 25  25  25  25  26  24  22  24  24  25  26  25  27  26  28  29 \n 28  29  32  31  27  26  26  24  24  23  24  26  27  27  27  24 \n 25  26  26  26  25  25  25  26  27  27  28  30  31  31  29  28 \n 25  25  26  25  27  26  27  31  32  35  44  48 117 161 154 132 \n115 116 108 103 104 103 102 103 107 109 108 109 110 109 107 109 \n110 111 113 116 118 121 119 121 120 124 122 115 117 119 118 119 \n120 119 120 120 119 117 122 121 121 122 121 119 119 119 120 123 \n125 125 123 124 125 128 127 130 130 134 139 144 168 199 234 242 \n240 237 246 238 247 243 245 245 244 144  52  31  20  18  18  18 \n 19  28  34  29  37  21  16  16  18  17  18  21  23  25  29  29 \n 29  31  33  32  34  35  39  45  54  56  55  53  49  45  42  41 \n 39  39  35  35  38  40  42  43  43  41  43  45  44  44  42  41 \n 41  42  39  37  36  35  37  35  33  34  35  35  35  40  41  41 \n 40  41  38  37  35  32  32  31  31  30  26  27  28  28  28  27 \n 27  27  28  28  26  26  26  26  26  28  25  27  26  27  27  28 \n 26  26  25  26  26  27  27  28  27  27  28  29  32  34  34  33 \n 30  32  31  27  26  25  26  27  27  26  25  25  26  26  27  27 \n 26  24  26  27  26  28  26  27  26  26  29  29  30  30  30  32 \n 37  46  46  45  46  46  46  46  46  47  48  45  49  49  49  47 \n 40  29  29  30  26  28  39  43 117 173 137 140 178 141 145 141 \n146 144 141 141 139 149 182 196 201 150 157 147 146 142 143 147 \n150 146 148 141 141 143 146 149 149 150 145 145 144 142 138 138 \n143 139 144 146 143 135 138 140 136 135 137 139 142 143 145 147 \n150 149 148 143 144 140 143 142 143 143 146 146 150 154 143 144 \n149 147 145 145 146 145 140 137 142 142 141 145 145 148 149 148 \n149 147 144 144 136 140 146 149 143 138 140 141 150 163 185 203 \n217 223 235 233 234 246 246 248 244 242 239 239 242 238 239 248 \n245 243 240 238 246 247 239 236 244 243 238 231 237 190 162 190 \n188 120 173 168 145 185 186 174 211 150 135 133 139 155 180 125 \n 40  43  49  52  56  72  95 120 138 147 161 170 173 174 176 176 \n176 175 175 174 176 178 176 175 171 173 174 175 175 176 178 176 \n175 176 172 173 174 173 172 172 169 168 156  67  44  33  27  24 \n 25  25  25  24  23  23  23  24  25  26  25  24  25  25  26  27 \n 28  31  32  31  29  28  27  25  26  25  26  27  26  27  26  24 \n 23  25  25  25  25  24  26  27  27  26  28  29  30  31  27  28 \n 26  26  25  25  24  24  26  30  30  31  42  44  74 151 160 151 \n109 106 108 106  97  98  99 101 102 105 109 108 103 102 102 103 \n105 109 112 115 118 119 117 118 116 117 116 116 115 117 118 117 \n118 119 118 115 120 121 118 117 120 119 116 118 121 121 120 121 \n121 122 125 125 123 122 123 128 127 129 133 132 134 136 167 210 \n246 238 244 242 239 236 233 236 239 139  50  33  21  17  16  16 \n 21  29  33  31  36  21  15  15  16  16  19  21  24  25  30  31 \n 31  31  32  31  33  35  38  42  54  56  56  52  49  45  40  40 \n 40  37  36  36  36  38  43  42  44  42  44  44  44  43  43  43 \n 39  38  37  37  35  34  35  34  35  35  36  36  36  38  39  40 \n 40  41  39  38  35  32  31  28  30  29  28  28  27  27  27  27 \n 26  28  27  26  25  27  25  27  27  28  26  27  28  27  26  27 \n 26  25  27  25  25  28  29  29  28  28  28  27  31  33  34  32 \n 31  32  31  29  27  27  27  27  26  25  25  24  26  27  28  28 \n 25  25  27  27  26  26  26  26  26  26  26  28  29  29  31  34 \n 38  44  44  44  45  45  46  47  46  44  45  46  47  48  49  49 \n 43  36  29  31  27  27  35  39  80 163 142 146 163 144 157 150 \n150 145 142 145 141 137 181 188 206 158 152 144 144 151 148 149 \n149 143 147 145 145 148 148 149 145 146 149 149 154 153 148 146 \n147 144 144 152 147 140 141 147 138 137 140 142 141 143 150 148 \n150 143 144 144 148 145 144 142 145 145 147 146 147 147 150 149 \n143 139 146 146 144 142 143 140 141 143 143 145 142 149 148 149 \n147 144 145 147 143 138 143 144 149 159 172 194 220 229 242 245 \n244 247 249 244 245 251 242 243 245 243 239 239 239 244 241 242 \n244 246 246 243 248 242 239 238 242 244 239 237 236 178 165 191 \n181 115 179 140 151 192 181 170 209 150 133 131 141 157 175 118 \n 38  41  43  51  58  61  64  71  70  76  89 106 123 134 147 157 \n164 169 173 172 174 177 175 175 174 173 175 174 175 175 176 177 \n173 175 171 171 174 172 170 170 168 168 163  80  42  34  26  27 \n 25  25  24  24  24  23  23  24  24  24  24  23  23  24  24  26 \n 28  30  32  34  31  30  27  26  25  23  24  24  24  26  26  24 \n 23  24  25  25  27  26  26  26  27  27  27  29  28  30  29  27 \n 27  26  24  24  24  25  26  27  30  31  38  43  58 124 164 160 \n127 106 105 105 102  99  99  97 100 102 103 103 102 101 105 106 \n108 109 112 113 112 115 115 116 113 113 114 114 114 111 116 117 \n118 119 120 119 118 118 115 115 117 115 117 118 118 120 123 125 \n124 122 125 124 124 125 121 125 123 126 129 131 132 135 133 146 \n220 244 250 244 242 236 235 238 230 127  53  32  20  18  15  15 \n 20  28  34  32  37  22  16  18  17  17  20  19  23  25  29  31 \n 31  31  35  34  34  36  38  40  52  55  56  54  51  46  42  40 \n 38  37  38  36  37  40  42  42  42  39  42  43  44  45  43  43 \n 40  38  38  35  35  36  35  35  34  35  35  34  34  37  40  40 \n 40  41  39  37  34  32  31  28  29  27  26  28  28  27  26  27 \n 28  28  27  26  25  26  26  27  27  26  27  27  26  26  26  26 \n 26  27  26  25  27  27  28  30  30  29  28  28  32  33  33  32 \n 29  32  32  28  28  27  26  27  26  25  26  26  26  26  27  27 \n 24  24  26  26  26  26  26  27  26  25  25  28  29  29  31  34 \n 37  43  44  45  46  45  46  45  42  41  43  44  44  46  48  50 \n 46  39  30  29  27  23  32  38  60 146 148 156 143 141 159 148 \n149 146 142 145 144 134 174 180 207 169 154 151 138 147 151 148 \n146 145 142 142 146 148 146 142 138 140 149 148 151 151 155 151 \n151 147 143 147 149 149 145 147 143 145 146 143 143 145 148 149 \n149 144 144 141 146 147 146 148 149 147 147 146 148 148 150 149 \n143 141 146 146 144 146 150 148 144 149 148 147 147 149 148 150 \n146 149 153 151 147 145 155 171 198 214 230 242 247 241 242 244 \n245 250 251 251 247 247 242 239 242 244 240 240 247 250 246 242 \n244 246 240 239 247 245 241 243 245 247 241 242 237 173 167 195 \n168 114 182 136 148 190 183 173 202 150 138 132 141 156 173 116 \n 38  38  41  46  55  57  58  59  60  60  64  67  74  78  76  80 \n 90  96 110 122 132 140 152 160 165 169 171 169 171 172 173 176 \n173 175 172 171 171 171 168 168 170 167 168 111  32  28  24  26 \n 26  26  24  25  25  24  24  24  23  23  24  24  24  25  24  26 \n 27  28  31  32  30  30  27  27  26  25  23  23  24  25  25  23 \n 25  24  24  24  25  26  24  25  26  26  28  28  28  29  28  26 \n 26  25  24  24  24  25  27  27  28  30  34  41  48  79 165 168 \n147 112  99  99 102 101  97  97  99 100 102 104 102 103 105 114 \n114 111 109 109 110 111 116 117 115 114 116 117 118 120 118 118 \n118 120 122 122 118 119 116 117 118 118 120 117 115 120 123 124 \n123 121 125 123 122 125 121 126 125 125 127 129 128 129 131 125 \n192 246 246 239 242 238 244 243 239 141  52  32  19  18  17  17 \n 18  25  35  32  34  21  15  15  15  16  19  20  24  25  27  31 \n 32  30  33  34  36  36  38  41  49  53  55  54  50  47  43  42 \n 40  39  39  39  39  40  41  41  42  41  42  42  43  42  43  42 \n 41  38  37  36  37  36  36  36  35  35  34  36  35  36  39  37 \n 39  40  38  36  34  32  30  26  28  26  26  27  29  26  26  25 \n 27  27  27  25  25  25  27  27  27  26  26  27  26  25  26  26 \n 25  25  26  26  28  28  29  30  30  29  30  29  32  33  33  32 \n 30  30  31  28  27  28  26  25  26  26  25  25  25  27  27  27 \n 26  26  26  25  24  25  25  25  26  27  26  27  27  29  30  32 \n 36  42  45  45  45  45  46  44  44  44  43  45  44  44  45  48 \n 49  45  32  27  29  24  28  37  48 110 151 157 146 125 150 145 \n143 144 143 139 145 133 173 176 205 185 148 153 148 147 148 148 \n149 147 144 144 148 150 149 145 143 151 155 155 151 147 148 151 \n154 146 143 139 140 149 142 142 142 147 148 145 144 147 149 152 \n153 140 140 144 146 144 143 145 143 143 147 146 145 145 147 146 \n142 140 142 145 144 144 145 141 141 145 152 155 149 147 149 150 \n152 151 156 165 181 196 221 237 248 246 246 249 251 249 246 250 \n248 248 248 247 243 241 243 237 236 234 240 245 243 240 238 244 \n251 243 247 248 243 245 244 240 240 240 243 241 232 168 168 199 \n153 123 183 139 141 189 182 169 195 147 140 134 144 160 170 117 \n 39  38  41  46  53  57  57  56  56  58  59  61  61  60  61  61 \n 64  61  67  73  77  73  79  97 108 113 115 120 127 136 148 155 \n161 166 171 169 170 172 171 169 168 168 169 141  28  27  25  27 \n 25  24  24  24  23  25  24  24  24  24  24  24  25  25  25  26 \n 26  28  32  32  31  30  29  27  26  26  25  23  25  26  26  25 \n 24  23  23  24  25  26  24  25  26  25  27  27  29  28  30  28 \n 26  25  24  25  24  25  25  25  27  27  32  37  43  54 144 169 \n160 127 102 107 101 100 100  99 100 102 105 109 106 107 111 114 \n113 113 110 109 112 113 116 113 112 116 119 117 122 123 119 119 \n123 125 121 119 120 119 115 120 123 120 118 120 120 120 124 124 \n121 122 123 120 121 121 121 123 121 123 130 129 127 124 128 127 \n197 246 248 240 239 247 243 240 243 152  49  33  18  16  16  18 \n 19  25  34  33  35  21  16  16  16  16  19  20  24  25  27  31 \n 34  32  34  34  36  35  36  40  48  53  55  54  50  48  44  41 \n 41  39  39  39  40  39  42  42  44  42  43  42  42  42  43  43 \n 42  39  36  36  36  36  35  36  35  34  34  36  34  35  38  35 \n 39  39  38  37  34  33  31  30  28  26  26  27  28  25  27  26 \n 27  26  27  25  24  25  25  25  26  27  26  27  26  25  27  27 \n 26  26  26  27  28  28  26  27  27  28  29  29  31  32  34  32 \n 31  30  32  31  28  26  28  26  27  25  26  26  25  26  28  28 \n 26  27  26  24  25  24  24  25  27  27  27  28  27  29  32  33 \n 37  41  43  44  44  44  44  43  45  47  45  46  46  45  43  46 \n 48  48  38  30  29  26  26  35  45  84 152 153 167 109 143 150 \n145 146 141 140 143 129 170 169 204 200 140 149 153 153 145 144 \n151 148 142 141 147 149 146 141 146 149 153 157 153 148 146 146 \n150 150 145 140 147 150 141 142 147 148 149 152 150 150 150 152 \n152 146 145 148 145 137 137 141 140 142 144 145 148 147 144 150 \n151 144 146 147 147 146 146 144 142 146 154 152 149 147 154 154 \n163 180 211 231 238 244 244 240 246 247 246 245 246 247 250 251 \n246 248 251 249 248 245 234 235 230 221 202 199 202 197 198 207 \n216 215 222 232 231 243 247 248 251 243 249 250 231 166 169 198 \n142 128 177 144 141 187 187 167 203 147 139 136 142 163 163 123 \n 39  40  41  47  50  52  55  55  55  57  58  58  57  57  57  56 \n 56  53  51  50  45  44  45  47  55  68  69  61  59  61  69  77 \n 77  75  79  81  85  88  91  95 102 107 110 104  31  25  25  26 \n 24  24  24  25  24  25  25  24  24  24  23  23  22  23  25  26 \n 27  29  33  32  32  33  28  27  26  26  24  24  24  27  26  26 \n 22  22  23  25  24  24  25  24  26  26  26  27  28  28  28  29 \n 27  26  25  24  25  25  26  26  27  27  30  34  41  44  93 159 \n164 154 106  98  99  96  94  96 101 105 106 105 103 107 111 110 \n110 110 112 113 109 109 109 108 107 112 116 117 120 123 123 126 \n121 122 120 119 123 120 119 117 117 117 117 118 120 119 121 117 \n120 122 120 122 120 118 117 118 119 123 122 123 120 124 129 143 \n220 233 241 240 247 237 235 241 245 156  47  33  19  17  14  16 \n 19  23  32  31  34  22  16  16  16  17  20  21  24  26  28  32 \n 33  32  33  34  35  35  36  39  46  51  53  53  52  52  47  44 \n 42  41  41  41  40  38  41  43  45  43  44  44  43  41  42  42 \n 41  41  38  36  36  34  34  36  35  33  35  35  35  36  37  38 \n 38  38  39  34  34  32  30  30  30  29  27  27  27  27  27  27 \n 28  26  26  26  26  26  26  26  25  26  25  27  27  27  27  26 \n 25  26  27  28  28  27  26  27  28  28  30  28  30  31  33  32 \n 30  32  32  30  26  26  26  25  26  26  24  24  26  26  26  30 \n 26  26  26  26  25  24  24  26  25  25  27  27  28  29  31  32 \n 37  42  44  44  44  42  41  42  46  46  46  46  46  45  43  45 \n 47  47  40  34  33  28  25  30  41  56 142 131 190 121 133 153 \n148 144 141 138 139 138 161 154 205 209 150 152 143 150 145 145 \n148 146 144 142 140 144 145 143 143 146 147 150 150 147 146 148 \n152 155 151 146 146 151 146 143 143 145 149 152 149 146 145 150 \n152 151 147 148 148 139 136 142 141 142 142 145 146 142 146 151 \n147 146 146 146 151 151 151 152 150 149 151 155 155 164 181 206 \n232 241 247 250 249 249 245 240 241 247 248 246 247 248 247 247 \n245 251 247 245 236 220 184 169 165 170 177 184 187 186 186 188 \n190 193 192 194 194 199 206 213 215 221 230 238 217 165 170 200 \n128 145 167 146 145 185 182 169 209 144 140 136 145 164 153 127 \n 39  38  39  42  46  50  53  54  54  55  58  57  54  55  54  56 \n 55  52  49  46  44  43  41  40  41  42  42  44  44  45  51  56 \n 58  58  58  52  45  42  40  37  33  34  33  33  29  22  24  26 \n 26  26  25  25  24  25  25  25  25  25  24  24  23  23  23  26 \n 27  30  31  33  32  32  30  29  26  26  25  25  25  28  26  26 \n 22  24  23  23  23  24  26  25  25  27  27  28  27  29  29  29 \n 27  27  27  24  25  26  25  26  25  24  29  33  38  44  65 140 \n167 167 126  97 100  98  96  97  98 101 100  99  99 102 104 104 \n103 107 111 112 111 113 113 106 104 106 117 118 116 120 124 126 \n119 119 125 123 126 124 120 120 118 121 120 118 118 118 120 119 \n120 123 121 118 116 115 119 119 115 118 119 119 120 126 144 195 \n234 233 237 239 244 245 237 239 244 156  47  32  20  19  16  15 \n 17  22  33  30  33  21  17  17  17  17  19  20  24  26  31  34 \n 34  33  33  34  34  35  35  38  45  52  54  54  53  52  48  46 \n 42  42  41  41  37  37  40  43  42  42  43  42  43  41  39  41 \n 40  39  37  35  34  35  35  35  35  34  36  36  35  37  38  39 \n 39  38  38  32  33  33  29  30  31  30  27  27  25  26  27  28 \n 29  25  26  26  27  26  26  26  26  26  26  27  26  26  27  26 \n 25  26  26  27  26  25  25  27  28  27  28  29  29  31  32  32 \n 29  32  31  29  25  26  25  24  25  27  25  24  26  26  26  28 \n 25  25  25  24  24  24  26  27  26  26  28  28  29  29  31  31 \n 38  42  42  43  44  42  44  44  46  46  46  46  48  45  45  43 \n 47  46  38  34  33  29  26  29  39  46 124 121 189 157 129 151 \n142 142 142 144 144 147 156 146 199 206 156 151 147 142 141 140 \n143 143 148 149 145 143 143 147 148 148 145 150 147 151 153 155 \n152 150 151 144 145 146 144 144 144 145 143 146 152 150 152 153 \n151 150 146 143 147 145 137 145 147 144 143 143 147 148 153 153 \n145 148 147 147 151 151 154 162 154 150 159 175 196 218 238 245 \n244 243 247 248 248 250 244 243 247 247 246 242 243 247 243 248 \n248 242 241 234 174 152 152 161 161 159 158 157 158 159 160 159 \n163 166 172 177 182 186 192 195 198 199 203 206 197 179 171 182 \n134 153 156 149 153 190 179 169 207 144 137 135 145 167 148 140 \n 36  36  37  37  39  41  44  44  45  47  47  50  52  52  54  53 \n 52  51  49  47  42  41  40  40  39  40  39  40  40  40  46  50 \n 54  56  52  48  38  33  33  30  28  27  25  24  21  21  22  26 \n 27  27  27  26  25  25  24  25  25  25  25  24  25  25  25  26 \n 29  29  30  32  30  30  29  30  28  27  25  26  25  27  26  25 \n 24  24  23  24  22  24  26  26  26  26  27  29  27  30  28  27 \n 29  26  26  27  26  26  27  27  25  25  28  30  37  41  47  94 \n173 165 152 111 102 101 102 103 104 105 103 104 103 104 103  98 \n 96 100 104 106 111 111 109 109 103 103 109 110 108 108 114 116 \n119 118 119 120 119 118 122 121 123 121 120 120 119 120 120 119 \n122 123 121 118 114 116 117 118 116 116 118 118 124 145 207 233 \n233 240 242 239 236 240 240 245 246 158  50  33  19  17  17  16 \n 17  22  32  33  32  21  17  16  16  17  20  20  23  26  31  33 \n 34  34  32  35  35  36  36  37  43  49  51  54  54  53  48  44 \n 42  42  43  41  38  38  40  43  42  41  41  40  41  41  39  40 \n 38  37  37  36  35  35  35  35  36  36  36  35  35  36  39  40 \n 40  38  37  34  33  32  30  30  29  29  29  28  26  26  27  28 \n 27  26  26  25  27  26  26  27  25  25  25  26  25  26  25  26 \n 26  25  25  27  26  26  27  26  28  26  28  28  28  29  29  30 \n 31  32  31  30  28  27  26  24  26  25  25  24  25  24  25  26 \n 26  26  25  25  26  26  25  25  27  26  27  29  28  28  29  30 \n 35  42  44  44  42  41  43  44  46  47  46  44  46  45  45  45 \n 45  45  40  36  33  32  26  26  36  40  96 115 160 189 163 145 \n135 129 131 134 132 132 161 156 172 199 170 149 144 143 142 142 \n141 141 149 152 145 144 144 146 144 147 144 145 147 146 147 148 \n151 147 145 139 138 141 142 143 145 146 145 145 149 149 149 154 \n147 141 141 139 141 142 142 141 145 141 137 143 150 155 147 141 \n145 148 147 149 153 156 155 157 181 195 223 239 250 247 247 247 \n243 251 250 247 244 247 250 246 241 242 247 248 246 246 240 249 \n246 241 198 143 132 138 145 143 130 124 124 124 126 126 125 128 \n130 136 139 140 146 153 158 161 168 172 177 181 188 193 197 199 \n195 193 185 178 172 185 172 170 196 151 144 139 149 165 134 150 \n 38  35  35  36  38  40  42  42  41  40  41  42  43  44  47  47 \n 49  47  47  45  43  42  39  40  41  40  40  37  39  39  42  46 \n 53  54  51  47  39  33  31  30  26  25  23  23  22  21  24  25 \n 25  26  27  26  25  25  26  25  25  24  24  24  25  26  25  26 \n 29  29  31  32  32  30  30  30  30  28  24  25  27  26  26  25 \n 26  25  24  24  24  26  26  25  25  26  27  27  27  29  30  28 \n 28  27  25  25  26  25  26  26  26  27  26  29  34  41  45  63 \n158 162 159 126 106 109 109 111 114 112 111 112 113 111 109 110 \n105 106 111 111 115 114 110 109 107 111 113 110 110 111 113 115 \n115 118 118 125 119 117 116 118 118 116 116 116 118 120 118 121 \n124 121 120 120 117 113 113 119 120 120 124 124 153 211 238 236 \n233 234 236 243 244 241 237 236 242 155  49  33  21  17  15  15 \n 16  22  30  32  33  21  17  16  15  16  19  22  24  28  32  32 \n 32  31  34  36  35  36  36  37  43  49  51  54  53  52  50  46 \n 43  43  45  43  39  39  40  43  44  43  40  41  43  43  41  38 \n 38  38  37  36  35  35  35  35  35  35  37  36  37  36  39  41 \n 41  38  37  36  34  34  33  31  29  30  30  30  28  28  27  27 \n 27  28  26  25  27  27  25  26  25  25  27  27  26  26  25  26 \n 26  25  26  27  27  27  26  26  29  26  27  28  28  27  27  28 \n 32  33  31  29  26  27  27  26  28  25  26  24  27  26  25  27 \n 28  28  26  26  25  26  27  26  27  26  26  28  27  27  28  31 \n 35  41  42  44  43  43  43  45  46  46  47  45  46  45  47  45 \n 45  44  43  37  34  34  27  25  32  38  76 118 144 187 183 172 \n156 143 145 143 139 136 158 164 155 202 175 141 128 130 134 136 \n140 148 148 147 145 147 148 145 146 144 145 146 145 142 147 150 \n148 145 144 143 142 139 138 140 144 145 142 143 145 145 145 147 \n145 140 139 138 142 145 143 142 142 141 143 147 147 152 146 145 \n152 154 154 159 162 171 184 209 236 246 245 249 251 246 247 247 \n245 251 243 244 244 248 249 245 241 243 248 250 246 244 243 246 \n238 195 130 127 122 118 114 108 100 101 101 101 102 101 103 107 \n110 111 116 118 122 126 130 136 144 147 151 158 161 164 170 175 \n179 185 190 192 194 194 195 193 195 185 178 172 163 167 138 159 \n 38  39  36  36  38  39  41  42  40  39  39  41  42  42  41  41 \n 42  42  42  42  44  44  41  40  41  41  40  39  40  41  43  46 \n 50  51  49  46  37  33  29  29  26  24  22  21  24  23  24  27 \n 26  24  26  25  26  25  26  25  24  25  24  25  25  27  26  26 \n 27  28  30  29  31  33  30  31  29  29  27  25  28  26  26  25 \n 25  24  25  24  24  24  25  25  25  26  26  26  28  29  28  30 \n 26  29  26  25  25  26  24  24  25  24  25  25  30  34  42  47 \n116 168 150 156 109 110 113 114 115 116 115 115 116 112 114 117 \n114 109 106 109 111 110 109 114 118 116 115 111 114 114 111 115 \n118 118 119 116 116 115 113 112 115 120 120 120 116 116 117 120 \n123 124 122 121 119 117 118 119 123 123 128 163 221 237 238 238 \n248 246 234 232 234 237 242 241 244 164  45  33  19  17  17  16 \n 15  18  30  31  31  20  16  16  16  16  17  21  24  28  31  33 \n 33  32  33  33  35  35  35  37  41  47  51  51  52  54  50  47 \n 46  46  45  41  37  37  40  44  45  43  43  45  44  43  41  37 \n 36  36  36  37  35  36  34  37  35  35  36  37  37  36  38  38 \n 39  39  37  35  33  34  32  31  30  28  28  29  32  34  28  26 \n 28  27  26  26  26  26  25  27  26  26  27  26  26  27  25  24 \n 26  26  28  27  26  25  25  26  26  25  27  27  27  29  28  30 \n 30  30  31  29  27  26  27  27  25  25  25  25  26  24  25  27 \n 25  27  28  27  26  25  26  25  27  28  27  28  29  29  30  33 \n 36  42  43  44  42  43  43  44  45  44  44  46  46  46  45  46 \n 45  44  43  41  34  34  31  25  30  39  59 117 123 175 192 180 \n112 137 147 149 149 148 157 166 135 202 189 157 149 131 129 126 \n131 134 132 138 134 143 150 147 144 140 147 148 146 145 149 150 \n148 144 148 149 147 145 143 144 145 150 144 141 146 146 142 143 \n143 142 135 135 144 147 145 143 140 139 144 150 148 149 148 149 \n157 161 169 191 220 235 248 248 249 248 246 246 243 244 245 247 \n252 250 245 243 243 245 246 248 242 248 248 247 242 240 245 241 \n171 113 105  95  80  74  73  68  66  66  65  66  69  72  74  74 \n 75  78  85  85  88  93  97 102 107 112 116 120 127 129 136 140 \n146 153 161 165 165 165 166 169 172 176 185 187 193 194 196 195 \n 38  37  36  36  39  39  39  40  40  42  39  40  42  42  41  41 \n 42  41  41  41  42  42  40  40  41  41  40  40  42  43  41  42 \n 46  46  45  44  38  35  31  30  29  26  25  24  23  23  25  26 \n 27  26  26  24  25  24  26  25  25  25  24  25  25  26  26  26 \n 26  27  30  29  30  32  30  31  29  30  29  26  27  25  24  24 \n 25  24  24  24  25  24  24  27  26  24  26  28  28  29  29  30 \n 28  29  27  25  26  27  25  24  24  23  25  25  28  32  40  46 \n 81 166 153 163 126 110 111 113 114 115 113 112 110 110 111 115 \n117 117 113 112 113 114 117 118 120 119 119 120 118 118 115 117 \n118 116 115 117 116 118 115 112 111 114 122 122 117 122 122 121 \n120 120 121 121 114 121 119 120 124 127 182 230 241 239 239 244 \n248 244 238 242 242 242 242 244 248 169  45  34  20  18  17  16 \n 17  20  31  31  31  20  16  16  17  18  17  19  24  28  30  33 \n 34  33  33  33  35  36  36  37  41  47  51  54  52  52  52  51 \n 47  45  43  41  39  37  40  43  45  44  44  44  42  42  41  38 \n 35  35  36  36  36  36  35  34  34  33  35  36  36  36  38  39 \n 37  38  39  37  34  32  32  32  30  29  27  27  30  32  30  29 \n 29  28  26  25  26  27  26  27  26  26  27  25  25  26  26  26 \n 27  27  28  27  25  26  26  27  28  27  26  27  29  29  30  28 \n 28  30  30  28  27  27  28  27  25  25  24  24  25  25  26  27 \n 27  27  27  27  27  28  27  24  27  26  27  28  29  29  32  32 \n 37  41  41  41  41  43  43  44  45  46  45  45  47  46  44  44 \n 46  44  44  42  36  34  31  25  28  36  49 103 116 155 191 190 \n134 143 150 157 152 151 158 168 106 187 194 162 141 141 138 136 \n137 140 143 145 138 142 144 143 145 139 138 145 148 141 142 141 \n139 144 153 148 145 144 146 148 146 145 141 139 144 142 148 146 \n145 143 140 140 139 144 150 148 145 143 142 146 153 156 155 156 \n178 200 228 239 248 250 252 249 249 246 239 241 249 251 249 250 \n251 246 250 247 247 245 247 244 243 245 247 246 244 244 246 196 \n104  88  77  65  60  59  57  56  53  51  48  49  47  47  51  48 \n 49  52  57  59  61  64  68  72  75  78  83  89  93  96 105 109 \n114 121 128 131 138 142 144 144 150 152 154 158 165 168 173 178 \n 39  36  35  35  38  39  40  39  38  40  39  39  40  40  40  42 \n 42  41  40  40  41  41  40  40  40  39  40  40  40  42  42  41 \n 42  40  39  39  38  37  36  36  33  31  29  27  27  28  26  26 \n 27  26  26  25  25  26  26  26  25  24  25  24  24  26  25  27 \n 28  28  29  30  30  32  31  30  27  28  29  28  26  24  23  23 \n 26  24  24  25  26  25  24  26  26  25  27  27  28  29  30  30 \n 29  29  27  25  27  27  25  25  25  25  26  25  23  29  36  41 \n 59 127 162 160 148 119 115 116 116 115 116 116 112 108 106 109 \n114 115 114 118 112 112 118 116 110 105 110 117 113 112 113 113 \n113 112 112 113 113 116 116 109 104 102 105 111 113 113 113 119 \n120 118 120 122 126 119 112 116 142 196 233 241 231 233 238 239 \n241 241 237 242 243 242 240 240 244 169  42  33  21  18  16  16 \n 15  19  28  30  32  21  16  16  16  16  17  19  22  27  30  33 \n 34  34  33  34  35  37  35  37  40  47  51  53  50  53  52  48 \n 44  44  43  41  39  38  41  43  43  44  44  43  42  42  40  37 \n 36  36  36  34  36  34  34  35  35  35  35  36  36  38  38  37 \n 38  39  36  36  33  32  32  32  32  32  30  30  28  29  30  31 \n 32  29  29  29  27  26  25  25  26  27  27  25  25  26  28  26 \n 26  26  26  26  26  27  26  27  28  28  29  28  29  29  27  29 \n 29  29  30  29  28  28  30  28  26  26  23  24  25  27  26  26 \n 26  27  27  27  27  27  26  25  26  26  27  27  29  30  32  32 \n 34  39  40  40  40  41  44  44  44  46  46  46  45  43  42  43 \n 45  46  43  44  39  34  32  28  26  34  44  70 120 107 160 201 \n232 225 210 201 199 189 173 153  84 158 199 167 135 141 140 138 \n146 151 152 155 148 149 147 147 148 148 147 147 145 144 145 143 \n143 143 149 144 144 143 144 147 145 141 141 145 143 145 145 142 \n144 143 136 139 139 144 153 154 154 150 151 156 164 177 207 225 \n237 247 248 248 248 251 248 244 247 251 247 247 251 250 246 242 \n240 246 250 241 242 244 247 244 246 247 249 248 243 247 213 113 \n 75  65  59  53  48  44  42  43  47  43  40  38  39  38  37  39 \n 37  38  42  44  44  46  47  49  49  51  57  60  61  65  68  67 \n 69  75  79  84  92  97 104 108 111 115 119 123 130 133 138 144 \n 39  37  36  36  38  40  37  38  38  39  38  39  41  40  39  41 \n 41  40  40  40  40  41  42  40  40  40  41  41  39  40  42  42 \n 43  41  40  38  37  36  36  35  33  33  31  29  27  27  25  26 \n 27  26  26  28  26  27  25  25  24  23  23  23  25  26  25  27 \n 29  29  28  30  31  32  29  29  27  27  27  27  26  24  24  25 \n 24  22  24  24  25  25  25  25  25  25  27  28  28  27  28  29 \n 29  29  27  26  26  26  25  25  26  27  27  26  25  28  34  42 \n 48  84 161 162 158 133 121 120 118 117 118 118 111 110 110 110 \n110 112 115 118 114 111 113 108 103 104 110 113 112 114 114 113 \n111 109 121 123 120 118 119 116 113 112 112 115 119 117 119 121 \n124 122 121 119 117 116 114 130 200 242 243 242 238 236 237 233 \n235 245 237 243 237 234 247 245 246 166  41  31  19  17  17  15 \n 16  19  29  30  31  20  16  16  15  15  17  20  22  26  28  30 \n 33  34  34  34  35  37  35  38  39  47  52  52  52  54  49  46 \n 45  45  44  40  39  38  39  42  42  42  44  42  41  42  40  39 \n 37  36  36  34  35  36  35  36  33  36  35  34  34  36  38  36 \n 38  39  37  39  33  30  29  29  30  30  28  28  27  28  26  27 \n 28  28  30  28  27  26  26  27  27  26  25  25  26  26  27  26 \n 26  25  26  27  26  26  24  26  27  27  28  28  28  28  28  30 \n 29  28  30  29  28  28  28  28  27  27  25  25  26  27  25  25 \n 26  27  26  27  28  28  26  28  27  27  28  27  29  31  30  32 \n 34  39  42  41  40  39  42  43  44  46  45  46  45  43  40  42 \n 43  45  44  46  43  35  31  30  24  32  41  55 132 164 213 236 \n249 247 239 236 243 237 172 111  77 107 164 189 193 189 178 173 \n173 168 167 163 160 155 148 150 151 149 150 153 151 152 151 146 \n149 148 150 148 146 147 148 145 139 137 140 142 144 141 129 135 \n145 144 142 143 144 148 150 156 160 162 180 198 220 236 243 247 \n242 243 245 249 247 249 245 245 245 246 247 248 248 245 247 245 \n242 246 244 245 241 240 247 245 250 246 246 245 243 243 144  79 \n 65  56  44  40  41  40  38  38  41  35  35  34  34  34  34  32 \n 33  33  36  35  36  40  40  41  43  44  45  46  45  47  48  50 \n 51  54  55  56  59  63  68  74  80  81  82  90 102 113 106 109 \n 38  34  36  35  37  38  38  37  39  40  39  39  39  40  42  43 \n 42  40  40  40  40  41  40  41  42  41  41  41  39  39  42  42 \n 39  40  39  38  38  36  36  35  33  32  30  29  29  29  28  27 \n 26  26  26  28  25  25  27  27  24  24  25  23  25  25  25  26 \n 29  28  30  30  32  30  28  29  27  29  28  28  27  26  24  25 \n 23  23  23  24  26  27  27  25  23  25  27  27  28  27  28  28 \n 28  26  26  27  26  25  25  25  26  27  27  27  27  26  32  38 \n 43  50 132 165 164 153 120 117 116 118 119 119 114 113 117 117 \n113 110 110 113 111 109 105  98  95 104 113 116 114 119 118 116 \n114 112 116 118 119 115 112 113 116 116 117 120 121 118 120 122 \n125 124 121 124 121 124 156 216 240 241 238 242 239 243 241 243 \n242 236 236 230 230 233 220 192 153  93  40  27  18  17  17  16 \n 15  19  28  30  31  19  15  14  14  16  18  21  22  25  28  31 \n 32  33  34  34  35  36  35  37  41  49  53  53  52  52  49  46 \n 42  42  45  41  38  37  39  41  43  43  42  43  43  42  39  37 \n 35  35  34  34  34  34  34  35  34  35  36  36  35  38  39  39 \n 38  38  39  40  32  32  30  28  28  28  28  28  27  28  27  27 \n 27  27  26  26  26  25  24  25  27  27  25  25  26  26  25  26 \n 29  30  29  27  27  27  26  27  27  28  29  27  28  29  29  29 \n 29  27  29  29  28  26  27  29  28  26  24  24  25  23  25  26 \n 26  25  24  24  26  27  27  27  26  27  28  29  30  31  29  31 \n 35  40  42  41  40  39  41  44  44  44  44  46  44  42  43  44 \n 44  45  44  46  44  40  31  32  26  28  39  44 116 224 232 235 \n235 237 233 223 191 149 117 116 124 159 217 242 241 242 240 236 \n233 236 236 234 227 218 213 212 205 200 196 193 184 182 178 173 \n172 170 168 167 163 165 162 162 165 166 166 168 169 169 167 169 \n170 169 176 179 183 186 182 180 189 222 239 247 248 249 247 248 \n248 247 247 246 250 246 247 246 246 244 245 248 249 245 247 247 \n243 248 245 248 241 242 246 246 245 242 243 243 242 207  87  66 \n 51  44  38  36  39  41  38  38  39  36  32  32  32  32  31  31 \n 32  31  33  34  32  33  35  35  36  37  37  37  38  39  39  40 \n 42  43  44  46  46  45  45  44  43  43  44  47  47  49  58  61 \n 37  35  35  34  38  40  39  38  39  40  41  41  39  40  40  42 \n 42  40  40  40  40  42  40  39  40  40  40  41  39  41  42  41 \n 39  38  38  38  38  36  36  36  35  33  32  33  31  29  28  27 \n 25  26  27  28  26  26  26  27  25  25  25  24  25  25  26  27 \n 27  28  29  31  32  31  30  29  29  29  27  28  26  27  27  26 \n 23  25  24  24  26  26  26  26  25  25  26  26  29  29  29  28 \n 28  27  27  26  25  24  25  25  25  26  26  26  25  25  29  34 \n 42  48  97 163 163 164 133 118 114 116 116 115 115 113 114 114 \n114 113 112 115 114 112 110 109 110 114 123 124 111 113 116 116 \n114 113 117 119 117 115 117 115 117 118 119 120 119 118 121 123 \n121 122 129 135 134 167 228 246 248 245 242 237 237 242 239 241 \n239 234 235 237 223 201 159 139 127  95  46  29  19  17  16  17 \n 16  18  28  31  34  21  15  14  15  16  19  21  22  25  26  31 \n 32  33  35  34  34  35  36  39  41  48  52  54  54  53  49  45 \n 40  42  43  41  39  38  41  41  43  43  41  40  42  40  37  37 \n 35  35  34  35  36  35  34  33  33  33  34  35  36  40  40  40 \n 39  39  38  37  32  30  29  28  28  28  28  25  26  27  27  27 \n 25  25  25  26  25  26  26  24  26  25  27  27  26  25  25  26 \n 27  29  28  27  26  26  27  27  28  27  28  27  29  30  28  28 \n 29  27  27  29  29  27  26  27  28  26  26  25  25  25  25  26 \n 25  25  25  25  25  27  27  26  26  26  26  27  28  30  29  30 \n 33  38  41  41  40  39  42  44  43  44  44  44  43  41  45  46 \n 46  43  44  42  43  41  32  32  28  26  38  42  87 203 248 248 \n239 216 168 145 142 142 148 171 210 239 249 247 242 239 243 244 \n238 242 251 249 241 238 240 243 244 242 239 242 237 241 237 231 \n234 234 232 230 230 224 220 224 228 231 230 232 230 230 229 233 \n230 231 235 235 235 238 238 235 232 241 238 237 237 239 243 244 \n243 235 236 242 249 244 247 242 246 248 247 248 247 245 244 248 \n244 248 246 246 247 248 245 242 243 243 243 243 244 164  75  58 \n 45  41  36  35  40  39  37  38  37  34  31  29  32  32  31  32 \n 32  31  32  31  33  34  35  34  34  34  32  32  34  35  37  39 \n 38  39  42  42  43  46  48  48  48  45  47  45  44  42  43  42 \n 37  35  35  35  37  38  39  40  39  40  39  38  39  40  40  41 \n 41  41  41  41  40  40  40  40  40  40  39  40  40  42  42  40 \n 41  40  38  37  36  36  37  35  37  34  31  30  26  28  29  26 \n 28  27  28  27  26  25  26  27  26  25  24  26  25  26  27  28 \n 27  27  28  29  30  30  30  31  29  29  28  27  26  26  26  26 \n 26  26  25  24  24  25  25  25  26  26  27  28  28  29  29  29 \n 27  27  26  26  24  24  25  26  26  27  27  26  26  26  26  31 \n 39  44  63 136 166 167 154 124 116 117 118 115 110 113 116 118 \n117 111 108 111 118 119 118 115 112 112 120 119 112 111 116 116 \n113 114 115 117 115 119 120 120 120 123 119 112 112 117 121 119 \n126 130 132 145 197 233 232 240 242 245 243 240 237 238 236 238 \n240 229 213 180 136 125 136 154 191 153  35  29  19  17  13  15 \n 16  16  27  30  32  21  16  15  15  15  18  20  24  25  27  30 \n 32  33  33  34  35  35  37  37  41  47  53  55  54  52  47  43 \n 41  42  44  43  39  37  40  42  42  42  41  41  40  39  37  36 \n 35  36  35  33  34  34  35  34  33  33  34  35  37  41  42  40 \n 39  37  36  34  33  32  30  29  28  28  28  26  27  26  26  26 \n 26  26  24  24  23  24  25  25  25  26  25  25  25  25  26  25 \n 26  27  27  27  25  27  27  28  29  27  27  27  27  29  29  27 \n 29  27  27  28  27  27  27  27  27  25  27  27  25  25  26  27 \n 25  25  26  27  27  26  27  26  26  26  26  27  28  28  28  30 \n 32  37  41  39  39  38  42  43  43  43  44  44  42  40  43  43 \n 42  44  42  42  44  42  35  31  30  26  35  43  61 164 239 210 \n164 135 128 133 150 188 233 247 242 244 242 233 228 235 245 249 \n251 247 245 241 242 244 247 239 236 245 246 241 245 249 245 238 \n245 244 242 237 238 238 242 243 243 244 245 240 239 237 235 240 \n241 238 240 239 238 239 238 238 244 242 240 238 242 243 243 239 \n239 237 237 234 238 241 245 239 241 244 238 236 244 248 247 248 \n246 245 246 248 244 247 242 244 242 239 241 243 228 118  64  50 \n 41  38  35  36  42  40  38  38  34  32  31  30  30  28  32  31 \n 31  31  31  31  31  31  32  32  34  33  32  30  31  33  33  33 \n 36  37  40  39  43  43  45  46  46  47  48  47  45  46  45  46 \n 37  34  35  35  36  39  39  39  39  39  38  39  40  39  39  40 \n 42  42  41  41  42  41  41  39  39  38  38  40  41  41  42  42 \n 41  41  39  38  38  37  37  37  37  35  32  31  29  28  29  29 \n 29  28  28  27  26  26  27  27  25  25  25  27  25  26  27  28 \n 26  27  30  30  31  31  29  31  30  29  28  28  27  27  26  25 \n 28  27  24  24  25  25  26  26  26  25  27  26  26  27  27  27 \n 27  26  25  25  24  24  25  27  27  26  26  29  31  29  26  29 \n 34  42  54 112 174 166 166 130 114 114 113 106 100 103 114 117 \n116 114 109 109 114 117 119 118 116 113 117 116 115 115 116 116 \n116 116 115 118 118 123 121 121 123 120 118 115 116 121 116 118 \n121 121 146 204 240 241 242 239 234 239 245 243 239 240 237 235 \n206 166 133 125 126 152 196 219 241 173  36  29  18  16  15  15 \n 15  16  26  30  33  20  16  15  14  14  18  19  24  25  30  33 \n 32  31  33  35  36  36  36  36  40  46  53  54  54  51  48  44 \n 40  43  42  41  39  38  40  42  42  43  42  40  40  41  37  36 \n 37  37  35  35  34  33  35  35  35  33  35  35  37  40  41  40 \n 38  37  36  35  33  32  30  28  28  28  28  26  27  26  26  25 \n 25  24  24  23  23  24  25  26  24  25  25  26  24  23  23  24 \n 26  27  27  26  26  27  26  27  28  25  26  27  26  29  29  28 \n 29  28  28  28  28  26  25  25  26  26  27  25  26  25  24  25 \n 26  25  26  27  28  29  29  27  27  26  26  27  27  27  28  29 \n 33  37  41  41  38  40  41  42  43  43  44  44  42  42  45  45 \n 44  44  42  42  43  44  38  31  33  28  32  41  51 122 167 142 \n132 134 146 182 220 235 234 241 246 241 241 235 233 236 241 244 \n247 247 246 236 236 239 243 244 244 247 246 240 249 250 245 239 \n241 242 244 245 243 244 248 251 249 248 245 242 243 241 239 238 \n231 234 239 239 238 236 231 232 238 245 246 242 247 248 241 239 \n243 244 244 242 243 245 244 245 241 243 240 236 238 239 239 239 \n235 242 241 240 246 245 249 246 245 245 243 244 205  94  56  44 \n 40  36  34  36  42  40  38  38  34  30  30  31  32  32  31  32 \n 31  32  30  31  30  30  31  32  33  32  32  32  33  31  32  31 \n 34  34  37  38  42  43  44  47  47  46  48  49  49  48  45  44 \n 36  35  36  36  38  39  39  40  39  37  39  41  39  38  39  38 \n 40  40  41  41  42  40  40  39  39  38  39  39  39  40  41  41 \n 41  41  40  40  39  37  38  36  36  35  33  32  30  29  28  28 \n 29  27  27  27  26  27  25  24  26  26  25  25  25  26  26  27 \n 27  26  29  29  30  30  30  31  29  29  29  28  27  27  26  26 \n 25  24  25  24  26  27  25  24  25  26  26  28  28  28  27  26 \n 27  25  25  27  25  25  24  25  27  26  28  30  31  32  28  26 \n 30  42  61  83 156 167 170 151 119 119 116 115 114 115 116 114 \n115 115 116 115 117 120 122 120 119 117 115 112 113 111 111 115 \n119 114 118 121 122 122 115 116 114 113 118 121 124 126 127 125 \n121 121 192 238 245 244 246 242 243 239 245 250 245 234 203 157 \n122 123 135 162 204 236 242 234 228 142  37  30  18  16  15  15 \n 15  17  26  29  34  20  16  16  15  14  17  19  21  24  29  30 \n 33  32  34  35  34  35  37  36  40  46  54  54  52  51  49  45 \n 42  42  42  41  38  37  40  42  43  42  41  41  39  40  35  36 \n 35  36  35  35  35  34  35  35  35  34  35  35  36  37  38  38 \n 37  35  37  34  32  33  30  30  28  27  27  27  24  25  25  26 \n 26  25  24  23  23  24  25  23  25  25  25  26  24  23  24  25 \n 25  25  24  25  25  26  25  25  26  26  27  25  27  28  29  30 \n 31  30  28  27  27  27  25  24  25  26  26  26  26  25  24  24 \n 24  24  26  27  28  30  28  27  26  26  27  28  28  27  28  29 \n 33  36  41  38  37  39  40  43  42  42  43  44  43  42  43  44 \n 47  43  42  42  43  45  39  32  33  30  29  39  44  95 144 134 \n152 181 223 242 240 242 235 233 236 236 239 242 244 244 246 241 \n243 245 248 242 243 246 246 247 244 245 245 246 244 241 240 242 \n240 243 246 248 247 247 248 246 248 242 242 243 247 244 241 242 \n237 236 241 241 235 236 237 234 242 245 243 246 248 246 242 242 \n246 248 243 241 242 242 244 243 243 240 247 248 242 242 239 240 \n241 240 239 237 241 238 235 236 233 231 243 243 162  72  51  41 \n 39  35  36  39  42  38  37  35  32  30  30  30  27  28  30  30 \n 28  31  29  30  30  31  30  31  33  32  33  33  33  32  32  31 \n 31  32  34  38  42  41  44  46  45  46  48  50  47  47  48  45 \n 37  36  36  35  38  40  38  38  40  41  40  40  41  39  38  38 \n 40  40  41  42  42  40  40  40  39  38  39  40  40  40  41  39 \n 42  42  41  42  41  39  38  36  37  36  33  31  32  32  30  28 \n 29  29  26  26  26  26  26  26  25  26  26  25  26  27  26  27 \n 28  27  27  28  29  30  31  30  30  31  27  27  27  26  25  26 \n 26  27  26  25  25  25  25  25  25  26  27  28  28  28  29  28 \n 27  25  25  26  26  25  24  25  27  28  28  30  30  32  27  24 \n 26  34  49  60 130 167 172 164 128 120 114 116 120 119 113 113 \n114 114 116 114 118 122 121 118 120 119 119 116 115 112 113 121 \n120 112 115 120 121 119 116 114 116 119 112 115 123 128 134 129 \n129 128 168 227 238 243 247 250 244 240 238 221 175 153 129 122 \n130 162 207 225 229 227 237 226 154  85  40  28  18  16  15  14 \n 14  16  25  27  31  18  15  15  16  15  17  20  24  24  26  29 \n 32  34  33  34  34  36  37  38  40  47  54  55  52  51  50  46 \n 42  41  43  41  37  35  40  43  43  42  41  42  39  41  36  37 \n 34  34  35  34  33  33  33  33  35  34  35  34  34  37  38  38 \n 37  37  38  36  32  32  31  30  27  26  26  26  25  26  25  25 \n 25  25  23  24  24  24  24  23  23  24  25  27  24  22  25  26 \n 25  25  24  25  26  26  25  24  26  27  27  26  26  27  28  29 \n 31  30  28  26  25  28  27  27  26  27  26  25  25  24  24  26 \n 26  25  26  27  27  28  27  27  27  26  25  27  30  29  27  29 \n 32  35  41  40  38  38  41  43  42  41  42  44  41  41  44  46 \n 46  44  42  42  43  44  42  36  32  31  26  34  44  73 152 179 \n215 223 235 236 243 241 239 235 238 243 240 237 243 247 243 245 \n245 242 242 235 243 245 236 239 236 241 245 247 243 237 237 242 \n243 247 252 251 246 244 248 245 248 248 239 242 242 239 241 240 \n227 223 223 227 232 240 241 242 249 249 250 249 247 248 247 244 \n244 249 249 245 247 248 248 247 244 240 243 249 244 244 242 242 \n242 238 244 243 236 238 238 240 237 236 239 239 129  64  49  39 \n 36  35  36  41  42  36  37  36  34  30  29  29  30  30  30  30 \n 29  30  31  31  30  31  31  32  32  33  35  34  32  32  32  32 \n 32  33  35  39  41  43  40  44  45  46  48  47  46  45  45  43 \n 38  36  37  36  38  40  40  39  40  41  41  40  40  40  40  39 \n 40  41  41  41  41  41  41  39  39  38  39  41  41  40  42  40 \n 40  40  39  40  40  40  39  37  37  37  35  32  32  31  30  28 \n 28  27  27  27  26  26  26  25  27  27  26  26  27  28  26  25 \n 27  28  26  27  28  29  30  31  30  31  30  29  27  28  28  25 \n 25  26  26  26  26  24  25  24  25  26  26  27  28  28  29  28 \n 27  26  26  25  25  26  25  25  26  26  28  29  30  33  28  23 \n 21  26  41  51  86 163 173 170 147 130 122 118 119 119 118 119 \n121 120 117 118 119 119 120 119 121 121 118 116 114 114 117 120 \n120 123 123 123 122 121 115 114 112 112 111 115 122 124 131 134 \n122 117 119 140 174 194 207 205 191 168 142 122 128 134 153 187 \n226 232 228 230 229 217 181 124  99  80  40  27  18  16  14  15 \n 15  17  25  29  32  20  16  15  14  14  18  20  21  25  28  29 \n 32  35  33  33  33  35  37  38  40  49  54  55  52  51  48  45 \n 43  42  44  40  39  38  40  41  42  41  41  42  41  41  37  35 \n 33  33  34  34  34  32  32  32  34  34  33  33  35  36  36  37 \n 39  37  38  36  33  32  29  28  28  27  27  27  25  25  25  26 \n 26  25  24  23  24  25  23  25  25  25  25  25  25  25  24  25 \n 25  24  24  24  26  26  27  27  27  25  27  28  26  28  29  28 \n 29  28  28  28  25  28  27  27  25  26  24  25  26  26  25  25 \n 27  25  27  28  25  25  25  25  25  27  27  28  28  28  30  28 \n 29  34  41  40  39  38  39  41  41  42  43  44  41  39  42  42 \n 43  43  43  42  42  43  45  40  32  33  27  31  43  52 142 214 \n232 234 232 233 244 242 243 243 238 240 243 243 241 240 237 237 \n238 239 239 237 239 241 246 244 243 235 236 240 242 247 245 244 \n247 248 245 242 241 243 249 251 244 238 242 241 244 243 244 244 \n244 234 223 228 237 237 240 238 247 246 248 247 248 243 243 248 \n244 242 246 244 241 242 238 238 240 239 238 236 241 244 246 243 \n241 247 249 246 245 244 243 243 241 239 246 230  91  64  46  39 \n 35  33  33  42  41  35  38  36  32  29  29  28  30  30  31  28 \n 29  30  33  31  30  30  31  30  33  33  33  34  32  30  30  32 \n 31  32  34  37  39  42  41  43  44  45  46  47  45  45  44  42 \n 37  37  37  38  38  38  38  38  38  40  41  42  41  40  39  39 \n 41  41  41  41  41  41  42  41  40  39  39  40  40  41  42  40 \n 40  41  40  41  37  39  38  36  35  36  34  34  32  30  30  28 \n 28  26  28  28  27  27  27  26  27  26  26  26  28  29  26  26 \n 25  27  26  27  29  30  30  31  32  30  30  28  27  27  26  26 \n 26  26  26  25  26  24  25  25  25  26  26  27  28  28  28  27 \n 26  26  28  26  26  26  26  25  26  26  28  30  32  33  31  24 \n 20  23  33  44  65 144 175 175 158 132 117 114 116 123 124 121 \n118 119 122 124 117 116 118 119 120 120 121 118 121 124 126 123 \n121 121 125 126 123 123 123 122 121 120 115 118 123 141 195 201 \n172 147 127 124 129 135 137 139 131 124 130 143 172 197 220 230 \n238 231 224 221 184 140 107  99  96  76  42  27  17  15  13  15 \n 16  17  23  27  31  19  15  15  14  14  18  20  22  25  28  30 \n 32  34  34  33  34  35  36  37  40  48  53  53  51  51  48  43 \n 41  41  42  39  37  37  41  42  41  40  42  42  41  40  37  35 \n 36  35  34  35  33  34  34  35  34  34  33  35  34  35  37  37 \n 38  37  37  35  33  32  29  28  28  27  27  27  25  24  25  24 \n 23  25  24  22  24  25  24  24  24  23  23  26  27  26  25  23 \n 23  24  24  24  27  26  29  30  28  27  26  27  28  29  31  29 \n 29  29  28  29  27  27  28  27  24  25  25  24  26  26  24  25 \n 26  26  27  27  27  26  25  25  25  26  27  27  29  30  29  31 \n 31  35  40  39  37  39  41  41  42  42  42  42  40  40  42  44 \n 43  44  44  44  40  41  43  42  34  34  29  28  40  44 112 208 \n240 237 242 239 236 243 244 246 238 233 235 236 236 236 241 240 \n239 240 243 244 243 244 249 248 244 239 240 240 240 245 246 244 \n244 244 245 243 242 240 242 247 248 246 245 245 247 246 244 243 \n240 242 240 237 245 248 249 247 247 247 248 250 249 241 242 244 \n246 243 242 244 239 240 248 243 241 241 241 239 238 242 244 240 \n233 236 239 244 245 244 238 239 239 237 248 218  80  58  45  37 \n 31  30  34  45  39  36  36  33  29  29  29  28  30  30  29  28 \n 30  31  32  31  31  31  30  31  33  31  32  34  32  30  29  30 \n 32  32  33  36  40  41  42  42  43  46  47  48  45  44  41  41 \n 39  38  34  35  38  37  39  40  38  40  42  41  42  42  41  41 \n 41  41  40  39  41  42  40  40  39  40  39  39  41  39  40  41 \n 40  41  41  41  38  38  38  37  36  34  36  35  33  32  31  28 \n 29  28  27  27  27  27  27  27  25  26  26  29  28  28  28  26 \n 25  25  28  26  28  29  31  31  30  29  30  29  29  27  26  27 \n 27  27  26  25  26  23  23  23  25  25  24  27  28  28  28  28 \n 26  26  27  25  26  26  25  25  26  26  29  29  34  35  32  26 \n 20  21  27  40  50 103 175 177 168 146 121 116 115 123 123 122 \n120 121 122 119 121 119 119 119 119 118 119 122 129 130 128 125 \n121 122 123 126 126 122 125 124 124 125 121 121 156 211 235 234 \n223 215 202 166 127 127 130 128 132 133 170 186 187 172 170 169 \n160 149 139 130 100 100 100  98  97  80  41  27  17  15  14  14 \n 15  17  24  27  28  18  15  15  16  15  17  21  22  25  28  30 \n 32  33  33  31  34  36  35  37  40  48  54  53  50  49  48  46 \n 43  43  40  37  36  36  41  40  40  41  41  41  41  41  37  35 \n 35  34  33  35  35  34  32  33  33  32  33  33  34  35  36  36 \n 35  37  35  34  32  30  29  28  28  27  27  27  27  26  27  25 \n 25  23  26  24  23  24  26  26  23  22  22  24  26  25  23  24 \n 24  25  24  24  26  26  26  27  24  26  27  27  28  28  29  29 \n 29  27  29  29  30  28  27  28  25  25  25  23  24  24  24  26 \n 25  25  24  25  24  24  24  25  26  26  26  27  27  26  28  29 \n 29  33  39  40  38  38  39  41  42  42  43  43  41  41  41  42 \n 44  44  44  43  42  41  40  43  35  33  31  28  36  46  81 187 \n238 236 242 245 244 243 246 248 246 237 237 238 240 246 246 244 \n241 242 238 239 239 247 249 248 238 235 237 246 246 244 246 250 \n241 243 243 245 247 245 248 251 244 246 237 239 240 248 245 241 \n244 242 246 244 248 247 246 247 248 248 238 240 241 237 239 243 \n246 244 246 245 244 245 245 244 244 245 247 248 247 246 243 242 \n241 241 248 248 239 239 242 241 246 242 238 181  71  54  44  36 \n 32  29  36  45  39  35  34  30  27  27  28  26  28  31  32  30 \n 29  30  29  30  31  31  29  29  30  31  30  31  31  29  27  27 \n 29  31  33  35  39  41  44  43  44  44  48  48  44  43  42  42 \n 40  38  36  35  37  38  39  41  40  40  43  43  42  42  41  40 \n 40  39  40  40  41  42  40  40  40  40  39  39  41  40  42  42 \n 42  41  40  40  40  39  39  36  36  35  35  34  34  34  30  28 \n 29  27  26  26  25  27  27  25  27  27  26  27  28  26  27  28 \n 27  26  27  28  30  30  31  31  30  31  29  29  29  29  26  26 \n 24  26  26  26  26  25  25  25  25  25  26  28  28  27  28  29 \n 26  25  26  25  26  25  24  24  25  26  29  29  32  33  33  28 \n 21  19  22  34  47  68 159 176 170 154 128 117 116 118 120 126 \n121 118 120 121 124 121 118 118 118 120 121 124 130 132 130 127 \n125 125 129 133 126 127 129 127 126 127 126 138 186 185 169 168 \n158 153 146 136 130 130 132 135 137 140 142 146 147 144 141 133 \n120 115 110 110 105 104 104 107 108  86  42  25  17  15  14  14 \n 14  17  24  28  28  18  15  15  16  16  18  20  20  25  28  30 \n 33  32  32  34  32  35  37  38  40  48  54  53  50  49  48  45 \n 42  42  41  40  38  38  40  38  40  41  41  40  41  42  37  35 \n 37  36  34  36  35  34  33  34  33  33  35  35  36  36  37  36 \n 36  37  36  34  33  31  29  29  29  28  26  25  27  26  27  25 \n 25  23  24  23  23  24  25  26  24  24  23  24  24  23  24  24 \n 26  26  25  24  26  26  26  25  26  27  28  27  28  29  29  29 \n 30  29  31  29  29  29  28  28  26  26  24  23  23  24  24  27 \n 26  25  25  24  25  24  23  24  25  25  27  26  29  28  28  30 \n 32  34  37  38  37  38  40  41  41  41  43  42  41  42  43  43 \n 47  45  46  45  43  41  40  42  37  32  33  30  35  44  64 156 \n242 240 239 241 239 238 234 240 246 241 239 236 238 240 235 240 \n245 250 245 239 239 247 243 239 239 242 235 237 238 239 244 247 \n248 247 246 241 245 243 247 248 239 246 245 245 239 239 239 243 \n248 243 248 245 248 242 244 244 243 242 237 237 239 239 235 237 \n248 242 240 240 240 241 246 245 241 242 246 248 246 240 239 243 \n247 247 242 238 234 243 249 247 246 243 237 152  69  55  41  35 \n 33  30  39  44  36  35  33  30  28  27  28  26  28  30  32  32 \n 30  29  29  30  32  33  31  31  31  32  31  31  31  30  29  29 \n 29  31  34  36  39  41  44  44  43  43  45  44  45  44  43  43 \n 38  35  36  35  37  40  39  40  41  41  42  44  42  40  39  41 \n 41  40  41  41  41  42  42  41  41  40  41  41  41  40  40  42 \n 41  41  42  41  41  40  39  37  36  36  35  33  34  34  32  32 \n 29  29  29  29  28  27  28  27  30  29  29  27  26  26  27  26 \n 27  26  26  27  29  29  28  29  29  30  29  29  31  29  26  28 \n 26  25  24  26  26  26  27  26  26  25  26  28  27  27  28  29 \n 28  27  27  26  26  27  27  26  26  26  28  28  30  32  33  31 \n 21  19  21  25  44  47 114 174 172 157 141 123 120 124 119 123 \n123 120 120 121 121 123 121 122 122 125 125 125 129 128 125 124 \n125 126 132 132 127 130 129 131 133 135 136 136 138 139 147 153 \n166 174 188 196 204 214 218 221 235 228 220 229 235 233 233 209 \n141 123 122 124 119 118 118 122 127  91  42  24  17  15  13  13 \n 14  15  21  28  30  19  15  15  14  15  19  20  23  26  28  31 \n 33  34  34  33  31  35  37  37  40  47  52  53  50  49  48  45 \n 44  42  42  39  37  35  39  40  39  40  41  39  40  40  38  37 \n 36  35  34  36  36  34  34  35  34  35  35  34  35  36  36  36 \n 36  37  35  32  33  32  28  27  27  27  27  27  25  24  25  26 \n 24  23  24  22  24  24  24  25  23  23  24  24  24  25  26  24 \n 24  25  24  25  26  27  28  26  26  26  28  27  28  27  28  30 \n 31  33  32  30  27  28  29  29  27  28  27  26  26  27  27  27 \n 26  25  25  24  25  26  25  26  26  25  27  28  29  29  27  30 \n 30  34  37  37  36  38  38  39  42  42  43  44  44  42  42  43 \n 45  45  45  44  42  39  40  41  40  34  34  30  31  41  56 120 \n233 241 244 243 241 238 232 237 238 237 239 242 236 232 228 230 \n233 244 244 239 247 249 247 245 244 242 237 235 232 231 232 238 \n238 242 243 243 242 243 246 245 242 247 243 248 242 239 240 239 \n240 245 245 241 234 235 240 246 246 242 243 237 241 243 242 238 \n244 239 240 237 240 248 237 242 237 241 240 242 242 236 237 246 \n246 247 242 236 234 240 243 240 237 239 236 129  67  53  38  33 \n 33  30  39  42  34  36  35  30  28  27  28  27  29  29  31  32 \n 31  29  29  29  31  31  31  32  32  33  31  32  32  30  28  30 \n 32  32  33  35  37  39  45  45  44  48  46  46  43  42  43  42 \n 38  36  37  35  36  39  39  38  40  41  42  42  40  42  39  40 \n 42  41  40  40  42  40  42  42  41  40  42  43  41  41  39  42 \n 42  41  42  43  44  42  41  40  37  36  35  32  35  36  34  31 \n 28  30  29  29  29  27  27  29  28  28  26  25  27  27  26  26 \n 28  27  27  28  27  30  28  29  29  30  30  30  28  27  26  27 \n 26  26  25  26  25  25  25  25  27  26  26  25  26  27  29  29 \n 26  25  26  25  25  26  26  26  27  27  27  28  31  34  35  33 \n 24  20  19  20  38  44  75 165 171 161 148 130 123 123 118 123 \n120 118 120 122 118 119 118 120 125 124 130 132 125 118 120 121 \n124 126 135 132 129 131 133 134 138 155 169 172 182 198 210 220 \n229 231 230 232 240 242 239 238 241 239 239 241 243 242 230 166 \n128 128 126 124 121 121 119 120 126  92  40  23  16  14  12  12 \n 14  15  21  27  29  17  14  14  13  14  18  19  24  27  28  30 \n 33  33  35  33  33  34  37  37  41  47  52  52  51  50  48  45 \n 41  41  41  40  37  38  40  40  40  41  41  41  39  37  39  36 \n 36  37  36  36  34  35  35  35  34  34  35  33  35  36  37  37 \n 38  38  35  34  34  31  29  29  29  27  27  27  25  28  27  26 \n 24  24  26  24  25  24  23  24  23  23  25  25  24  24  27  26 \n 25  24  24  25  26  27  27  28  27  27  27  26  27  27  28  30 \n 29  33  31  30  27  28  28  28  27  28  29  27  26  27  25  26 \n 28  27  25  26  26  26  27  27  26  27  27  28  27  29  29  30 \n 30  34  39  39  37  38  39  40  43  42  44  47  45  41  40  42 \n 44  46  46  45  42  40  38  40  42  36  33  29  29  39  50  97 \n204 230 236 242 243 240 237 236 235 235 238 240 243 235 232 236 \n237 241 248 245 250 243 242 242 245 248 249 250 247 242 242 239 \n237 243 250 247 242 242 242 242 245 245 249 245 243 244 245 246 \n243 241 245 248 240 237 239 243 246 244 239 241 244 247 234 235 \n237 239 243 238 242 247 239 239 236 237 235 237 238 237 240 245 \n245 247 244 245 243 242 237 246 246 248 232 117  62  52  37  34 \n 33  32  40  41  34  34  35  30  28  28  27  27  30  30  31  32 \n 31  28  29  29  31  31  31  33  30  32  31  32  32  29  28  29 \n 30  31  32  33  35  38  43  43  46  48  48  47  43  44  43  42 \n 37  36  37  38  37  39  40  40  41  42  43  43  42  41  40  39 \n 40  42  41  41  41  39  42  43  40  41  41  40  41  41  41  41 \n 43  42  43  44  43  42  41  41  38  36  35  33  33  34  32  30 \n 29  30  28  26  28  28  26  27  27  27  27  27  25  25  25  25 \n 25  26  26  28  27  29  29  30  29  30  32  29  30  29  27  29 \n 28  27  26  26  26  25  26  26  26  25  27  26  27  28  29  30 \n 25  27  26  26  26  24  26  26  27  27  28  29  33  35  35  34 \n 28  20  19  20  29  42  52 120 173 166 149 141 126 121 121 123 \n120 117 120 121 122 118 118 120 127 133 136 133 124 117 118 120 \n123 128 127 130 131 134 139 152 202 235 240 236 239 241 241 240 \n240 242 240 237 243 240 239 244 247 248 247 247 243 241 202 141 \n131 127 125 124 125 122 120 121 124  89  38  24  15  13  14  14 \n 14  14  21  26  29  19  15  14  14  16  19  20  25  26  28  29 \n 33  34  35  35  35  35  35  36  39  46  51  53  51  48  49  45 \n 41  41  41  39  37  38  39  39  40  40  40  39  38  37  36  38 \n 37  37  37  36  35  35  34  34  35  35  35  35  35  36  36  37 \n 36  36  36  35  32  31  30  29  29  28  26  27  28  37  42  25 \n 23  23  25  24  24  24  23  23  24  24  24  24  25  26  24  23 \n 25  25  25  27  25  26  26  26  27  26  27  28  27  27  28  30 \n 30  32  30  31  28  27  28  28  27  27  28  27  25  28  24  25 \n 28  25  25  25  25  25  27  27  27  26  27  27  28  28  29  30 \n 30  34  37  38  37  36  37  40  41  42  43  45  44  41  43  44 \n 44  43  44  44  41  40  39  40  43  40  32  33  26  34  43  67 \n147 136 138 155 178 188 197 208 227 225 223 225 238 238 238 240 \n241 238 239 240 241 241 246 240 234 231 232 241 244 246 243 249 \n242 238 249 243 246 248 239 251 250 239 246 247 244 247 237 239 \n243 245 246 249 250 248 239 241 244 243 241 240 241 237 231 240 \n241 245 238 234 240 241 238 236 242 241 232 227 230 234 239 244 \n243 246 240 245 245 234 228 234 239 238 206  90  60  50  36  34 \n 32  32  45  40  33  35  34  30  27  27  28  29  28  31  32  31 \n 31  31  30  29  31  32  30  30  31  31  29  30  31  29  28  30 \n 30  31  32  31  34  39  41  42  45  45  47  46  46  44  43  44 \n 38  36  36  37  39  39  40  41  42  41  41  42  43  42  39  40 \n 41  41  41  42  40  40  40  41  41  40  41  41  40  41  43  42 \n 43  42  42  43  43  43  43  42  38  36  34  34  31  31  30  30 \n 30  31  29  27  29  29  27  26  28  27  27  26  26  26  27  26 \n 25  26  28  29  27  30  31  30  30  30  33  31  29  29  28  27 \n 27  26  27  27  26  27  27  26  26  24  26  26  29  29  29  29 \n 27  27  26  27  27  27  26  26  27  27  28  28  31  33  36  36 \n 30  23  18  18  23  37  48  79 169 169 154 148 128 118 123 127 \n125 120 125 124 122 117 118 125 124 126 122 119 114 118 113 117 \n122 126 126 128 131 135 156 203 243 248 247 236 240 243 246 247 \n245 248 244 245 248 248 245 245 245 247 246 245 239 201 147 131 \n128 125 124 126 122 120 124 126 121  88  38  24  15  13  14  13 \n 14  15  21  28  30  20  17  16  16  17  17  20  26  26  28  30 \n 33  34  34  35  36  34  35  35  40  46  51  52  50  49  46  43 \n 40  39  40  38  36  37  39  39  40  40  39  39  40  38  37  36 \n 36  36  35  35  35  34  34  34  35  34  34  36  36  36  36  37 \n 37  36  38  37  33  31  30  28  28  27  27  27  26  28  28  24 \n 24  23  23  23  23  23  24  24  25  25  25  24  24  25  25  25 \n 24  24  24  26  26  26  26  25  27  27  26  26  28  28  29  28 \n 29  30  30  29  28  28  29  28  28  28  26  25  27  27  25  25 \n 26  25  25  26  27  27  27  26  26  26  26  27  27  27  28  30 \n 30  33  37  38  38  37  39  40  41  43  43  45  44  43  43  44 \n 42  45  44  43  42  40  41  39  40  42  34  33  27  30  41  51 \n137 125 115 115 116 120 128 139 146 143 142 148 173 183 194 212 \n230 239 241 241 239 244 246 244 238 239 240 235 246 243 247 250 \n245 237 241 243 250 249 235 244 245 238 244 244 243 242 244 245 \n240 243 248 248 248 246 237 241 245 247 248 243 238 235 240 244 \n243 238 235 239 239 240 239 235 238 237 232 228 235 235 236 235 \n239 239 239 240 238 238 237 239 243 245 190  78  56  46  37  33 \n 30  33  42  38  34  35  32  28  26  26  28  28  29  31  32  33 \n 31  30  30  30  30  31  30  29  31  31  30  31  31  31  31  29 \n 29  32  32  33  34  38  42  42  45  45  45  45  45  44  41  40 \n 38  36  36  36  39  39  40  41  41  40  41  43  42  41  41  42 \n 41  41  41  42  40  40  42  44  43  41  42  41  42  42  41  43 \n 43  43  42  42  42  43  43  41  39  37  35  33  31  31  31  29 \n 28  29  28  27  28  27  27  27  26  25  28  28  26  26  28  28 \n 25  26  28  29  28  29  30  30  31  30  32  31  27  27  27  26 \n 27  27  27  26  25  25  26  25  26  27  28  27  29  29  30  29 \n 26  27  27  25  25  26  26  26  27  27  28  28  32  32  35  35 \n 31  24  18  19  21  29  44  51 135 165 155 149 142 117 122 128 \n130 129 131 131 126 122 124 126 124 124 123 124 119 118 119 116 \n120 125 131 131 138 164 226 241 237 238 240 235 245 251 248 244 \n239 235 242 245 248 246 244 241 242 243 242 231 174 142 134 129 \n128 128 125 123 121 120 123 122 122  87  39  24  14  12  14  14 \n 14  13  21  27  29  18  16  16  16  17  18  21  26  27  26  29 \n 33  35  35  35  34  34  34  36  41  47  50  50  50  51  47  42 \n 40  39  41  39  37  38  40  41  42  41  40  40  39  38  36  37 \n 35  35  35  36  36  36  34  33  36  33  34  36  37  39  38  37 \n 38  39  39  37  32  31  31  28  30  29  28  27  26  27  25  25 \n 25  25  23  24  25  25  25  25  25  26  25  24  24  25  26  25 \n 24  25  25  25  24  25  28  28  25  26  27  27  29  31  29  28 \n 29  29  29  27  30  28  26  25  26  26  24  23  26  25  25  26 \n 27  27  27  26  26  25  25  25  25  25  25  27  28  27  29  30 \n 30  32  35  38  39  38  39  40  42  44  45  45  44  43  42  43 \n 42  44  46  44  43  41  42  40  37  39  37  32  29  28  39  41 \n111 135 108 109 114 114 117 120 121 124 124 124 129 129 126 124 \n126 134 146 154 171 187 183 190 204 207 222 229 242 248 248 249 \n242 243 244 244 245 244 247 242 240 243 238 237 244 244 245 241 \n239 240 243 244 248 247 246 246 243 246 247 242 235 235 235 240 \n239 235 235 237 236 238 239 231 233 232 231 231 227 230 234 233 \n226 232 240 228 228 236 243 240 233 233 155  69  52  43  33  33 \n 31  37  42  37  33  32  30  27  26  26  27  27  31  31  32  32 \n 32  31  30  30  31  32  31  31  32  31  30  30  30  30  31  30 \n 30  33  35  36  37  40  44  43  45  46  44  46  44  44  42  41 \n 39  35  37  35  40  41  40  41  41  41  42  42  41  43  42  43 \n 41  40  41  41  40  42  41  41  42  43  42  42  41  41  42  42 \n 43  42  42  41  41  42  43  41  40  39  36  34  32  31  30  29 \n 29  29  29  28  29  28  27  27  28  27  28  27  26  25  27  28 \n 26  27  27  28  28  28  29  30  32  31  32  30  28  27  27  28 \n 28  27  28  27  27  25  27  26  27  28  28  27  28  29  29  29 \n 28  28  28  29  26  26  27  27  28  28  28  29  32  34  35  34 \n 34  28  19  19  20  22  40  48 101 155 155 150 149 114 108 118 \n132 134 133 133 133 127 124 126 121 122 134 128 122 124 124 125 \n128 128 134 137 175 228 248 240 236 236 237 237 243 249 246 245 \n243 242 242 242 244 244 243 245 247 239 219 169 139 134 132 129 \n129 130 128 123 123 125 123 122 122  83  41  25  14  12  13  14 \n 13  13  20  27  30  18  16  17  15  15  18  20  25  26  26  29 \n 33  34  34  33  34  35  36  37  41  47  50  51  50  49  47  44 \n 42  40  40  38  37  38  38  39  41  40  39  41  40  37  36  36 \n 34  33  35  35  34  35  33  33  35  33  34  36  37  40  39  38 \n 37  40  38  36  34  31  30  28  30  30  28  27  27  26  24  25 \n 26  26  24  24  25  25  26  25  24  25  24  24  25  26  25  24 \n 24  25  25  26  25  25  26  27  26  26  26  27  28  28  29  29 \n 28  29  29  27  28  27  26  26  26  26  26  25  26  26  25  25 \n 27  25  27  27  25  24  23  24  26  26  27  28  27  27  29  30 \n 31  32  36  39  39  38  37  40  42  44  46  44  45  44  41  42 \n 43  43  45  44  44  41  40  36  34  37  39  32  30  26  35  41 \n 85 144 115 116 115 113 116 117 120 121 121 121 126 128 124 120 \n120 123 129 131 129 128 131 136 141 137 141 145 170 193 224 222 \n215 236 244 245 242 245 247 244 241 237 240 241 240 237 239 242 \n248 245 239 240 244 239 240 243 246 246 235 230 235 243 238 237 \n245 242 239 238 240 238 238 232 233 229 231 233 230 227 225 225 \n226 229 231 228 227 232 237 241 232 234 126  62  52  42  34  32 \n 32  38  41  37  31  31  29  27  26  26  28  29  30  30  31  32 \n 31  32  30  29  31  32  33  34  34  32  31  30  28  30  31  30 \n 30  31  35  35  37  40  44  44  45  47  46  47  44  44  43  41 \n 38  36  36  35  38  40  39  40  41  42  42  43  42  43  43  41 \n 42  41  43  41  40  43  41  41  42  43  42  42  43  43  42  42 \n 42  42  44  44  41  41  43  42  40  38  37  34  32  32  30  30 \n 30  30  30  28  27  27  29  28  28  27  27  28  26  27  27  27 \n 27  28  28  28  28  28  30  30  30  31  30  31  31  29  27  26 \n 27  27  27  27  27  27  27  27  27  26  27  28  29  29  31  29 \n 28  29  29  29  28  28  28  26  28  28  28  30  31  33  34  36 \n 37  30  21  19  17  19  32  47  64 130 157 153 152 124  84  83 \n 98 102 101  99 103 102 117 127 125 130 131 122 123 128 128 132 \n133 132 149 188 235 241 240 240 239 241 241 241 245 244 244 248 \n246 239 244 241 242 245 243 239 236 203 141 127 134 130 133 131 \n127 125 130 133 129 127 127 127 128  89  41  25  14  12  13  13 \n 13  14  19  27  30  17  15  17  15  15  18  19  26  26  26  30 \n 33  34  36  35  33  35  37  37  41  48  52  51  49  48  47  44 \n 43  41  39  39  38  37  38  38  39  39  37  37  38  38  37  36 \n 33  35  36  34  34  34  32  34  35  35  34  33  36  38  40  39 \n 37  38  39  35  32  30  28  29  28  27  27  26  26  27  25  25 \n 26  26  26  25  25  28  33  33  27  25  24  24  25  26  25  26 \n 24  24  26  26  25  26  25  25  25  27  28  26  26  27  29  29 \n 29  30  30  30  28  26  25  25  28  27  27  28  27  27  26  26 \n 27  27  26  25  25  25  24  24  27  28  26  26  27  29  29  29 \n 30  30  34  36  36  37  37  38  41  41  43  43  44  40  41  43 \n 43  46  46  45  45  42  38  31  30  34  38  33  31  27  30  39 \n 61 140 120 116 117 119 117 117 123 125 122 122 125 122 118 114 \n119 126 126 126 127 128 132 128 125 121 127 129 129 125 124 127 \n132 144 153 160 161 178 200 220 226 235 229 225 234 241 244 247 \n246 238 236 238 239 243 241 243 240 233 224 227 228 233 239 238 \n241 243 240 241 240 236 242 244 237 235 237 242 236 232 232 235 \n226 225 232 232 227 224 228 224 231 237  99  58  51  37  31  31 \n 34  41  39  35  33  31  29  27  27  26  27  29  29  31  31  31 \n 33  33  33  33  33  34  33  34  32  30  29  30  31  31  31  31 \n 30  31  33  35  37  38  41  45  48  46  47  48  46  46  44  43 \n 40  38  37  36  37  40  40  41  42  42  42  43  41  43  42  41 \n 43  43  42  42  43  43  41  42  43  43  43  43  41  42  42  42 \n 42  43  44  43  41  41  43  41  39  38  37  36  32  33  29  28 \n 30  30  29  28  27  29  36  32  29  28  29  27  28  28  27  28 \n 27  27  28  28  28  29  30  30  30  31  31  31  30  30  28  27 \n 27  29  27  27  27  28  27  27  28  27  29  29  29  29  31  30 \n 28  28  27  28  27  27  27  26  28  28  28  29  31  34  35  37 \n 37  32  22  19  18  18  26  40  51  92 159 153 151 147 118 118 \n117 108 108 106 102  90  96  94  93  98 106 105 106 113 121 131 \n133 142 182 229 232 234 234 236 235 236 240 240 240 240 243 241 \n239 239 240 244 242 248 244 232 187 149 132 129 135 133 134 134 \n129 126 125 127 129 131 127 126 128  86  39  23  13  13  13  14 \n 13  14  18  26  29  17  15  16  15  15  18  18  24  25  26  30 \n 33  33  34  36  36  37  36  38  40  48  51  49  48  49  47  44 \n 42  41  38  38  38  37  37  39  39  39  38  39  38  37  36  35 \n 35  35  36  34  34  35  33  35  35  36  35  35  36  36  39  39 \n 37  38  39  34  32  31  30  31  31  28  28  27  26  26  27  25 \n 24  25  24  23  25  26  31  31  26  24  23  25  24  25  24  26 \n 26  24  25  25  26  26  25  26  26  27  27  26  27  28  28  29 \n 28  30  32  30  29  27  27  27  28  27  27  29  26  26  26  26 \n 26  26  26  26  26  25  25  26  26  27  26  27  28  28  28  30 \n 30  30  34  36  35  36  37  39  40  41  41  41  45  44  43  44 \n 45  44  45  45  46  43  38  30  29  30  36  36  31  29  28  38 \n 49 123 133 113 115 117 113 116 120 121 118 120 118 114 116 114 \n117 122 120 121 118 123 126 123 117 122 124 123 125 124 122 124 \n129 132 131 130 129 134 141 142 151 162 160 155 166 184 208 215 \n213 219 233 238 243 245 241 236 230 239 240 235 234 230 241 241 \n240 241 246 243 241 236 243 241 238 237 242 248 237 235 239 234 \n227 232 243 241 237 233 225 225 235 224  81  58  49  36  30  29 \n 35  41  38  33  33  31  28  26  26  26  27  27  29  30  31  32 \n 34  34  33  33  33  34  34  33  31  30  29  29  31  33  34  31 \n 31  30  35  36  38  38  39  43  45  44  46  46  46  46  42  42 \n 38  36  35  36  39  41  41  42  44  41  42  43  43  44  44  42 \n 42  43  40  42  44  42  43  43  42  42  41  43  42  41  42  42 \n 41  44  44  43  41  41  43  42  40  37  37  35  33  33  31  31 \n 31  31  30  30  30  30  30  28  30  27  28  28  27  27  27  27 \n 27  29  27  25  27  29  29  29  30  29  29  31  30  29  30  28 \n 27  28  25  25  27  27  27  27  29  28  27  26  27  28  29  29 \n 28  30  28  29  29  28  28  28  28  27  30  30  30  33  35  36 \n 36  34  27  19  19  19  20  33  44  52 139 157 153 150 143 134 \n132 133 128 123 128 128 145 148 147 136 131 132 115 111 109 125 \n144 175 197 180 192 208 222 231 243 233 223 237 231 232 230 237 \n239 235 237 237 241 238 212 167 134 134 137 134 132 132 133 129 \n128 128 128 128 129 131 129 127 126  86  38  22  14  11  12  13 \n 13  14  18  25  29  18  17  16  15  15  17  20  24  24  27  30 \n 32  34  34  34  35  36  36  36  40  49  51  51  48  50  48  47 \n 45  42  40  38  36  36  39  39  40  38  38  38  37  36  37  36 \n 34  35  33  34  32  33  32  34  35  36  37  37  36  36  40  40 \n 38  38  37  34  33  30  31  30  30  29  29  27  26  27  26  25 \n 27  26  24  22  22  24  23  23  24  25  25  25  24  25  24  24 \n 23  25  25  26  26  25  24  24  25  25  26  28  29  29  29  30 \n 31  30  31  30  28  27  27  26  27  26  27  28  26  26  25  25 \n 25  26  27  26  26  26  26  25  25  25  27  29  28  29  29  29 \n 28  31  33  36  37  38  37  39  41  41  42  42  45  44  44  45 \n 45  43  44  44  43  42  39  31  24  25  36  40  31  31  27  34 \n 40  91 147 117 116 116 112 112 118 118 114 116 120 121 120 115 \n111 115 118 119 119 124 123 118 118 121 126 125 125 124 120 123 \n127 128 126 128 128 131 131 130 130 128 131 131 135 131 129 134 \n141 137 142 150 162 169 180 196 202 219 235 238 238 237 244 247 \n243 243 243 247 242 236 237 239 241 241 243 241 231 238 238 234 \n234 239 249 240 235 240 233 234 240 203  67  56  47  35  28  29 \n 34  41  37  34  33  29  27  26  25  25  27  30  31  31  34  34 \n 33  33  33  32  33  32  31  31  32  32  31  30  31  31  32  34 \n 32  30  35  36  37  38  41  44  45  43  43  42  43  44  41  40 \n 37  36  38  38  38  40  41  41  42  40  42  42  43  42  42  41 \n 41  42  41  43  42  41  43  43  43  43  41  42  43  42  42  42 \n 41  42  44  45  42  41  43  43  40  37  37  36  33  33  32  31 \n 31  31  31  30  30  29  28  27  28  26  25  27  27  27  27  27 \n 26  28  27  26  26  26  30  30  29  30  31  31  32  31  29  27 \n 27  28  26  25  26  28  27  27  28  27  27  25  28  29  28  29 \n 28  29  28  29  29  29  27  28  27  26  30  30  30  32  33  35 \n 36  35  29  20  18  18  19  26  43  46 106 157 153 149 147 139 \n137 143 149 140 147 143 144 143 148 151 146 143 134 133 160 204 \n225 225 222 191 183 191 201 203 215 215 195 185 194 219 226 224 \n223 222 230 237 236 222 169 140 141 135 135 134 129 126 127 126 \n124 119 124 127 127 126 124 118 110  80  37  22  13  12  13  13 \n 13  12  16  23  30  18  17  16  15  16  17  21  23  24  27  31 \n 32  34  33  34  35  36  37  37  42  48  50  52  49  49  48  44 \n 43  41  41  38  37  36  38  39  41  37  39  39  37  36  35  36 \n 34  36  35  35  35  33  32  35  36  34  36  37  36  37  39  40 \n 38  39  38  35  32  30  29  30  30  30  27  28  27  27  26  26 \n 27  26  25  24  25  25  23  24  24  25  25  24  24  24  23  24 \n 24  26  26  26  23  24  24  23  24  26  27  28  30  29  29  30 \n 30  30  30  29  29  27  28  29  27  26  28  27  26  27  26  25 \n 26  26  26  25  25  25  25  25  27  26  28  29  28  27  29  29 \n 28  30  34  37  38  39  38  40  43  43  43  43  45  44  44  45 \n 45  46  45  46  44  43  40  32  25  26  32  40  33  31  28  33 \n 38  68 148 123 115 114 115 113 116 114 110 110 111 115 115 116 \n114 116 115 115 118 123 121 117 117 121 123 122 120 120 119 124 \n126 126 127 126 129 129 124 126 128 125 124 125 124 126 131 136 \n140 132 131 131 132 134 133 137 139 143 158 168 188 198 211 230 \n229 230 234 237 244 241 246 242 242 244 243 241 235 238 249 238 \n238 247 250 245 246 246 241 245 245 181  62  55  42  33  29  29 \n 35  40  37  35  32  28  25  23  24  25  27  30  33  32  32  34 \n 34  33  35  35  34  32  32  32  31  30  31  31  32  30  31  32 \n 29  31  33  33  37  39  42  46  46  45  44  44  43  42  40  41 \n 39  36  36  37  38  40  40  40  42  40  42  41  42  41  42  41 \n 44  42  43  43  42  40  42  42  42  43  41  42  43  42  41  40 \n 43  44  44  43  42  42  42  41  41  39  39  36  34  33  33  32 \n 31  31  31  31  30  28  27  28  27  27  27  28  27  26  27  28 \n 28  29  28  28  28  28  28  30  31  30  31  30  29  29  28  29 \n 29  28  27  27  26  26  27  27  26  27  27  26  29  30  28  28 \n 31  31  29  28  28  27  27  25  27  28  30  31  32  32  33  35 \n 37  36  30  23  18  17  18  20  34  47  73 143 155 150 147 145 \n138 141 150 141 139 136 137 139 138 134 154 162 179 207 231 235 \n235 231 234 235 232 233 233 232 235 230 219 217 213 214 202 181 \n196 186 190 215 223 180 153 158 147 131 122 121 118 116 121 123 \n126 128 127 126 125 123 120 114  97  71  39  22  13  13  13  13 \n 14  12  16  23  29  17  15  15  15  15  19  22  24  25  26  30 \n 31  32  33  36  36  36  37  37  42  48  50  50  51  50  46  44 \n 43  42  41  39  37  37  37  39  40  39  39  39  36  37  35  36 \n 36  35  37  35  34  35  34  33  35  35  37  37  36  38  38  40 \n 39  39  38  35  32  31  31  31  30  28  28  30  29  28  27  25 \n 27  28  26  25  24  24  24  25  24  24  23  23  24  22  23  23 \n 25  24  25  24  23  24  24  25  25  26  27  28  28  29  29  30 \n 30  30  30  28  29  28  27  26  28  27  27  27  26  27  26  26 \n 26  27  26  26  26  25  27  26  27  27  28  26  26  25  27  29 \n 30  29  32  37  38  38  38  40  41  42  43  42  44  45  43  45 \n 46  46  44  45  43  42  39  33  24  23  28  36  35  30  29  31 \n 40  47 134 136 118 119 124 119 114 114 113 112 112 113 111 114 \n117 118 115 112 115 118 117 116 117 118 120 118 116 114 115 120 \n120 118 122 123 123 121 118 120 130 128 118 115 115 118 119 124 \n125 122 124 126 126 125 120 120 117 123 128 135 130 129 133 138 \n137 143 152 166 190 201 205 224 234 236 236 235 233 233 242 240 \n243 249 247 240 242 241 233 239 243 154  62  53  35  31  29  31 \n 37  39  36  33  30  26  26  23  23  26  29  31  32  33  34  34 \n 32  33  33  35  33  32  32  32  30  29  31  32  32  31  32  32 \n 30  30  31  31  34  38  43  46  44  43  43  43  41  42  40  40 \n 39  37  35  37  39  39  42  42  42  40  41  41  42  41  43  42 \n 44  41  40  40  40  40  42  42  41  42  42  42  42  43  42  41 \n 44  42  43  43  43  42  42  41  41  39  37  36  35  32  30  32 \n 30  31  30  29  29  29  29  27  28  29  27  28  26  26  29  29 \n 28  28  28  27  28  30  28  29  32  31  29  31  30  29  29  29 \n 28  27  28  27  26  27  26  28  27  28  28  28  29  29  29  29 \n 32  31  30  29  28  27  27  26  27  28  28  29  30  33  33  35 \n 36  34  31  26  19  19  19  18  29  44  58 119 161 155 148 144 \n153 152 153 137 137 149 146 139 140 159 201 226 239 242 249 245 \n241 242 239 241 235 229 230 232 236 233 236 237 238 242 239 224 \n228 219 220 206 161 130 114 119  98  88  94  85  90 100 117 126 \n124 125 127 127 126 126 123 115 104  76  36  21  14  12  13  14 \n 14  12  16  23  27  17  15  16  15  14  19  21  24  25  25  29 \n 31  34  35  35  35  35  37  38  45  50  51  51  50  51  47  44 \n 42  41  40  39  36  36  38  38  39  39  39  40  37  37  35  36 \n 35  36  37  35  36  34  33  34  35  35  36  36  35  38  38  38 \n 39  39  38  35  33  33  31  30  29  27  28  28  28  27  25  23 \n 25  27  25  24  24  24  23  24  25  25  24  24  23  22  24  22 \n 24  23  23  23  24  24  24  25  24  25  26  28  27  28  30  31 \n 29  28  29  29  29  28  27  27  25  27  27  27  26  26  25  24 \n 26  26  26  26  25  24  27  26  26  27  26  25  26  27  28  28 \n 28  28  30  35  36  38  38  40  41  42  43  42  44  44  42  44 \n 44  45  46  45  43  44  41  32  23  22  24  33  37  31  31  29 \n 38  42 117 145 121 122 122 122 119 113 113 114 113 110 111 116 \n112 112 112 111 116 118 117 116 117 119 119 116 116 113 114 115 \n114 115 117 121 118 120 117 116 122 119 113 116 115 117 123 123 \n114 116 114 115 116 112 107 110 117 118 125 128 122 129 133 130 \n127 124 127 130 138 141 140 145 159 165 170 196 224 231 246 239 \n242 249 244 238 235 239 246 244 231 125  59  53  34  32  29  32 \n 37  39  35  33  29  25  25  23  23  25  29  33  32  33  34  34 \n 34  33  33  34  31  33  32  32  30  30  32  32  31  31  33  32 \n 31  29  30  33  34  38  41  41  42  43  43  41  39  40  40  42 \n 37  36  36  36  39  40  40  40  42  41  42  41  41  42  42  40 \n 42  41  42  42  41  41  41  40  41  42  43  43  42  43  42  42 \n 42  42  41  43  45  42  41  41  43  40  39  36  34  33  32  30 \n 31  30  31  31  30  29  28  28  28  27  28  28  30  27  27  28 \n 27  27  28  27  26  28  28  30  30  31  30  31  30  31  29  29 \n 27  27  28  26  25  26  26  27  26  27  28  29  29  29  29  28 \n 30  30  30  30  29  28  29  28  27  27  27  28  29  33  34  33 \n 33  35  34  30  20  20  17  19  22  36  51  77 157 160 156 145 \n150 150 156 150 142 154 169 178 212 234 245 246 248 249 248 238 \n245 247 247 249 247 241 243 240 237 245 243 243 242 235 235 238 \n240 227 174 139 135 141 123 117 120 117 105  99  93  86  94 103 \n110 119 133 129 138 140 129 126 124  91  36  21  12  12  10  12 \n 12  12  16  23  26  17  15  15  15  14  18  20  24  25  26  31 \n 32  34  36  36  37  36  38  38  44  51  51  51  50  50  47  44 \n 43  44  42  39  36  38  38  39  41  38  41  40  39  37  35  35 \n 36  35  36  35  36  36  34  33  33  35  36  35  35  37  38  38 \n 40  39  35  34  33  33  32  30  29  29  28  27  27  27  25  25 \n 24  25  24  24  24  24  22  25  24  23  24  23  24  23  23  24 \n 24  24  23  23  23  25  24  25  25  24  26  27  27  28  28  30 \n 30  29  30  28  29  29  28  27  26  26  25  28  26  26  26  25 \n 26  28  28  27  25  26  26  27  27  26  24  26  26  28  28  28 \n 29  29  32  36  37  37  37  38  41  42  43  43  44  43  43  45 \n 47  45  46  45  47  46  41  34  24  20  20  27  36  32  30  28 \n 34  38  88 150 117 115 118 119 116 118 119 111 113 113 111 110 \n112 112 113 113 118 118 112 113 111 113 113 111 110 111 111 114 \n111 111 112 113 113 116 111 110 112 111 107 113 117 118 116 113 \n115 112 109 108 108 106 104 109 118 126 121 119 120 121 126 124 \n124 126 130 133 133 134 132 126 127 129 132 136 131 137 193 205 \n212 232 236 244 240 238 244 237 220 103  60  49  30  31  28  31 \n 36  36  35  33  28  26  23  23  25  26  33  36  35  36  36  34 \n 35  34  33  33  33  33  32  32  31  30  30  30  31  32  31  32 \n 34  34  31  31  32  35  40  41  41  40  40  39  38  40  40  41 \n 38  37  36  36  38  40  42  40  42  43  42  41  39  40  41  40 \n 42  42  42  42  42  41  42  40  42  41  42  43  41  42  43  42 \n 43  42  43  43  43  42  43  41  42  41  37  36  36  35  32  31 \n 29  31  31  31  30  30  29  29  29  28  27  28  28  27  28  28 \n 27  28  28  27  26  27  29  30  31  32  31  31  31  30  30  29 \n 27  27  27  26  27  26  27  27  27  27  28  28  28  28  29  28 \n 31  31  30  29  28  27  26  26  28  29  28  29  30  33  35  36 \n 36  36  37  32  22  20  18  18  19  29  46  61 135 160 159 150 \n147 156 159 162 184 207 233 238 247 244 249 251 247 245 245 240 \n243 240 238 248 245 243 245 242 237 242 243 239 239 243 243 247 \n222 175 143 138 134 135 129 140 146 132 127 125 121 120 117 117 \n119 119 119 119 128 129 125 117 121  93  37  22  14  12  12  12 \n 12  12  17  23  29  18  15  15  15  16  19  19  23  25  26  31 \n 33  34  36  36  38  36  38  40  45  51  49  50  49  50  47  44 \n 43  43  40  39  37  38  40  41  41  39  40  40  39  39  36  35 \n 36  36  35  34  35  34  32  32  33  35  36  36  37  36  37  38 \n 39  39  38  34  32  31  29  30  28  30  28  27  26  26  27  27 \n 25  25  25  26  24  23  22  23  23  22  24  24  23  25  24  24 \n 24  22  23  23  24  24  25  25  26  26  26  25  26  27  28  29 \n 32  29  30  29  30  29  27  27  28  27  27  29  26  26  24  24 \n 25  27  26  26  25  25  26  28  28  25  25  27  27  27  26  28 \n 29  29  31  35  39  39  38  38  41  42  43  44  43  43  43  44 \n 45  45  44  45  46  45  42  35  25  21  19  23  34  34  31  29 \n 31  38  65 144 125 110 115 120 117 120 118 112 108 113 114 112 \n112 117 119 117 119 122 122 114 112 110 111 112 115 115 113 113 \n111 112 110 106 112 116 111 108 108 107 108 112 116 114 109 111 \n114 112 110 111 109 108 111 109 112 127 129 119 116 122 121 121 \n120 128 133 130 130 131 134 128 123 130 132 132 127 117 125 131 \n152 193 222 235 237 240 247 236 205  92  54  43  31  29  29  31 \n 36  36  36  33  28  25  24  23  25  28  35  38  37  37  38  36 \n 35  34  32  32  33  33  31  31  33  33  31  30  32  33  31  32 \n 33  34  30  30  34  35  41  43  41  40  38  37  39  41  40  40 \n 39  38  35  35  37  40  41  42  41  42  41  41  41  40  41  42 \n 41  41  41  41  41  41  40  41  41  41  40  41  39  41  41  42 \n 42  41  43  42  42  42  42  41  41  41  39  37  35  35  32  32 \n 32  30  29  29  29  28  28  29  28  27  27  27  27  27  28  28 \n 26  25  26  26  26  26  28  28  29  30  32  31  30  30  30  28 \n 29  28  28  27  26  26  27  25  28  25  27  27  28  27  29  27 \n 30  30  29  28  29  28  26  26  26  27  30  29  31  32  34  36 \n 35  35  36  35  25  20  19  18  19  22  40  50  93 154 159 151 \n142 169 216 234 247 247 251 249 242 235 235 244 247 249 246 240 \n230 228 235 244 240 245 250 243 242 244 242 234 239 242 238 204 \n152 145 151 146 144 142 147 149 156 149 132 134 133 128 129 133 \n129 127 126 120 118 117 119 117 123  90  37  21  14  12  13  12 \n 13  12  17  23  29  18  15  16  15  17  17  19  23  26  28  31 \n 30  33  33  36  35  38  37  40  46  50  50  50  50  52  49  45 \n 42  41  40  39  38  37  43  43  42  42  40  38  39  39  39  36 \n 35  34  35  34  33  33  32  32  35  35  35  36  36  36  39  39 \n 38  39  40  36  32  30  29  29  27  28  26  26  25  25  26  26 \n 25  25  26  25  24  24  23  23  23  24  24  23  25  25  24  25 \n 24  23  25  23  24  22  24  24  24  25  24  25  26  28  28  30 \n 27  29  30  29  30  29  27  26  28  27  26  27  25  25  25  25 \n 25  27  27  27  26  26  27  27  27  27  27  28  27  26  25  28 \n 31  31  31  34  38  38  38  38  39  39  43  44  45  44  43  44 \n 45  46  43  45  46  44  43  36  23  22  19  21  29  34  32  31 \n 27  36  49 119 138 108 105 109 113 115 118 119 111 108 110 113 \n118 119 123 120 119 120 120 116 113 112 112 114 113 111 113 111 \n109 114 115 114 118 115 108 106 101 103 107 109 102 107 108 112 \n111 112 115 111 112 114 117 118 115 112 112 115 115 119 120 125 \n121 126 129 127 129 135 135 125 122 129 132 131 123 121 121 121 \n125 134 150 175 230 243 248 245 179  75  50  40  31  29  29  33 \n 36  35  35  31  26  24  24  23  25  26  33  38  39  38  38  37 \n 35  35  35  33  32  33  33  33  34  34  33  30  29  31  30  32 \n 32  31  30  29  31  35  41  44  43  40  39  40  40  41  41  42 \n 39  38  36  35  37  40  41  42  42  43  41  41  41  41  41  42 \n 42  42  41  40  40  41  40  42  41  41  40  41  41  43  42  42 \n 42  42  44  43  44  43  42  42  41  39  39  37  35  34  34  32 \n 30  29  28  29  31  29  27  27  27  27  28  26  27  26  27  28 \n 27  26  26  26  28  27  27  26  28  28  30  29  30  30  30  29 \n 30  29  27  27  27  24  26  26  27  26  26  27  28  27  28  28 \n 30  30  29  28  29  28  26  26  27  27  28  28  31  32  33  35 \n 36  35  37  35  27  23  19  18  19  20  31  43  75 134 159 154 \n142 161 247 243 240 244 244 244 246 244 239 241 246 251 248 241 \n230 230 245 250 244 247 246 243 245 246 247 249 249 236 204 162 \n145 149 151 150 147 147 142 146 152 148 141 142 142 131 135 138 \n135 132 133 133 127 127 130 120 123  92  34  21  13  11  13  13 \n 11  12  16  22  28  17  16  15  15  15  19  20  24  26  28  32 \n 33  33  35  36  37  38  36  40  47  50  51  50  52  52  48  46 \n 43  42  39  38  37  37  41  41  42  43  40  39  39  38  37  35 \n 34  33  36  35  33  34  33  33  33  33  34  34  36  36  37  37 \n 38  39  38  35  31  30  31  30  28  29  27  25  26  27  26  26 \n 26  25  25  24  24  24  24  24  24  25  24  24  22  23  23  25 \n 25  24  25  24  25  25  23  25  25  24  24  26  28  28  28  29 \n 29  29  30  29  28  28  28  26  28  29  27  27  25  26  27  25 \n 27  27  26  26  25  26  26  26  26  27  28  27  25  26  27  27 \n 28  29  30  34  39  40  39  39  40  40  42  43  43  43  43  44 \n 44  45  44  45  45  43  42  38  23  22  20  21  25  31  32  32 \n 28  34  39  94 150 113 111 112 115 120 122 118 112 106 106 108 \n118 122 121 113 113 115 114 117 115 117 117 118 117 115 115 109 \n113 114 112 110 117 121 108 106 101 102 113 116 111 113 114 120 \n124 113 112 114 119 118 121 121 117 119 114 117 122 118 120 123 \n117 117 121 125 126 123 124 116 112 117 114 121 116 117 123 121 \n123 136 137 139 170 216 240 243 155  66  50  38  31  28  27  32 \n 37  34  33  31  27  23  23  22  24  25  33  39  40  39  39  38 \n 37  36  34  34  33  32  33  33  33  34  35  32  29  31  32  33 \n 31  31  31  30  32  35  40  42  43  42  41  42  43  43  41  41 \n 39  37  36  36  38  40  40  40  42  41  42  41  42  42  41  41 \n 41  42  42  39  39  41  40  42  43  42  41  42  42  43  43  44 \n 44  42  44  43  43  43  43  42  42  43  40  39  37  35  34  32 \n 31  30  29  28  30  29  28  28  29  28  27  27  27  26  26  27 \n 25  26  26  27  28  28  27  27  28  28  29  29  30  30  29  28 \n 28  28  26  26  27  26  25  27  26  26  26  27  28  28  27  26 \n 27  28  27  26  27  26  27  28  29  30  29  29  30  33  34  34 \n 34  36  37  35  30  25  18  19  18  17  24  42  54 104 161 159 \n149 138 220 237 239 249 246 248 251 247 246 249 248 251 245 242 \n245 244 249 248 248 245 243 246 241 244 245 243 216 183 149 147 \n155 159 153 143 138 142 145 147 148 139 137 144 140 135 134 136 \n132 132 137 136 145 147 141 128 114  87  36  22  14  11  12  12 \n 12  12  16  23  32  19  16  15  14  15  19  23  24  26  27  32 \n 34  34  35  37  36  38  37  39  47  49  51  50  50  50  47  45 \n 44  42  41  38  37  39  39  39  41  42  40  41  40  38  36  36 \n 35  35  34  32  34  33  32  32  30  31  33  33  35  37  37  35 \n 35  37  37  35  31  29  31  30  28  28  27  26  26  26  24  25 \n 27  26  25  25  25  26  25  24  24  25  23  23  25  25  23  24 \n 23  22  23  24  25  25  25  25  26  28  27  26  27  29  29  28 \n 31  32  29  30  30  28  28  27  28  28  27  26  25  26  27  27 \n 28  26  26  26  25  25  25  26  27  27  26  24  27  26  26  28 \n 29  29  30  34  39  39  38  38  41  42  43  43  43  42  42  43 \n 45  45  44  45  47  46  44  40  27  20  18  19  21  27  31  30 \n 29  30  38  61 149 122 118 117 110 112 120 120 115 109 106 109 \n115 117 115 112 111 113 117 118 121 118 113 117 118 117 115 117 \n116 114 113 114 117 123 103 102 100 102 117 119 114 111 106 113 \n112 112 113 113 121 115 113 112 113 118 117 120 119 115 115 113 \n111 115 115 117 124 124 115 111 110 113 122 124 111 109 114 119 \n123 136 129 126 130 149 220 242 121  56  46  34  29  28  28  34 \n 37  35  33  29  26  23  21  23  24  26  33  37  39  39  39  40 \n 38  37  35  35  34  32  33  34  36  35  32  32  31  32  32  33 \n 33  32  33  33  34  34  38  41  43  43  42  41  41  44  42  41 \n 40  38  38  36  38  39  39  40  43  42  43  42  42  42  41  40 \n 40  41  42  39  39  41  40  41  41  40  39  39  41  44  44  44 \n 43  41  42  44  43  45  44  44  43  43  42  40  37  36  33  32 \n 31  30  30  29  28  28  28  29  29  28  28  27  27  27  26  25 \n 26  26  26  26  26  28  27  29  27  28  28  29  29  29  29  28 \n 28  27  26  26  27  26  24  26  27  26  25  27  27  27  28  26 \n 27  28  26  26  27  25  26  27  27  28  28  30  31  33  34  35 \n 36  36  36  37  33  26  20  18  18  18  20  33  50  84 146 159 \n155 138 165 186 193 203 209 220 232 229 238 245 246 243 245 246 \n252 252 251 247 244 243 247 247 243 245 240 198 161 155 145 140 \n150 151 155 157 150 151 150 151 147 141 148 149 149 140 137 144 \n138 139 137 138 144 147 147 144 146  97  36  22  15  13  14  14 \n 13  12  17  23  30  18  15  15  15  16  19  22  23  24  27  31 \n 34  35  36  36  36  37  37  39  48  51  52  50  50  51  48  46 \n 44  41  39  37  37  37  40  39  40  40  41  41  39  37  36  36 \n 35  34  34  33  32  32  33  33  31  31  33  33  36  36  35  35 \n 38  38  36  34  32  30  30  30  29  28  28  27  27  26  26  25 \n 26  26  24  25  25  24  24  23  24  24  23  23  25  23  24  23 \n 26  23  24  23  25  25  25  25  25  27  28  27  27  27  28  29 \n 29  29  30  30  28  28  26  28  28  27  27  27  26  27  27  27 \n 27  26  27  27  25  24  25  27  26  27  26  25  27  27  27  27 \n 29  28  31  35  40  39  38  39  42  43  45  45  44  43  42  43 \n 44  46  43  44  45  44  44  41  30  21  17  19  20  25  31  31 \n 31  30  38  48 137 137 118 118 114 115 119 121 116 113 116 116 \n115 115 115 115 113 117 116 118 114 111 111 111 114 118 122 124 \n119 113 115 119 114 116 109 103 103 106 111 109 109 112 115 119 \n119 120 122 119 111 108 110 107 111 116 118 122 116 110 109 109 \n109 112 113 110 109 106 105 101 102 109 113 117 113 113 112 115 \n120 125 124 123 118 122 173 232  93  53  43  31  28  27  30  35 \n 38  35  34  28  26  24  22  25  24  28  35  39  41  40  39  38 \n 39  37  36  36  33  32  33  33  32  32  32  32  33  32  31  32 \n 32  31  31  31  33  36  38  41  43  43  42  39  40  44  45  42 \n 42  40  39  38  39  39  40  39  41  43  43  44  42  43  41  41 \n 40  41  40  40  40  40  41  41  40  40  40  42  43  44  42  43 \n 42  43  41  42  43  44  44  44  42  43  42  41  36  36  36  34 \n 32  31  29  29  29  30  27  28  30  29  28  28  28  27  26  26 \n 26  26  26  27  28  28  28  29  28  28  28  30  31  32  30  29 \n 28  28  28  28  26  26  25  25  26  26  25  25  27  27  26  26 \n 28  28  26  27  26  26  26  26  26  26  25  28  31  31  34  33 \n 35  35  35  35  34  30  22  18  16  17  18  23  40  61 121 153 \n157 147 149 168 174 174 171 173 172 171 172 176 184 197 203 206 \n210 213 216 229 241 237 237 251 250 228 170 149 148 149 149 148 \n146 148 148 148 145 151 161 158 149 140 141 146 151 142 142 147 \n141 136 129 134 140 144 137 136 147  98  36  22  15  12  12  12 \n 12  13  17  23  25  15  14  14  13  15  16  21  24  26  29  31 \n 33  34  36  37  38  36  37  39  50  52  50  50  52  52  49  47 \n 45  42  41  37  37  38  41  41  41  42  41  41  38  36  35  36 \n 34  33  34  33  33  31  33  32  32  32  33  33  34  36  35  37 \n 39  38  36  33  31  30  29  30  30  30  28  28  26  27  26  28 \n 25  25  25  25  27  24  23  22  22  23  23  23  24  22  24  25 \n 23  24  24  24  23  24  25  25  25  27  26  26  28  27  26  26 \n 27  28  29  32  31  30  28  27  27  25  26  26  27  26  28  26 \n 28  26  26  26  26  27  27  27  26  26  26  27  28  27  26  28 \n 30  30  31  35  39  38  37  39  39  43  44  45  45  44  43  42 \n 44  45  45  45  46  46  44  39  33  22  19  18  17  22  27  30 \n 32  29  38  39 106 148 117 120 114 114 117 114 111 116 115 115 \n114 113 114 115 116 118 116 116 115 114 117 117 118 115 118 119 \n117 116 115 112 116 120 113 109 109 111 111 111 108 113 116 117 \n122 123 120 120 119 115 113 114 121 121 114 117 121 117 118 118 \n115 117 113 109 109 104  99 100 107 114 114 107 107 104 103 106 \n111 112 115 114 113 115 145 208  62  49  40  30  27  27  30  35 \n 37  34  30  26  24  23  22  25  24  26  34  39  40  40  39  38 \n 40  38  37  36  33  33  34  32  34  32  32  33  33  31  31  31 \n 32  32  30  31  32  36  39  42  45  44  45  44  43  43  43  40 \n 40  39  39  38  37  39  41  42  42  43  42  43  43  44  43  42 \n 39  41  41  42  41  40  41  41  40  40  39  40  42  41  42  44 \n 43  42  42  44  43  42  44  44  43  43  42  42  39  37  37  35 \n 32  31  30  29  29  29  27  28  27  28  26  27  28  27  27  28 \n 26  26  27  26  27  27  28  29  27  28  28  29  30  30  30  29 \n 27  28  28  27  26  26  26  26  27  26  27  26  29  28  26  28 \n 27  27  28  29  26  26  26  26  27  27  25  26  30  31  33  35 \n 34  34  36  37  35  31  22  18  17  16  17  20  36  46  91 146 \n154 151 144 156 179 178 178 179 180 180 179 178 177 177 177 176 \n175 175 176 178 185 185 191 204 207 184 164 155 148 152 153 147 \n142 142 145 145 145 142 150 158 155 151 151 153 155 144 141 151 \n140 135 136 134 141 141 136 142 152  99  35  22  15  11  12  12 \n 11  12  17  24  27  17  14  14  15  15  17  21  26  26  28  31 \n 33  33  35  35  35  36  36  39  49  51  50  49  51  52  49  46 \n 45  42  42  38  39  39  40  41  43  44  42  42  39  36  36  37 \n 34  35  34  33  33  33  32  32  33  32  34  34  35  37  37  38 \n 38  39  36  34  32  31  30  29  29  28  27  27  29  28  25  26 \n 25  25  25  24  25  25  25  24  23  23  23  23  24  23  25  25 \n 22  25  26  26  24  24  24  25  27  27  28  28  30  29  27  27 \n 28  29  30  32  32  30  26  27  29  27  27  27  28  26  26  26 \n 26  28  26  26  26  26  26  27  26  27  27  28  27  27  28  28 \n 29  30  29  33  38  39  39  39  40  45  46  47  45  43  43  42 \n 41  44  46  44  45  47  45  42  35  24  18  18  17  20  24  29 \n 30  28  32  40  80 152 120 114 117 119 119 116 116 118 116 115 \n117 119 115 115 114 113 114 115 123 124 121 121 118 118 116 113 \n114 118 122 120 118 116 115 112 113 115 115 113 110 113 114 116 \n122 120 118 117 116 117 115 117 121 119 111 109 112 110 112 114 \n117 121 120 112 105 107 101 107 121 118 102 100 101  98  98  99 \n104 108 107 111 114 110 137 183  50  48  35  30  26  26  30  35 \n 36  33  29  25  22  21  23  24  24  26  33  37  40  40  40  38 \n 39  37  37  36  34  34  35  33  33  31  32  33  33  31  32  32 \n 34  32  31  32  33  35  39  41  43  46  46  45  44  44  42  39 \n 40  39  39  39  36  37  39  42  42  41  43  44  43  43  43  42 \n 41  41  41  42  41  42  43  43  42  42  41  41  41  41  42  44 \n 44  43  41  43  43  43  43  45  43  42  43  41  38  36  35  36 \n 32  31  30  29  30  29  30  28  27  28  26  27  27  27  27  26 \n 27  26  26  25  26  25  26  27  28  28  29  30  31  30  29  28 \n 29  27  27  27  26  27  26  26  27  27  27  27  28  29  28  29 \n 28  28  28  30  27  27  27  27  26  26  25  25  29  29  32  34 \n 35  36  36  36  34  33  23  20  19  17  17  19  27  43  65 120 \n155 155 145 139 177 180 180 181 181 181 181 183 182 181 183 181 \n182 180 181 179 177 177 176 175 172 174 174 173 172 172 169 165 \n166 164 161 152 144 142 140 144 147 153 155 146 145 138 138 141 \n148 137 141 145 153 147 138 137 140  98  34  22  14  12  13  13 \n 14  13  18  24  27  17  15  15  16  15  17  20  25  27  29  31 \n 33  34  34  35  34  37  37  41  50  53  52  51  50  52  45  45 \n 47  43  42  37  36  37  43  43  43  43  44  41  39  36  36  36 \n 35  35  33  33  34  33  31  33  35  34  34  34  37  37  37  38 \n 37  37  35  34  33  30  28  28  29  29  26  26  29  29  26  25 \n 24  25  25  24  24  25  25  25  23  23  24  23  23  24  24  24 \n 23  24  25  24  25  25  24  25  25  24  25  27  30  29  28  28 \n 29  30  30  31  32  32  27  28  27  26  27  26  26  26  26  26 \n 26  27  28  27  25  26  25  25  24  25  26  27  26  26  28  28 \n 31  30  32  35  38  38  39  39  40  45  44  46  46  44  43  42 \n 42  42  43  43  45  45  44  41  35  25  17  16  17  18  22  27 \n 30  31  29  39  58 137 130 114 122 122 119 116 117 118 119 117 \n118 118 119 119 112 113 115 119 121 122 119 121 125 127 122 114 \n109 110 116 116 118 117 120 113 112 111 112 116 108 108 113 115 \n114 118 119 116 113 115 120 127 120 112 113 121 121 119 112 107 \n113 128 125 118 114 116 113 112 117 114 111 115 109 107 109 113 \n115 114 115 120 118 114 157 147  49  46  32  30  25  28  32  35 \n 35  33  28  24  23  23  24  24  23  25  31  36  38  40  40  38 \n 39  38  38  36  34  34  35  34  31  31  33  33  34  33  31  32 \n 32  33  33  33  32  35  40  42  45  46  47  47  43  42  42  43 \n 40  39  39  40  38  36  39  42  43  42  45  44  43  44  42  42 \n 42  42  42  41  41  43  43  43  42  42  43  42  42  42  41  40 \n 44  44  43  44  43  43  43  44  43  44  43  41  40  38  37  35 \n 33  32  30  29  29  29  29  29  28  28  28  28  26  27  27  26 \n 26  26  25  25  26  25  26  29  29  29  29  30  31  29  29  29 \n 29  29  29  28  26  26  26  27  27  28  28  28  27  28  29  28 \n 29  29  29  30  28  28  28  28  25  25  26  27  30  29  33  33 \n 34  36  37  37  37  35  27  21  19  18  17  18  22  37  56  95 \n154 156 149 141 162 180 179 178 179 180 182 183 181 181 183 183 \n183 182 183 182 179 179 177 179 181 180 181 180 182 183 184 183 \n184 181 178 177 172 171 167 168 166 165 161 161 160 154 157 157 \n153 145 152 156 156 144 145 149 154 104  35  21  13  13  13  14 \n 14  12  17  25  26  17  16  17  16  15  17  20  26  28  28  30 \n 33  35  34  35  35  36  38  42  49  53  52  51  51  49  44  44 \n 46  44  40  35  34  37  42  43  44  45  44  42  40  37  36  36 \n 35  34  33  32  32  31  31  32  34  34  34  36  38  38  38  39 \n 38  36  36  34  32  30  31  30  29  30  28  26  28  27  25  25 \n 24  24  23  24  23  24  24  25  23  23  24  23  22  23  24  22 \n 22  23  24  23  23  24  24  25  25  24  24  27  29  28  28  29 \n 30  30  30  31  31  32  28  28  26  25  26  24  24  25  26  27 \n 26  27  26  26  25  26  25  24  23  24  25  25  25  26  28  28 \n 32  34  34  34  37  38  38  38  39  42  43  46  46  44  44  43 \n 42  43  43  44  45  44  43  41  34  25  19  16  16  16  19  25 \n 30  32  29  36  47 122 145 119 123 123 118 114 115 113 113 114 \n116 116 114 115 112 116 117 119 120 123 122 123 122 120 120 118 \n111 108 114 117 124 122 121 114 112 111 114 116 115 113 112 113 \n117 116 117 117 116 120 123 121 111 109 114 120 123 123 122 120 \n120 121 130 129 127 126 125 124 121 112 114 116 115 116 115 118 \n119 121 123 123 122 120 196 121  53  43  32  28  25  27  33  36 \n 33  31  26  22  22  22  22  23  24  25  30  34  37  38  38  39 \n 41  39  36  36  34  35  35  34  32  33  33  33  32  31  30  31 \n 31  32  32  32  33  35  40  41  45  47  47  47  43  41  42  43 \n 41  38  38  37  36  37  38  41  43  42  43  44  46  44  44  45 \n 44  42  42  43  44  44  42  42  42  42  42  42  42  41  41  40 \n 44  44  44  44  43  42  44  44  43  44  43  43  40  38  36  34 \n 34  31  29  28  29  29  29  29  27  26  27  26  27  27  26  26 \n 27  26  27  26  26  27  27  28  29  30  28  29  30  29  31  30 \n 29  28  28  28  26  25  26  27  27  27  27  28  29  29  30  30 \n 32  31  29  28  28  28  28  28  27  27  27  28  30  29  32  33 \n 36  36  36  37  37  36  31  23  20  18  18  18  19  29  47  72 \n145 163 151 148 152 178 178 176 178 177 179 178 179 179 180 181 \n180 179 180 180 180 180 179 181 181 182 183 185 185 188 188 191 \n191 189 187 187 186 186 186 184 183 181 183 183 181 177 174 174 \n175 174 174 174 174 171 168 168 174 115  34  21  14  14  12  12 \n 13  12  16  26  27  16  15  16  15  15  17  20  25  28  28  30 \n 35  36  35  35  36  38  40  44  50  52  50  51  51  49  44  42 \n 44  44  40  38  36  36  41  42  43  44  43  42  40  39  36  36 \n 36  34  33  32  33  32  33  34  32  32  36  37  41  40  40  41 \n 38  35  34  32  33  31  30  29  29  30  29  28  27  27  24  25 \n 25  26  26  27  26  23  23  24  23  22  22  23  23  23  23  23 \n 23  24  25  24  23  24  24  24  23  24  26  27  28  28  27  28 \n 28  29  29  30  30  30  28  27  26  25  26  25  26  25  25  25 \n 26  27  26  26  25  25  24  24  24  24  25  25  27  29  28  28 \n 30  32  33  34  38  39  38  39  41  43  44  45  44  43  43  42 \n 42  43  43  43  44  43  42  42  36  26  19  16  17  16  16  21 \n 27  28  28  33  36  91 153 127 118 115 113 115 114 114 113 114 \n113 116 120 117 120 119 116 113 115 116 119 119 117 119 118 114 \n116 114 112 110 116 120 117 114 115 114 119 115 115 115 112 116 \n117 116 120 121 115 113 111 117 117 116 118 116 111 115 120 123 \n124 119 125 131 130 128 121 116 118 115 106 105 112 110 114 118 \n114 120 124 124 123 149 217 100  52  40  29  26  26  27  32  34 \n 32  29  25  23  22  22  22  22  23  25  31  34  38  39  38  39 \n 42  41  37  36  35  32  32  33  33  33  33  33  31  30  32  31 \n 31  31  32  33  36  36  38  40  44  45  46  45  44  43  43  44 \n 41  39  38  37  36  38  40  41  43  42  42  45  48  45  45  45 \n 43  43  43  44  43  42  43  41  40  42  42  42  43  42  43  41 \n 43  43  44  45  44  43  44  43  42  42  43  43  40  36  37  35 \n 34  31  30  30  28  28  29  29  28  27  28  27  28  26  26  26 \n 26  27  26  25  27  28  27  28  28  30  28  29  29  30  31  30 \n 29  28  28  28  28  26  27  28  27  27  27  28  29  28  29  30 \n 29  29  28  29  29  28  26  27  26  25  26  27  30  29  31  33 \n 34  34  35  37  36  36  33  25  20  18  19  16  18  24  42  54 \n126 165 158 151 153 174 180 176 178 178 178 178 179 178 179 180 \n180 178 178 179 180 180 180 180 180 181 182 185 186 188 189 191 \n194 192 189 188 187 188 187 187 187 189 189 189 187 184 183 183 \n184 182 180 181 180 179 177 177 184 119  36  23  14  13  12  11 \n 11  10  15  24  27  17  15  16  15  14  18  21  27  29  29  31 \n 34  36  36  36  38  37  39  44  51  51  50  50  51  49  41  41 \n 41  43  40  37  36  39  42  42  42  42  43  43  41  39  35  35 \n 35  35  34  34  35  33  32  33  32  34  35  38  43  42  41  43 \n 40  36  34  32  32  31  30  29  29  28  29  28  26  27  25  27 \n 25  25  26  26  25  23  23  23  24  24  23  23  23  23  24  24 \n 24  25  25  24  24  24  26  26  24  26  26  26  27  28  27  26 \n 28  30  29  30  30  30  30  28  27  26  26  25  27  26  26  25 \n 26  26  25  25  26  26  25  25  25  25  26  27  28  29  27  27 \n 30  30  31  33  35  38  38  39  41  44  45  45  46  42  43  41 \n 43  44  46  45  43  42  41  42  36  28  18  14  13  14  15  19 \n 26  29  31  31  35  69 155 125 109 114 113 114 110 113 115 115 \n115 117 120 118 116 117 119 115 116 116 120 117 117 120 120 115 \n119 123 124 114 114 119 115 110 112 110 110 111 114 120 114 112 \n114 115 118 119 117 109 105 113 119 118 116 111 104 112 120 119 \n116 117 117 116 119 117 110 107 117 121 113 115 123 122 120 126 \n121 123 127 125 128 191 212  87  51  39  28  26  26  29  32  33 \n 30  28  24  22  22  23  23  23  22  24  30  33  37  40  41  40 \n 41  40  37  35  34  33  33  33  34  33  32  32  32  33  32  31 \n 32  31  32  33  34  35  38  40  42  44  45  46  45  44  42  42 \n 40  38  37  35  38  36  39  41  43  43  42  44  45  45  46  45 \n 44  44  44  44  44  42  42  42  45  43  41  44  43  43  43  42 \n 45  44  44  45  44  43  45  44  44  45  43  42  40  37  36  35 \n 32  33  30  30  30  28  29  30  28  26  27  28  27  26  27  28 \n 24  25  26  26  27  25  27  27  27  27  28  28  30  32  29  29 \n 28  28  28  28  29  29  27  28  28  28  29  27  26  28  30  30 \n 31  31  30  30  29  28  27  28  27  26  27  28  30  30  30  32 \n 32  33  35  35  35  36  34  29  21  19  18  18  18  19  32  42 \n 90 155 157 148 149 158 186 177 178 177 177 177 177 177 179 179 \n179 180 179 180 179 179 180 180 180 179 180 182 183 185 187 191 \n192 192 191 191 191 190 188 186 187 187 187 188 186 187 188 186 \n184 182 181 179 176 175 174 174 177 115  34  22  13  13  14  14 \n 12  13  17  23  25  17  15  16  15  15  18  21  26  28  28  31 \n 34  35  36  35  37  37  39  45  53  51  50  51  52  46  40  40 \n 40  40  40  37  38  41  45  44  44  44  44  43  42  40  36  36 \n 33  34  34  33  34  34  33  31  34  32  36  38  41  41  40  39 \n 39  35  32  31  31  30  30  29  29  28  29  28  26  26  27  27 \n 26  25  26  25  25  24  23  23  24  23  23  24  25  24  23  23 \n 24  25  25  25  24  25  27  26  23  24  24  27  27  27  26  27 \n 28  29  30  30  30  33  31  28  28  27  26  27  26  26  26  25 \n 26  26  26  26  26  26  25  24  25  25  25  26  27  27  27  29 \n 28  29  31  33  35  38  38  41  40  42  44  44  45  43  45  43 \n 43  43  44  45  43  42  42  40  36  29  19  16  15  16  16  18 \n 23  28  28  27  37  43 140 136 108 114 119 117 118 119 115 113 \n114 115 120 122 121 124 121 117 112 112 114 117 122 116 120 123 \n119 115 116 113 114 116 115 113 107 110 115 115 113 117 113 114 \n118 115 115 109 109 107 106 114 118 120 111 102  99 104 117 115 \n108 109 111 109 108 108 107 108 112 112 110 115 121 120 115 117 \n117 119 130 132 170 225 188  70  50  36  28  25  27  30  34  33 \n 32  27  24  22  20  21  21  21  22  25  31  31  35  39  40  39 \n 38  39  38  35  36  36  34  31  32  32  32  32  31  32  32  33 \n 31  32  32  32  34  35  39  41  43  44  46  44  45  45  43  42 \n 40  38  38  37  37  37  38  41  42  43  43  45  45  45  46  45 \n 45  45  44  44  45  43  44  43  44  44  43  45  45  45  44  43 \n 43  43  44  44  45  45  43  45  43  42  43  43  40  40  37  35 \n 32  33  30  29  30  29  30  29  28  27  28  27  27  27  26  27 \n 27  26  27  26  26  25  26  25  28  27  28  29  30  31  30  30 \n 29  29  28  26  26  28  27  28  28  27  28  28  27  28  30  30 \n 30  29  29  29  30  29  28  27  28  28  28  28  28  30  29  32 \n 33  33  36  34  36  38  35  32  24  19  17  17  18  18  27  41 \n 65 125 169 154 148 151 178 183 178 176 178 179 178 177 178 179 \n180 179 180 179 178 178 179 179 179 178 179 181 182 185 187 190 \n190 192 193 193 193 189 186 186 187 188 186 188 189 188 188 185 \n183 182 179 176 173 171 170 170 175 114  34  23  13  11  13  13 \n 13  13  17  23  26  18  14  16  16  17  20  24  28  30  29  32 \n 34  35  37  36  35  36  39  47  53  51  51  52  51  46  40  39 \n 39  39  38  35  38  42  45  44  43  43  45  45  44  39  38  37 \n 34  35  35  34  35  35  33  32  34  34  36  39  40  41  40  39 \n 37  36  33  34  31  30  29  29  29  29  29  29  28  26  26  27 \n 27  26  26  25  25  24  24  24  25  25  25  25  25  24  24  24 \n 25  27  26  26  24  24  24  26  25  25  25  26  26  26  27  28 \n 28  28  30  30  30  32  32  29  28  27  27  26  27  26  26  25 \n 24  24  24  24  25  24  25  26  26  26  26  26  26  27  26  27 \n 29  30  30  32  36  38  38  41  40  42  44  45  45  43  43  40 \n 43  44  43  43  44  43  43  40  37  31  22  18  16  17  15  16 \n 21  28  31  29  36  38 112 152 108 118 121 122 123 119 118 115 \n117 121 124 122 120 116 115 115 118 117 113 112 114 116 113 114 \n123 124 117 111 113 119 111 110 113 119 121 114 111 106 106 110 \n118 121 119 115 112 113 108 106 107 114 113 107 101 103 114 117 \n111 114 115 115 112 115 115 115 113 111 110 113 122 117 109 110 \n116 120 126 140 217 241 168  62  48  32  28  25  27  31  34  33 \n 31  27  24  21  20  21  21  21  21  24  29  31  33  37  39  38 \n 39  38  37  36  34  35  34  33  34  33  32  33  32  34  34  33 \n 32  33  33  34  34  36  38  42  44  45  47  45  43  43  43  43 \n 44  43  38  37  36  37  38  39  42  44  42  44  45  44  46  47 \n 45  44  45  45  46  46  45  44  45  45  45  42  42  44  44  43 \n 45  43  43  44  44  45  45  45  41  43  43  43  41  40  36  35 \n 35  32  30  29  29  29  30  28  29  29  28  28  27  26  27  27 \n 29  25  27  27  27  27  25  28  27  29  29  31  30  29  31  32 \n 31  30  30  29  28  27  26  26  28  28  28  29  28  29  28  29 \n 28  30  30  28  30  30  28  27  29  28  28  30  29  31  30  32 \n 34  33  35  35  36  38  35  33  26  21  17  18  18  20  20  32 \n 49  86 158 159 146 151 160 183 180 177 177 180 178 177 177 178 \n178 176 178 178 178 179 179 179 179 178 180 182 182 185 189 189 \n191 192 194 192 191 189 186 188 189 188 188 186 187 187 184 183 \n182 181 179 174 167 167 166 172 181 115  37  22  14  13  14  14 \n 13  13  16  24  26  17  15  16  16  18  20  22  27  31  29  32 \n 33  34  36  36  34  37  40  47  51  51  52  52  50  45  41  39 \n 40  38  35  37  40  44  45  45  45  46  47  46  43  42  36  36 \n 34  35  35  36  35  35  32  32  35  34  37  41  41  41  41  41 \n 37  35  32  32  31  30  30  31  30  29  30  29  27  27  27  26 \n 26  26  25  26  26  25  24  24  25  25  26  26  25  24  24  24 \n 24  25  25  25  25  24  24  25  26  26  25  25  26  26  26  27 \n 28  29  30  29  31  32  32  29  26  26  27  27  28  26  24  24 \n 24  25  24  24  26  25  25  25  25  26  25  24  26  27  27  28 \n 29  29  31  32  34  36  38  41  41  43  45  46  44  44  42  42 \n 43  44  45  45  43  43  40  41  40  34  22  19  15  15  14  15 \n 19  25  30  30  33  42  77 155 123 115 113 114 115 118 118 119 \n117 121 118 114 118 117 116 113 113 113 115 112 112 113 113 115 \n117 120 119 116 113 112 109 112 117 108 109 109 115 115 108 111 \n109 111 112 112 115 116 110 108 110 106 102 101 105 106 111 107 \n111 114 120 120 112 112 112 116 115 116 119 121 122 124 119 116 \n126 123 128 183 241 244 137  56  45  32  26  25  28  30  33  33 \n 29  24  22  21  19  19  20  22  23  26  30  31  33  37  40  39 \n 39  38  36  37  36  36  33  31  33  33  34  33  31  32  33  34 \n 32  32  34  36  34  36  41  43  44  44  46  42  43  43  43  42 \n 45  43  39  37  35  36  36  37  41  42  41  43  43  43  45  44 \n 46  45  45  46  46  46  45  45  48  46  43  43  44  44  44  43 \n 44  44  44  45  46  45  46  45  41  43  43  44  41  40  39  36 \n 36  34  32  31  29  29  30  30  30  29  28  29  28  27  28  28 \n 27  26  27  28  28  28  26  28  28  30  28  29  30  31  33  33 \n 31  31  30  30  30  29  27  26  27  27  28  28  26  27  28  28 \n 29  31  30  31  30  30  29  28  28  28  28  28  28  30  31  32 \n 33  33  34  35  35  37  34  33  27  23  19  17  18  18  20  26 \n 44  59 136 159 144 148 151 179 180 178 180 180 179 176 175 177 \n179 177 176 176 178 178 179 179 180 178 180 182 184 189 191 192 \n194 195 195 193 192 189 188 186 185 189 188 186 186 184 184 183 \n181 180 176 171 166 165 172 178 189 121  37  21  14  14  13  13 \n 12  14  17  25  24  16  15  16  16  18  20  24  29  32  29  32 \n 34  34  34  35  36  38  41  49  53  52  51  53  50  45  43  40 \n 39  38  34  36  40  45  45  46  47  47  47  47  45  42  37  35 \n 34  35  35  36  35  36  34  31  35  35  39  41  41  42  42  41 \n 36  35  33  32  31  30  29  29  30  29  29  27  28  27  27  27 \n 27  26  25  25  24  25  25  25  25  25  25  25  23  23  23  24 \n 24  24  24  25  26  26  26  25  24  24  25  24  24  26  27  26 \n 27  29  30  30  32  33  31  28  28  27  26  26  25  24  22  22 \n 25  27  26  25  24  25  25  25  25  25  25  23  24  26  25  26 \n 28  29  32  32  34  36  39  43  41  42  41  42  44  43  44  41 \n 41  44  44  44  43  43  41  41  37  33  24  21  16  15  14  15 \n 18  20  28  32  31  39  57 147 134 118 118 115 119 117 115 115 \n115 118 117 113 116 118 121 120 115 118 117 117 118 116 118 120 \n119 114 114 113 112 110 111 110 114 112 114 110 115 118 112 113 \n111 110 115 110 120 127 115 111 113 110 113 106 104 107 108 105 \n114 124 124 120 121 118 115 114 109 116 123 128 124 122 117 119 \n127 124 149 216 236 239 104  55  44  32  26  24  29  30  32  33 \n 29  25  22  20  19  19  20  21  23  26  31  32  33  36  41  40 \n 40  38  37  38  36  36  33  32  33  32  33  33  32  33  32  34 \n 32  32  35  35  35  37  39  42  45  45  46  42  42  41  42  42 \n 42  41  41  38  36  38  39  38  41  43  42  41  44  43  45  46 \n 45  46  45  45  45  44  45  45  46  45  44  43  44  44  43  42 \n 44  45  45  47  48  46  45  47  45  44  44  43  42  40  39  38 \n 38  37  32  31  31  31  29  29  31  29  29  28  28  27  27  27 \n 27  28  28  28  27  27  27  27  29  29  29  29  31  32  33  32 \n 33  32  30  30  30  30  27  27  28  26  26  27  27  26  27  28 \n 30  30  28  30  29  29  29  29  27  27  27  26  29  30  31  31 \n 32  34  35  35  34  35  36  38  34  26  21  19  17  19  18  20 \n 37  46  99 155 148 145 146 159 190 181 182 181 179 179 178 178 \n178 178 177 178 178 178 179 180 183 183 183 184 187 189 192 195 \n197 195 194 191 189 188 185 186 187 188 190 187 186 184 182 180 \n176 172 170 167 167 172 183 193 205 123  37  22  15  14  12  13 \n 13  13  17  23  23  16  14  16  15  16  20  23  28  30  30  32 \n 35  35  35  35  36  38  43  50  51  51  52  53  50  43  43  41 \n 38  36  36  36  39  43  45  45  45  47  46  47  45  41  37  36 \n 35  34  35  35  36  37  34  33  34  38  39  40  40  42  40  38 \n 36  34  32  31  30  31  29  29  30  29  28  27  28  27  27  26 \n 27  26  26  26  25  24  25  26  26  26  25  25  24  24  23  24 \n 25  24  25  24  26  27  25  26  24  25  26  25  26  27  26  27 \n 29  29  31  29  31  33  31  28  26  25  26  27  24  24  24  24 \n 26  26  25  25  27  28  25  25  26  24  26  24  25  26  27  27 \n 28  29  29  31  34  35  37  41  42  43  45  44  43  43  43  42 \n 41  42  43  44  43  41  42  43  43  36  24  20  17  15  13  15 \n 16  18  25  30  28  36  48 123 171 167 119 120 122 122 122 120 \n116 123 124 123 123 122 122 118 121 119 120 121 118 113 116 117 \n118 120 121 118 113 109 113 116 117 118 117 118 117 119 114 116 \n115 110 115 111 122 128 119 114 114 116 111 106 108 108 110 112 \n115 117 113 113 118 118 118 117 115 124 126 130 117 111 113 119 \n127 125 203 242 240 227  76  55  41  29  26  26  28  31  33  33 \n 28  22  22  20  19  19  20  22  23  27  31  32  33  36  41  41 \n 40  40  40  37  35  35  35  33  34  34  34  35  33  32  32  33 \n 31  32  34  34  36  38  39  41  42  41  44  43  43  42  42  42 \n 42  40  40  37  36  36  38  37  41  43  43  43  44  44  46  46 \n 45  46  45  45  48  47  47  46  47  47  45  44  44  43  42  43 \n 44  44  46  47  47  47  47  48  47  44  43  43  43  41  39  38 \n 38  35  33  32  31  28  29  29  30  30  29  29  28  28  28  29 \n 27  27  27  27  27  28  28  27  29  29  28  28  30  31  33  33 \n 32  31  30  30  30  29  29  28  28  28  28  28  28  28  28  29 \n 29  28  29  29  29  30  29  28  28  28  27  27  31  30  31  31 \n 32  33  35  35  34  36  35  37  32  27  21  19  18  19  18  20 \n 30  43  72 135 152 145 147 151 178 184 179 180 178 180 179 180 \n179 179 181 180 179 178 179 180 183 184 184 185 188 190 195 198 \n195 196 194 191 186 186 187 191 191 190 189 187 183 182 176 174 \n169 168 166 169 175 187 198 203 208 121  37  24  14  14  13  14 \n 13  14  16  23  25  17  15  16  15  16  19  24  29  29  30  32 \n 35  34  34  35  35  37  44  51  54  51  52  53  46  42  42  43 \n 40  37  36  36  39  43  46  45  45  46  46  46  47  42  39  36 \n 37  36  36  35  36  36  35  34  35  38  39  41  41  41  38  36 \n 35  34  33  33  31  31  31  31  31  31  29  28  27  27  27  26 \n 27  24  25  25  25  25  25  25  27  26  25  26  25  23  23  25 \n 24  24  25  25  25  27  25  26  25  24  26  25  24  25  27  27 \n 29  28  30  30  31  31  30  29  26  25  25  28  25  24  25  23 \n 26  25  24  27  27  25  25  24  27  25  26  25  25  26  27  27 \n 28  29  29  32  35  35  37  40  41  42  43  44  42  43  40  41 \n 41  42  43  43  44  44  43  46  43  37  25  20  16  14  14  15 \n 16  16  23  29  29  33  40  95 165 143 121 120 118 125 130 128 \n125 134 149 139 124 119 119 117 120 120 120 123 121 119 114 115 \n121 121 121 118 116 111 117 120 115 114 113 113 116 120 117 115 \n118 107 112 115 124 123 122 124 124 123 108 105 103 105 112 114 \n124 127 118 109 117 113 116 118 116 122 131 133 117 114 117 127 \n135 160 236 250 251 218  67  54  38  29  27  28  28  31  33  31 \n 27  23  21  20  19  19  19  21  24  27  31  32  33  37  40  41 \n 41  41  40  38  34  34  34  33  33  34  34  33  34  33  34  33 \n 32  33  35  36  36  38  40  41  42  43  44  43  43  42  41  40 \n 38  36  36  36  36  36  37  38  40  41  43  44  45  45  46  46 \n 46  45  48  47  47  48  46  46  47  47  46  44  45  43  44  44 \n 44  44  45  47  47  47  48  47  46  44  43  42  42  41  39  39 \n 37  35  33  31  30  28  30  31  31  29  30  29  29  28  28  28 \n 28  26  27  29  27  26  27  26  28  28  28  28  30  32  32  31 \n 32  31  32  31  29  31  30  28  28  27  26  28  27  28  29  28 \n 27  28  28  28  30  30  31  29  27  26  28  28  29  29  32  31 \n 32  33  35  35  35  36  35  35  34  30  23  20  20  19  18  19 \n 23  35  54  98 151 146 144 148 162 187 180 178 176 177 177 177 \n178 178 178 177 178 180 180 181 184 185 186 186 188 192 195 198 \n199 199 196 194 190 190 192 192 192 190 186 183 180 172 169 168 \n166 169 177 183 194 204 207 207 198 112  35  23  15  14  15  15 \n 13  13  16  23  25  18  15  16  17  17  19  23  29  30  31  33 \n 34  34  35  34  36  38  45  54  55  51  53  53  47  42  42  43 \n 40  36  35  36  42  45  46  46  46  46  46  45  44  40  40  38 \n 36  35  35  35  35  35  35  37  37  38  39  40  41  42  39  39 \n 34  33  33  32  31  29  30  30  30  29  29  29  28  28  28  27 \n 28  28  27  26  26  25  25  25  26  25  25  25  25  24  25  25 \n 25  25  25  27  26  28  27  27  26  25  25  26  26  25  26  26 \n 27  28  30  29  28  30  32  28  28  27  26  26  25  25  25  24 \n 24  26  27  26  25  25  26  24  25  24  25  24  25  27  27  27 \n 26  27  28  32  35  35  37  40  40  42  43  43  42  42  42  43 \n 43  42  42  44  47  44  43  43  41  39  29  23  17  15  13  14 \n 14  17  21  27  30  30  36  65 155 140 126 137 138 129 128 122 \n119 149 177 149 113 117 119 117 119 118 117 113 117 120 121 125 \n123 116 117 119 120 121 123 122 114 113 110 108 114 118 111 110 \n114 119 120 123 126 112 112 118 123 120 114 113 115 117 116 112 \n115 122 118 115 119 122 131 128 111 113 124 128 121 118 123 127 \n135 205 240 241 243 179  61  49  35  28  27  27  28  30  31  28 \n 25  23  19  19  18  18  19  20  23  28  30  32  33  36  37  38 \n 41  39  38  37  36  35  35  34  35  35  34  34  34  34  35  33 \n 33  33  35  35  36  38  41  42  43  44  43  43  42  41  40  38 \n 38  37  35  34  35  35  36  39  40  42  42  44  47  47  47  46 \n 45  46  47  47  48  48  47  46  46  46  46  45  46  46  46  44 \n 44  44  44  46  46  47  47  47  47  46  44  43  43  41  40  39 \n 39  38  34  32  31  29  30  31  31  30  30  29  29  29  28  28 \n 27  28  27  28  27  28  28  27  28  28  27  29  31  34  32  31 \n 31  30  33  33  31  31  28  28  29  28  27  27  26  27  26  25 \n 26  28  29  29  32  30  31  31  29  27  28  29  29  29  32  32 \n 34  34  34  34  35  35  36  35  35  33  26  23  19  18  18  19 \n 21  27  45  76 136 148 143 144 153 182 180 177 175 176 178 177 \n176 178 176 177 179 181 183 182 183 184 185 188 190 194 197 200 \n199 195 193 192 193 195 195 194 191 187 182 180 171 167 166 167 \n172 178 197 203 208 209 206 195 173 100  34  23  14  13  14  15 \n 13  12  15  22  25  17  16  17  16  18  22  24  31  32  33  35 \n 34  34  37  35  37  38  47  55  56  52  55  53  47  44  42  40 \n 40  37  36  36  42  45  44  46  46  45  45  44  41  38  38  37 \n 35  37  36  36  35  36  34  36  36  37  39  41  42  41  38  37 \n 34  33  32  31  32  31  30  29  31  29  30  30  28  29  28  27 \n 26  26  26  26  27  26  26  24  25  24  25  24  24  23  24  24 \n 25  26  25  27  26  29  29  29  27  26  25  26  27  26  26  27 \n 29  29  31  30  29  30  32  29  28  26  25  26  25  26  26  26 \n 25  25  26  27  26  26  26  25  25  24  25  23  24  26  24  24 \n 27  27  28  31  34  35  37  39  40  43  44  43  42  42  43  42 \n 40  42  43  43  45  45  45  42  40  38  29  22  17  14  14  15 \n 14  15  17  24  30  28  36  48 145 145 132 186 189 132 123 121 \n120 121 116 117 118 121 118 120 125 122 123 114 118 121 125 123 \n119 114 114 111 119 128 129 128 116 112 112 111 112 114 116 110 \n114 118 118 120 123 112 105 111 124 123 115 114 119 119 118 118 \n120 106 110 117 121 126 127 121 114 113 120 122 123 120 121 121 \n166 235 239 235 241 148  62  49  33  29  26  27  29  30  31  28 \n 23  21  20  19  18  18  19  21  24  29  32  33  35  36  36  37 \n 40  38  38  35  36  35  35  35  36  34  33  33  35  36  36  36 \n 34  33  35  36  37  39  41  43  43  42  42  42  41  41  42  39 \n 36  34  33  34  32  32  35  38  39  41  43  43  44  43  46  45 \n 47  47  47  47  48  48  45  45  47  47  45  47  46  44  44  43 \n 43  45  44  44  45  46  47  46  47  46  45  43  43  41  40  38 \n 37  36  36  34  35  35  32  33  32  30  29  30  28  30  29  29 \n 29  29  28  28  27  27  28  29  28  27  29  29  30  32  31  31 \n 30  31  33  34  32  29  29  30  29  27  28  28  26  26  26  27 \n 27  29  32  32  32  31  31  31  29  28  29  28  31  31  31  32 \n 33  34  34  33  34  34  35  35  34  35  29  26  19  17  18  18 \n 18  22  40  59 104 142 144 144 150 160 183 174 176 175 174 175 \n175 177 177 179 181 182 183 183 185 187 188 189 191 193 196 198 \n198 195 194 197 198 195 193 191 186 182 176 171 165 164 168 175 \n186 203 212 213 212 207 193 175 158  99  35  22  14  13  14  14 \n 13  12  16  22  24  16  16  16  16  18  24  26  32  33  33  36 \n 34  35  36  36  37  38  49  55  55  53  56  51  44  42  42  39 \n 40  38  39  37  42  45  44  44  44  45  46  45  41  38  36  36 \n 35  36  34  34  34  35  34  34  34  38  39  40  42  40  38  38 \n 35  33  30  31  30  31  28  29  31  31  32  30  28  29  28  27 \n 27  25  26  26  25  26  24  23  23  23  24  23  24  24  23  24 \n 23  25  23  25  25  27  27  27  24  23  25  26  26  27  27  27 \n 27  27  31  29  30  31  32  31  29  27  26  26  25  24  27  25 \n 26  24  25  25  25  26  26  25  24  24  26  25  25  27  26  26 \n 27  28  30  32  36  36  37  39  39  41  43  44  43  42  44  42 \n 41  42  42  43  43  43  43  41  39  37  30  24  18  13  14  14 \n 14  16  17  20  27  29  34  35 118 159 117 113 119 119 121 121 \n122 122 122 124 121 119 121 119 122 126 124 121 120 117 115 115 \n113 120 118 112 114 117 119 124 122 116 116 119 116 114 110 107 \n111 113 113 116 119 114 109 111 124 123 113 109 112 115 106 109 \n111 106 110 118 118 118 120 118 119 120 122 122 125 122 121 131 \n221 249 245 243 234 116  61  44  30  26  27  27  29  32  30  26 \n 23  19  19  20  18  19  20  21  24  28  32  33  34  35  37  39 \n 39  38  37  36  36  35  33  34  34  34  33  33  35  35  36  37 \n 36  33  32  35  37  40  40  41  41  40  42  42  40  41  41  39 \n 37  37  35  33  34  33  35  37  38  40  44  44  43  44  47  47 \n 46  46  46  46  48  48  45  45  45  47  46  47  46  45  45  44 \n 44  43  42  43  44  45  46  45  45  45  44  44  43  42  40  38 \n 36  37  35  35  36  34  31  32  32  31  31  31  30  30  30  30 \n 30  29  30  28  28  28  27  28  29  27  28  28  30  31  31  30 \n 31  31  32  33  33  30  29  30  30  27  27  28  27  26  27  27 \n 29  29  32  31  31  31  31  32  29  29  31  31  31  30  30  30 \n 32  33  35  34  34  33  34  35  34  34  29  27  21  18  19  18 \n 18  19  33  48  82 132 145 143 148 152 174 181 177 174 172 174 \n175 175 176 177 181 181 180 181 184 187 191 192 193 194 200 199 \n198 197 199 197 196 192 190 187 181 176 171 166 166 168 176 185 \n205 214 213 212 206 191 175 166 162 105  32  20  15  15  13  14 \n 13  13  17  23  25  18  15  16  17  20  26  27  32  32  32  35 \n 36  37  36  37  37  41  51  55  57  55  56  50  44  42  42  40 \n 39  37  38  39  43  44  45  45  45  45  44  44  41  38  36  37 \n 37  36  34  34  35  34  36  36  35  38  40  40  43  40  38  37 \n 37  34  31  30  30  30  29  31  30  32  32  30  28  28  28  28 \n 27  26  25  27  25  25  24  25  24  23  24  23  24  25  23  25 \n 25  25  25  25  27  28  25  27  26  25  27  28  25  25  25  26 \n 26  27  30  29  31  32  32  31  30  29  27  26  26  25  25  26 \n 25  24  25  24  25  26  26  26  24  24  25  25  26  26  26  26 \n 28  28  30  31  35  36  37  39  40  41  42  43  43  44  44  42 \n 42  42  41  42  43  41  41  41  39  36  30  24  18  13  15  14 \n 14  15  15  19  26  31  32  36  86 160 130 120 121 124 156 165 \n138 126 122 124 123 122 120 121 126 125 121 124 124 121 116 117 \n118 117 118 116 120 120 124 126 122 115 117 118 120 127 120 108 \n106 104 108 110 118 122 124 123 129 125 119 116 114 119 117 114 \n115 113 119 122 119 117 116 115 118 123 123 120 119 122 121 143 \n233 244 243 241 218  95  54  41  29  25  27  27  30  32  28  25 \n 24  20  19  19  18  19  21  21  24  28  30  32  34  35  38  38 \n 38  37  36  38  35  35  33  33  32  33  34  33  33  33  36  38 \n 36  34  32  36  39  41  41  42  43  41  41  41  42  41  40  39 \n 38  36  35  35  35  35  34  36  38  40  42  44  45  45  45  46 \n 45  46  46  48  47  47  46  46  43  43  45  47  45  46  43  41 \n 42  42  43  41  42  43  42  43  43  43  44  44  42  42  42  40 \n 37  39  35  33  33  33  32  31  31  31  29  30  32  33  30  30 \n 29  28  28  30  30  28  29  27  29  28  27  28  28  31  32  31 \n 32  31  31  34  30  30  30  31  29  30  27  27  27  27  28  28 \n 29  27  29  29  32  33  31  30  30  29  28  30  31  32  31  31 \n 31  32  34  35  35  36  35  35  34  33  32  28  23  20  18  17 \n 17  19  24  38  57  95 148 142 148 149 160 184 175 174 173 176 \n174 174 177 178 177 180 181 184 187 190 193 194 196 198 199 198 \n198 198 196 193 192 189 187 180 175 169 164 164 171 178 191 205 \n214 213 209 201 183 174 167 164 165 100  35  20  13  14  13  14 \n 13  14  16  20  24  18  15  16  17  21  26  27  30  30  32  34 \n 36  36  37  37  38  40  50  56  56  56  54  47  42  39  41  40 \n 37  36  36  36  43  45  44  44  45  44  44  44  41  38  37  36 \n 37  37  34  34  35  36  35  35  36  39  42  43  42  40  38  37 \n 36  35  31  30  31  30  30  33  32  31  30  29  28  29  27  26 \n 26  28  26  25  25  25  25  24  23  23  25  23  24  24  25  25 \n 25  26  25  24  26  26  24  24  25  26  27  26  27  28  26  28 \n 27  28  29  29  29  31  32  30  27  27  26  26  26  26  25  26 \n 24  24  25  26  25  27  25  24  24  24  22  24  25  26  26  26 \n 28  29  31  30  33  34  34  35  39  39  41  41  42  44  43  42 \n 39  41  42  42  42  41  42  41  38  36  31  26  20  16  15  14 \n 14  14  15  16  23  28  30  38  59 139 149 121 126 129 196 208 \n144 124 123 123 119 119 122 122 122 122 119 120 120 124 126 129 \n120 117 123 119 121 120 118 121 120 110 109 112 116 118 117 111 \n109 108 112 110 115 118 124 128 123 117 123 123 115 118 122 120 \n120 117 115 119 121 118 115 118 120 122 124 122 122 123 125 125 \n167 222 243 245 187  77  48  39  27  24  25  26  30  31  27  25 \n 20  18  19  18  18  19  21  22  26  30  31  33  35  36  38  37 \n 38  37  37  36  34  35  33  33  32  32  32  31  31  33  35  35 \n 35  34  35  36  37  42  42  42  41  41  42  42  41  41  42  40 \n 39  37  35  35  35  35  36  37  36  39  43  44  46  45  45  45 \n 46  46  46  47  47  47  46  44  43  45  45  46  44  44  43  42 \n 41  39  40  42  39  40  42  42  43  43  43  42  40  42  42  41 \n 39  39  36  34  34  33  32  32  31  32  32  32  32  31  30  30 \n 29  30  29  30  29  29  29  27  27  27  28  28  30  30  31  31 \n 31  32  32  33  31  30  28  30  30  30  28  27  26  27  27  28 \n 29  28  29  30  31  31  31  31  29  29  29  30  30  31  31  31 \n 31  33  36  36  34  36  35  34  34  33  31  28  24  19  18  18 \n 18  19  21  31  50  74 135 143 147 147 153 174 178 175 174 173 \n173 175 176 178 178 181 182 185 189 192 196 196 198 199 198 197 \n197 195 194 191 189 187 179 178 169 166 168 177 188 194 208 210 \n209 204 193 180 169 169 167 164 164  96  34  21  14  14  13  12 \n 12  13  16  22  23  18  16  18  17  21  28  29  31  29  31  35 \n 34  36  36  37  38  42  51  56  57  56  54  45  41  40  39  38 \n 37  35  35  37  44  45  45  46  45  44  44  43  40  38  36  36 \n 35  35  34  35  34  34  35  34  37  39  42  42  41  41  38  38 \n 35  33  31  31  32  30  29  32  31  31  31  30  29  29  28  27 \n 26  27  26  25  26  26  26  26  25  24  24  24  24  25  24  25 \n 26  26  25  25  26  26  26  24  27  27  26  25  25  26  25  26 \n 27  28  30  30  30  31  33  31  28  26  27  27  27  26  26  26 \n 24  25  24  27  25  25  24  24  24  24  23  25  25  24  24  27 \n 29  29  30  31  33  34  36  36  38  40  40  41  42  44  41  41 \n 40  41  43  42  42  40  41  40  37  36  32  27  21  17  14  15 \n 15  14  15  16  22  27  29  37  48 117 160 129 124 123 131 133 \n123 124 125 124 124 120 120 120 123 124 120 120 125 125 123 121 \n116 116 118 117 119 120 123 125 124 120 115 115 114 117 119 117 \n118 120 113 106 111 121 123 126 125 117 118 118 112 116 122 127 \n129 124 122 123 124 122 118 120 123 125 124 120 121 126 128 124 \n128 153 207 240 162  65  48  35  27  25  26  26  28  29  26  24 \n 20  18  18  18  18  20  22  23  25  29  30  32  35  35  37  37 \n 39  38  38  38  35  36  34  34  35  35  33  32  32  31  33  35 \n 34  35  36  37  39  41  42  41  40  41  42  43  40  39  41  39 \n 38  38  37  36  34  33  35  37  36  39  43  44  45  43  44  45 \n 45  46  45  44  46  46  46  44  44  45  45  43  45  44  43  41 \n 39  39  38  39  39  40  42  42  41  42  41  41  41  41  39  40 \n 39  37  36  34  33  31  30  30  30  32  34  32  31  31  31  31 \n 29  30  29  30  30  31  30  28  27  27  29  30  30  28  29  30 \n 30  31  31  31  32  33  30  31  27  27  29  29  28  28  29  28 \n 29  31  30  29  31  31  29  29  29  31  30  30  30  30  31  30 \n 30  31  34  35  36  36  34  33  34  34  31  29  25  22  19  17 \n 17  18  19  22  44  61  98 137 138 141 149 158 181 173 172 173 \n176 177 178 179 180 184 185 187 192 196 198 198 198 197 196 197 \n196 193 193 188 185 181 178 173 167 175 199 210 206 209 208 203 \n190 174 161 159 162 165 164 162 154  90  36  21  14  14  13  15 \n 14  14  16  22  23  18  15  17  19  24  32  29  30  29  31  34 \n 36  36  36  38  40  44  53  56  55  55  53  46  41  41  41  41 \n 37  36  37  38  44  46  45  46  44  43  43  43  41  39  35  36 \n 35  35  36  35  34  34  34  35  38  39  42  43  43  41  39  38 \n 33  30  31  30  29  29  29  31  31  32  31  29  28  28  28  27 \n 28  26  25  24  27  28  26  25  25  24  26  25  26  25  23  23 \n 26  26  25  25  26  26  26  26  25  26  25  23  24  26  25  25 \n 26  27  29  29  29  31  33  31  30  27  27  26  27  26  27  25 \n 25  23  25  26  25  25  24  25  25  24  23  24  25  24  25  27 \n 29  28  28  29  34  36  37  37  36  39  40  43  43  42  42  43 \n 41  41  43  42  41  41  42  40  36  35  32  26  21  18  15  15 \n 15  15  14  15  18  24  29  34  41  88 164 134 120 118 119 119 \n119 121 121 125 126 123 116 119 122 125 122 122 119 120 123 122 \n124 123 130 129 118 118 124 125 127 129 127 121 122 122 118 116 \n115 113 109 111 121 127 127 120 116 111 113 117 114 116 119 129 \n126 122 124 120 118 121 120 118 127 128 122 120 121 137 148 135 \n127 129 135 149  98  54  44  33  28  25  25  27  29  29  26  22 \n 21  19  18  18  18  21  22  25  28  30  31  30  34  37  35  38 \n 37  36  37  35  37  36  34  34  34  34  33  33  32  33  33  34 \n 35  35  35  37  39  42  41  40  40  41  42  41  40  40  42  40 \n 38  39  38  37  35  34  35  37  37  37  41  45  45  44  43  46 \n 46  46  45  45  46  46  47  46  44  43  44  44  46  45  44  42 \n 40  38  40  40  40  41  42  43  41  42  41  41  42  41  40  40 \n 39  37  36  34  33  32  31  31  30  31  35  33  31  31  32  31 \n 31  30  30  30  28  30  30  28  29  29  27  27  28  28  28  29 \n 29  31  30  31  33  33  32  30  28  29  29  27  27  28  29  29 \n 29  31  31  31  30  30  29  29  29  29  29  29  29  30  30  30 \n 32  32  36  37  35  35  34  34  34  34  32  30  26  23  19  18 \n 17  17  19  19  35  53  79 122 132 132 147 152 167 177 172 174 \n176 177 181 182 183 187 188 191 194 197 198 198 198 198 197 196 \n194 191 190 185 180 177 174 173 193 205 205 208 209 209 203 190 \n169 154 146 153 164 165 157 149 144  82  35  23  15  14  15  14 \n 15  14  15  21  24  18  15  18  18  26  34  30  32  32  33  35 \n 37  39  37  35  40  43  53  55  54  54  51  45  41  42  42  41 \n 38  36  36  39  43  44  44  46  46  44  43  44  43  40  36  36 \n 36  35  35  34  32  33  34  35  37  39  42  43  42  42  42  37 \n 33  30  32  30  28  29  29  30  32  32  31  29  28  28  28  26 \n 27  26  26  25  26  27  25  25  26  26  27  26  26  24  24  23 \n 26  26  25  26  27  27  25  27  26  26  24  24  24  26  25  25 \n 26  28  28  28  30  31  32  30  29  28  28  27  28  26  26  26 \n 27  25  25  26  27  27  26  25  25  26  25  26  25  24  24  25 \n 26  27  28  30  32  34  36  38  37  40  41  39  41  42  42  43 \n 41  41  42  43  40  40  41  39  37  35  31  27  19  16  16  16 \n 15  15  14  15  16  23  28  32  39  70 164 151 131 125 123 124 \n122 120 120 123 124 121 119 122 125 120 120 119 119 119 117 117 \n124 127 125 125 127 127 121 124 121 124 127 124 119 117 112 118 \n107  96 109 115 120 121 123 117 112 111 113 116 117 117 117 124 \n127 124 121 116 116 118 117 114 117 124 124 121 125 179 223 198 \n163 146 134 121  70  51  39  31  27  24  25  27  30  29  25  22 \n 20  18  19  20  18  20  23  26  30  30  31  32  34  36  38  40 \n 38  39  38  36  36  35  34  35  35  34  33  30  32  32  32  34 \n 36  37  37  38  41  41  41  40  41  41  41  41  40  39  42  41 \n 37  36  36  36  35  34  34  34  36  37  40  44  44  44  44  43 \n 45  45  45  45  45  43  46  44  45  43  45  43  45  45  43  42 \n 41  41  43  43  42  43  43  43  41  42  41  39  42  40  41  40 \n 40  38  38  35  35  32  32  32  31  31  32  33  31  33  33  32 \n 32  31  30  31  31  28  27  29  28  27  27  26  27  29  31  31 \n 31  31  30  33  33  32  33  30  30  30  29  27  27  28  28  27 \n 29  30  31  33  33  33  31  30  31  28  29  30  30  31  32  31 \n 32  32  34  34  35  36  35  34  35  35  33  30  26  24  20  17 \n 17  18  18  18  26  42  64  90 133 136 144 149 156 182 179 176 \n177 178 179 180 183 188 189 194 197 199 197 197 197 198 193 191 \n191 190 184 180 174 172 183 202 203 210 209 209 202 192 172 158 \n146 143 145 150 159 160 156 144 143  81  39  23  14  13  14  15 \n 14  14  16  20  24  17  16  17  20  32  36  31  32  33  33  33 \n 36  37  37  36  39  45  54  57  57  54  52  47  43  43  43  40 \n 38  37  37  40  45  47  47  46  45  44  41  41  41  41  37  37 \n 35  35  35  36  36  35  34  33  37  40  42  42  44  42  41  36 \n 33  31  31  30  29  29  29  29  31  30  30  29  29  29  27  26 \n 26  28  26  25  24  24  26  26  24  25  27  26  24  24  24  25 \n 25  26  26  26  26  25  25  26  27  25  26  27  25  25  26  27 \n 26  27  29  30  30  31  29  29  29  29  28  27  26  26  26  25 \n 27  25  25  25  26  26  26  26  25  25  24  26  26  25  26  26 \n 25  27  29  30  31  32  35  37  40  40  40  41  42  44  42  44 \n 41  40  40  41  40  41  40  38  36  35  33  28  21  18  17  15 \n 15  14  14  14  15  21  27  30  37  45 148 161 131 135 131 131 \n135 131 128 123 124 127 128 132 128 121 121 120 121 119 118 120 \n127 124 121 122 123 128 127 122 117 117 122 125 120 114 115 117 \n111 105 115 120 120 122 123 122 123 122 123 127 123 121 125 132 \n128 119 118 120 121 124 122 114 108 112 124 125 155 222 239 233 \n235 224 198 162  50  48  38  29  24  24  25  27  30  27  22  19 \n 19  19  19  19  19  20  22  27  30  31  33  35  34  34  37  37 \n 38  39  39  36  35  34  33  33  34  34  33  33  33  34  32  34 \n 34  35  36  37  41  42  42  42  42  41  40  42  40  39  41  40 \n 37  36  35  35  36  35  33  32  36  38  41  43  44  46  43  43 \n 45  45  45  46  46  46  45  45  46  46  46  45  45  45  44  43 \n 41  43  44  43  41  41  42  44  43  42  42  41  42  41  42  41 \n 39  38  36  36  36  34  34  33  32  31  32  33  32  32  33  32 \n 31  31  32  32  31  30  29  29  29  30  29  28  29  31  31  30 \n 31  30  31  32  33  32  32  31  32  31  29  26  28  29  28  28 \n 28  29  31  32  33  32  32  31  30  27  29  29  30  31  32  30 \n 30  32  35  34  34  36  37  35  32  35  34  32  27  24  22  19 \n 17  18  18  17  21  36  54  70 125 137 143 146 150 170 188 178 \n180 179 183 184 187 189 193 196 196 195 195 195 195 195 191 189 \n187 184 180 180 173 174 194 201 205 212 208 201 185 171 152 143 \n139 142 146 152 159 154 152 149 143  80  43  26  14  14  13  14 \n 12  13  17  21  23  15  15  16  20  35  36  32  32  33  33  33 \n 37  37  37  37  40  45  54  56  57  55  52  44  42  43  45  44 \n 36  37  36  42  46  46  47  46  45  44  43  42  42  43  39  38 \n 36  36  35  35  35  36  35  34  36  40  42  41  43  41  39  35 \n 33  32  31  32  29  29  28  29  32  30  29  30  30  29  27  27 \n 26  25  24  23  25  25  25  24  24  25  26  25  23  23  24  24 \n 25  26  26  25  25  24  24  24  26  25  26  24  25  24  26  27 \n 27  27  29  30  29  30  30  30  30  30  28  27  26  27  25  26 \n 25  24  25  26  26  25  25  26  25  25  25  26  25  26  26  27 \n 26  27  28  29  31  33  35  37  39  39  41  42  44  44  43  44 \n 41  39  41  41  41  41  39  38  37  34  32  28  22  17  17  15 \n 14  13  14  15  15  17  25  30  35  38 123 166 140 135 129 125 \n132 137 134 133 134 134 128 126 119 115 112 112 116 118 120 121 \n121 119 122 120 116 121 126 122 116 121 128 127 121 121 123 122 \n121 117 121 123 121 123 122 122 123 120 121 125 125 124 126 127 \n125 115 122 127 123 125 123 116 104 110 124 119 182 223 206 189 \n186 176 156 129  50  45  35  28  24  24  24  29  30  26  22  20 \n 20  18  19  20  19  19  22  26  29  31  32  33  34  36  36  36 \n 39  39  38  38  37  36  36  34  34  34  34  33  35  33  33  32 \n 34  36  36  37  41  41  41  42  42  42  41  43  41  41  40  40 \n 37  37  35  34  34  35  33  33  36  38  40  43  46  47  43  43 \n 45  44  45  45  46  47  46  47  47  46  44  46  45  45  46  44 \n 44  44  44  42  42  41  41  41  42  42  41  40  41  41  42  41 \n 40  39  37  37  36  35  35  34  33  32  33  34  32  32  32  32 \n 31  32  31  31  30  30  29  30  29  29  29  29  29  28  30  31 \n 31  30  31  33  33  32  32  32  32  29  29  27  28  28  28  29 \n 31  31  31  32  34  33  32  32  33  30  30  30  31  31  31  30 \n 31  32  35  36  37  37  36  36  33  34  33  32  28  26  24  19 \n 17  17  19  18  18  28  48  61 102 136 136 142 148 157 183 181 \n179 180 183 185 187 189 191 194 195 193 192 192 192 190 188 187 \n183 177 185 196 176 190 204 210 210 207 192 174 150 137 136 139 \n142 143 148 152 153 151 151 148 135  79  37  21  16  14  13  13 \n 14  14  18  22  23  17  16  17  21  36  36  34  32  32  33  36 \n 36  36  37  38  41  46  55  56  56  54  48  41  41  42  44  43 \n 37  37  37  41  45  46  46  45  45  44  43  41  41  41  39  38 \n 36  36  35  35  35  35  33  34  37  41  42  42  43  41  39  35 \n 33  32  32  29  29  29  29  30  30  30  29  29  29  29  26  25 \n 26  27  26  24  25  26  26  25  25  24  24  24  23  23  24  25 \n 23  24  25  25  24  25  23  24  26  26  25  23  25  25  27  26 \n 27  28  28  29  29  30  30  31  30  28  27  28  26  25  26  26 \n 22  25  25  24  25  26  26  25  26  27  26  27  26  26  26  26 \n 28  30  29  31  31  33  36  40  41  40  42  42  42  44  43  42 \n 40  40  41  41  40  39  40  38  36  34  31  28  25  20  17  16 \n 15  13  14  14  13  15  20  28  34  39  82 160 145 128 125 125 \n128 131 129 127 131 130 126 116 110 104 100 102 111 119 125 125 \n124 125 128 127 121 126 129 124 118 118 121 121 125 127 123 126 \n126 124 124 123 123 123 128 126 121 121 121 123 122 121 122 126 \n121 115 123 127 128 131 130 127 127 124 123 119 120 118 118 117 \n121 132 138 103  47  44  31  27  24  23  26  32  31  25  19  20 \n 17  17  18  18  19  21  23  25  29  30  32  32  34  36  35  37 \n 38  38  38  38  37  35  35  36  33  34  33  34  33  32  33  34 \n 36  37  37  39  41  43  42  41  40  39  41  42  40  41  41  39 \n 37  36  34  34  36  38  35  35  37  40  42  45  47  47  44  42 \n 44  45  45  47  47  47  46  48  48  48  46  44  44  45  46  45 \n 44  44  45  45  46  43  43  43  44  44  42  41  41  40  41  42 \n 41  41  39  37  38  36  35  34  34  33  33  34  32  32  33  34 \n 33  33  31  31  30  30  31  32  30  29  29  28  30  29  33  32 \n 32  29  30  31  35  35  32  32  31  30  31  27  28  29  29  30 \n 30  32  31  32  34  33  32  33  35  32  30  30  31  30  31  30 \n 30  31  32  33  35  36  36  36  32  32  33  33  30  28  24  19 \n 17  16  18  17  17  22  41  55  85 127 137 141 149 151 167 190 \n178 180 183 186 188 189 191 193 194 191 190 188 187 186 184 181 \n178 175 176 179 196 207 212 209 204 197 167 147 133 132 134 143 \n147 146 150 149 147 150 150 139 153  83  37  22  15  12  12  15 \n 15  15  17  22  23  18  16  18  22  35  35  34  33  33  34  36 \n 36  37  38  37  40  48  57  56  55  54  47  41  40  40  41  40 \n 36  36  38  42  44  46  45  45  45  45  43  42  41  41  40  38 \n 37  38  36  36  35  35  34  35  38  40  42  42  41  40  38  35 \n 34  32  31  31  32  31  30  30  30  31  28  28  29  30  28  26 \n 26  27  27  26  25  26  25  25  24  23  24  23  24  25  25  24 \n 23  24  24  24  24  25  24  24  26  26  25  24  25  26  27  26 \n 26  27  28  29  31  30  30  32  32  30  28  26  26  26  25  25 \n 25  26  27  26  25  26  27  25  26  27  26  27  26  26  27  26 \n 28  28  29  30  33  33  37  41  42  40  40  42  42  43  42  41 \n 41  41  43  44  41  40  40  39  38  35  33  29  26  22  17  17 \n 15  13  14  14  14  15  19  26  30  39  65 148 158 135 136 132 \n134 138 128 123 124 127 128 124 117 109 106 106 111 116 126 127 \n127 127 130 131 126 121 123 124 124 121 123 122 124 126 122 125 \n124 121 123 120 120 119 130 130 119 120 122 122 119 119 119 121 \n119 117 119 121 126 130 135 137 128 125 117 117 116 120 131 138 \n159 173 188 105  49  43  29  25  24  24  28  30  30  25  19  18 \n 17  17  18  19  20  21  23  27  29  30  32  33  35  36  37  40 \n 39  37  38  38  36  35  34  34  34  35  33  34  34  35  34  34 \n 34  34  40  41  40  41  40  43  41  40  41  42  41  41  42  41 \n 36  35  35  36  37  36  35  36  37  40  42  43  45  46  44  43 \n 44  44  45  47  48  49  48  47  47  48  46  44  44  45  46  46 \n 48  46  45  44  43  43  43  42  43  44  43  41  40  41  40  41 \n 41  42  40  38  39  36  34  34  33  33  33  34  33  34  35  36 \n 36  34  34  34  32  32  32  31  30  30  29  29  29  30  33  32 \n 33  33  36  36  37  36  32  34  33  32  33  30  28  29  29  28 \n 29  31  33  34  34  35  35  35  34  32  32  32  32  32  34  34 \n 32  32  34  34  35  35  35  36  32  31  30  32  31  29  25  20 \n 18  16  17  17  15  19  32  47  73 109 134 136 145 144 151 176 \n197 183 183 185 185 187 190 188 188 188 186 185 183 181 177 177 \n180 184 191 205 213 212 206 196 182 170 146 136 133 134 137 146 \n150 152 152 145 148 152 151 160 159  80  37  22  15  14  13  15 \n 15  15  17  23  24  19  16  19  22  33  35  35  35  35  35  36 \n 37  38  37  37  41  49  58  57  56  53  45  41  39  39  40  39 \n 34  36  39  42  44  45  44  44  45  45  43  42  42  43  41  38 \n 37  37  37  36  35  35  35  36  39  40  41  40  37  40  36  33 \n 31  30  31  33  35  35  31  31  32  31  28  29  28  28  28  26 \n 27  27  27  25  24  26  26  26  24  23  24  23  23  24  24  26 \n 26  25  24  25  25  26  26  25  25  26  24  24  25  27  27  27 \n 28  28  27  29  31  31  31  31  29  30  29  27  27  26  24  25 \n 26  26  28  26  26  27  27  26  26  26  27  26  27  28  28  28 \n 29  31  32  31  31  31  35  40  42  41  41  41  41  41  43  43 \n 42  42  42  43  41  40  40  39  37  34  32  32  28  22  17  14 \n 15  13  14  13  15  15  16  24  30  37  50 125 167 139 130 130 \n135 133 130 127 123 129 129 131 130 124 122 124 119 121 122 121 \n123 121 125 124 123 119 122 122 123 121 122 122 133 136 126 127 \n127 126 127 123 121 118 124 126 124 122 124 129 126 126 128 128 \n127 124 122 119 119 125 120 117 122 127 136 163 193 198 212 224 \n241 238 227 107  51  39  28  26  23  24  28  30  28  23  19  18 \n 17  17  18  20  20  23  23  26  29  30  32  34  35  35  38  40 \n 40  37  37  38  36  35  34  33  33  34  34  34  35  34  34  34 \n 35  36  38  40  42  41  40  40  41  41  41  41  41  39  41  40 \n 36  35  37  35  37  36  35  36  38  40  42  44  46  47  45  42 \n 46  45  45  46  48  48  49  49  47  48  46  45  46  45  46  47 \n 46  45  46  46  45  44  45  45  46  45  42  41  41  40  40  40 \n 41  42  42  40  39  37  35  35  34  34  35  37  35  36  35  34 \n 36  34  33  32  32  33  32  31  30  30  31  31  32  33  31  32 \n 34  33  35  35  37  37  34  34  33  34  33  30  29  29  30  29 \n 30  30  34  35  35  34  34  33  32  32  34  33  33  34  34  34 \n 35  33  34  33  34  34  34  35  33  33  31  31  32  30  27  23 \n 19  17  17  17  16  17  26  42  61  88 137 133 138 143 149 157 \n190 199 184 185 186 185 187 185 186 185 181 180 180 178 181 187 \n192 198 209 214 212 209 196 171 154 152 145 141 139 138 142 148 \n150 151 152 147 149 153 163 169 159  82  36  22  17  14  15  15 \n 16  15  17  23  24  18  16  18  23  33  37  36  36  35  35  37 \n 37  37  37  36  41  50  57  58  56  52  42  42  39  38  38  38 \n 35  36  39  42  45  45  45  45  45  44  42  43  42  42  42  40 \n 38  37  36  36  36  35  35  36  39  39  40  41  39  39  34  33 \n 32  31  32  31  33  34  33  34  31  29  30  29  27  27  28  28 \n 27  27  28  25  25  26  26  27  24  23  23  23  25  27  24  26 \n 25  25  24  25  25  26  26  26  26  25  25  23  25  27  27  27 \n 28  28  28  29  31  32  31  31  29  29  28  28  25  25  25  26 \n 26  27  27  25  27  28  27  26  27  27  27  25  27  28  27  28 \n 28  31  30  32  33  33  35  38  40  40  41  41  41  41  43  43 \n 42  40  40  41  40  41  40  40  38  35  34  31  28  22  19  16 \n 16  15  14  13  14  13  14  21  28  35  44  99 166 147 127 129 \n130 129 131 127 126 127 131 129 129 127 126 125 124 126 123 125 \n123 120 123 124 123 123 125 125 128 129 127 126 132 138 130 129 \n129 129 131 125 121 122 125 128 128 123 122 125 124 121 122 121 \n125 128 124 120 120 121 118 120 130 134 171 224 239 236 242 239 \n238 237 219  93  49  36  26  25  23  24  28  31  28  22  19  19 \n 17  18  18  19  21  22  24  28  31  31  32  34  35  36  37  38 \n 40  40  38  36  36  35  33  33  33  33  33  33  36  36  35  35 \n 37  37  39  41  41  42  42  42  42  41  41  41  40  39  41  41 \n 36  34  36  34  35  36  37  38  39  38  42  43  45  47  47  46 \n 44  45  46  45  47  48  49  49  47  47  47  48  46  47  47  46 \n 46  45  48  46  44  46  47  46  46  46  44  43  43  42  40  40 \n 42  42  40  39  38  37  35  36  36  34  35  37  37  37  37  37 \n 37  36  34  33  33  34  32  32  32  32  34  32  31  33  33  35 \n 33  34  35  35  37  37  37  37  36  36  33  32  32  32  32  33 \n 32  32  35  34  36  35  38  36  34  34  36  35  35  36  34  35 \n 36  35  34  33  33  34  32  33  32  33  31  31  30  30  29  24 \n 19  16  16  16  16  17  19  32  50  71 124 134 138 142 143 147 \n165 187 200 190 187 185 185 181 183 182 179 180 185 192 195 200 \n208 210 208 201 190 183 165 143 142 145 142 142 143 144 149 152 \n154 150 151 151 154 165 155 159 166  82  36  23  18  17  18  18 \n 18  16  17  24  26  19  17  19  25  32  37  36  38  39  37  37 \n 39  38  40  38  42  51  58  57  53  50  43  40  39  39  39  38 \n 35  37  42  44  45  46  45  45  45  43  43  43  42  41  41  40 \n 41  39  36  36  35  36  37  38  40  40  41  41  40  38  37  36 \n 33  32  30  32  33  32  31  32  31  28  30  28  29  29  25  26 \n 26  25  27  25  26  27  25  25  24  25  24  24  25  26  24  25 \n 25  25  25  25  26  26  25  25  25  24  26  25  25  28  26  27 \n 28  28  29  31  31  32  30  31  31  30  30  28  26  28  29  28 \n 27  27  26  25  25  27  27  26  27  26  26  26  28  28  28  28 \n 29  29  31  30  33  34  35  38  40  39  40  43  43  43  42  44 \n 43  40  41  42  42  41  40  39  38  37  36  34  29  24  19  15 \n 15  14  14  14  13  12  16  20  28  31  41  69 156 160 132 142 \n136 130 129 123 119 118 124 123 129 128 126 127 130 128 126 125 \n126 125 123 123 125 127 126 126 133 133 129 128 123 130 137 132 \n131 132 130 127 126 125 121 121 125 124 120 119 122 121 123 123 \n125 127 125 121 118 115 116 117 119 125 206 234 246 246 242 238 \n238 236 187  75  47  35  27  25  24  25  29  29  24  21  20  18 \n 17  17  18  20  21  21  24  27  29  31  34  33  35  37  38  39 \n 40  39  38  37  35  34  34  33  33  35  34  33  35  37  35  35 \n 36  37  39  41  42  43  43  41  42  42  41  40  39  41  41  41 \n 37  36  35  35  36  37  37  38  39  39  42  42  45  46  47  48 \n 45  45  46  46  45  47  47  47  46  48  48  46  46  47  46  47 \n 50  47  46  44  44  44  45  44  46  44  44  43  43  43  40  41 \n 41  43  41  39  38  37  36  38  37  37  37  36  38  38  38  37 \n 39  36  36  34  34  35  33  32  32  32  32  33  31  32  33  36 \n 36  36  36  36  36  37  37  37  38  37  34  35  34  35  35  37 \n 34  35  36  37  36  38  39  37  37  37  37  36  35  35  35  36 \n 32  33  33  34  33  33  33  33  33  33  33  31  30  29  28  25 \n 19  17  18  17  16  16  18  28  46  66 102 132 136 139 138 141 \n156 165 197 208 190 184 183 183 181 180 187 195 199 200 206 211 \n210 205 193 183 166 161 150 135 139 142 142 142 141 145 152 155 \n157 151 154 155 169 163 162 162 161  80  36  24  20  19  18  19 \n 20  18  20  27  29  21  17  19  24  36  40  34  38  38  38  39 \n 39  39  38  39  42  53  59  57  54  49  42  38  38  39  39  37 \n 36  37  41  45  45  45  44  44  45  44  44  43  42  42  43  42 \n 39  38  37  36  36  34  36  38  41  43  40  39  39  39  37  36 \n 33  32  29  30  32  32  32  32  30  29  29  29  30  27  25  27 \n 28  27  26  27  25  27  26  26  24  24  24  24  25  24  24  24 \n 25  25  25  25  26  25  25  26  25  24  24  24  23  25  26  27 \n 27  28  28  30  30  30  31  32  32  30  29  28  29  31  31  29 \n 26  25  25  26  25  25  26  26  26  25  25  27  28  29  28  29 \n 29  30  31  32  34  35  37  40  41  40  40  41  43  42  43  44 \n 43  40  40  42  40  41  41  41  38  36  36  34  31  27  19  18 \n 15  15  14  14  14  13  14  18  24  28  39  52 144 168 163 160 \n155 151 157 155 152 146 140 134 136 136 135 135 129 129 130 130 \n130 127 128 127 129 130 125 130 133 133 133 137 131 134 130 122 \n121 124 131 128 123 127 127 124 126 127 121 124 125 126 122 126 \n125 121 120 119 123 121 121 116 120 154 234 238 241 248 245 242 \n238 242 161  65  44  33  27  26  23  26  30  30  24  20  18  18 \n 17  17  18  20  22  22  25  27  30  32  34  34  35  35  38  41 \n 42  41  38  36  35  34  34  34  33  35  34  34  34  34  35  35 \n 36  37  39  42  42  44  45  43  43  42  40  41  40  40  41  40 \n 36  36  35  36  36  36  37  38  40  40  42  43  46  48  46  47 \n 46  46  47  47  46  46  47  47  45  46  46  47  46  45  46  46 \n 48  46  45  46  45  43  46  44  44  44  44  45  43  42  43  41 \n 41  43  40  41  38  39  40  39  38  38  38  38  40  40  39  40 \n 40  36  35  36  35  34  32  32  32  32  32  33  32  31  31  34 \n 37  35  36  35  35  35  36  35  36  36  34  36  38  38  40  41 \n 40  40  37  37  35  37  37  37  37  37  37  37  35  36  36  37 \n 35  34  35  36  34  33  34  33  32  33  31  29  29  29  28  26 \n 20  16  17  16  16  18  18  22  38  54  79 126 136 136 133 138 \n145 152 165 185 210 207 203 204 213 212 205 204 205 208 205 203 \n195 184 167 156 151 151 139 130 140 142 140 142 141 147 155 157 \n159 155 156 163 160 158 159 159 164  82  33  23  21  21  21  22 \n 23  22  25  31  37  26  20  20  25  36  41  36  39  39  40  39 \n 38  37  38  41  42  51  58  58  55  48  43  39  38  37  37  37 \n 36  38  43  46  46  47  45  46  46  44  43  44  43  42  43  43 \n 41  38  38  37  36  35  37  38  40  42  41  40  41  40  37  35 \n 33  32  30  29  31  31  31  29  30  29  27  28  28  28  27  26 \n 25  27  27  27  27  28  27  27  24  24  25  25  24  23  24  24 \n 25  26  27  25  25  25  25  25  25  24  24  25  24  24  26  28 \n 27  27  27  28  29  30  32  32  32  32  29  27  30  32  31  28 \n 26  25  24  26  27  26  27  26  27  27  25  27  28  28  27  28 \n 28  29  30  31  33  34  36  39  39  39  41  41  41  42  43  42 \n 43  41  41  40  41  41  40  40  38  36  36  34  31  28  20  17 \n 15  14  14  13  13  13  13  15  23  27  37  45 115 163 186 180 \n180 178 179 176 176 174 170 166 166 164 159 157 158 154 152 150 \n149 152 146 143 145 141 142 146 147 151 148 149 154 148 134 130 \n127 125 128 133 127 128 134 129 126 124 121 120 123 130 130 125 \n121 125 124 122 122 120 121 117 137 206 246 243 241 243 243 241 \n244 243 127  58  42  32  27  25  24  27  30  28  24  21  17  16 \n 16  18  19  20  21  23  27  29  31  32  32  35  37  36  41  44 \n 46  45  37  38  34  35  36  36  34  35  34  35  34  34  36  37 \n 37  38  39  42  42  43  44  43  42  42  40  41  40  38  40  40 \n 35  34  35  35  35  35  38  40  39  39  43  43  47  50  48  48 \n 47  46  47  46  46  47  46  47  47  46  47  47  45  45  47  45 \n 46  46  44  45  46  45  47  45  44  45  43  43  44  43  43  40 \n 41  43  40  40  39  40  40  39  37  37  38  39  40  42  41  40 \n 40  38  37  37  37  35  35  35  34  35  32  32  33  33  31  33 \n 35  37  35  35  37  36  37  36  37  38  36  35  38  39  40  41 \n 42  43  40  38  37  37  37  37  39  39  38  36  36  38  35  36 \n 38  36  36  36  36  36  35  33  32  32  31  29  30  30  29  30 \n 24  19  17  16  16  18  18  19  31  47  68 107 137 134 132 136 \n141 146 151 163 181 199 210 216 219 219 210 200 201 199 195 187 \n176 167 147 151 154 150 137 132 139 142 139 141 142 151 156 159 \n167 164 156 160 158 161 163 163 168  83  38  25  24  24  24  26 \n 26  27  33  40  52  38  27  27  29  37  42  38  38  44  43  39 \n 36  38  39  41  41  52  60  58  55  48  42  39  38  38  37  38 \n 37  40  44  47  48  47  45  45  45  45  45  45  43  43  43  44 \n 41  39  38  38  38  38  37  38  40  41  42  42  40  39  36  34 \n 33  32  30  30  31  32  30  28  30  29  28  28  28  28  29  27 \n 26  26  27  27  26  26  26  29  24  24  25  24  24  23  25  24 \n 26  26  26  26  26  27  25  25  25  24  24  24  24  25  26  27 \n 27  26  27  28  29  30  31  32  32  30  30  29  28  29  30  29 \n 26  25  25  26  26  26  26  26  27  26  26  25  26  27  27  28 \n 29  29  29  29  32  34  36  39  40  40  41  41  41  41  41  41 \n 43  42  42  42  41  41  41  42  40  40  37  34  32  29  21  17 \n 15  15  15  14  14  13  12  14  20  24  34  42  88 158 188 185 \n185 184 182 181 180 179 178 176 174 173 171 169 167 166 163 159 \n156 151 148 143 140 139 142 139 135 139 144 144 150 152 160 156 \n146 136 136 138 132 129 124 126 129 128 124 121 121 127 130 125 \n124 128 128 126 121 120 121 116 174 229 247 246 236 240 237 239 \n243 235  94  56  40  30  26  24  25  28  30  26  22  20  18  18 \n 16  17  19  20  20  22  26  29  29  30  32  35  36  37  45  47 \n 45  43  38  37  35  35  37  36  34  33  33  35  33  35  35  36 \n 38  38  40  41  41  41  42  41  41  43  42  41  41  39  40  39 \n 34  34  35  35  34  35  36  36  37  38  40  43  46  48  49  48 \n 47  46  46  46  47  47  44  46  45  45  46  47  46  44  44  45 \n 45  45  45  45  44  46  43  43  45  46  45  44  43  42  42  42 \n 42  43  41  40  38  38  39  39  36  37  40  41  40  40  39  42 \n 41  40  40  40  38  37  36  35  35  36  34  36  35  33  33  33 \n 34  36  34  35  36  37  37  36  36  37  38  37  39  39  38  38 \n 41  39  41  40  37  36  37  36  37  38  38  38  37  36  36  37 \n 38  37  38  38  36  33  32  31  31  30  30  31  32  32  30  30 \n 24  20  18  16  16  16  18  19  24  38  59  81 134 133 133 135 \n135 140 142 149 165 171 181 190 195 199 197 193 191 192 172 160 \n156 170 138 146 144 146 137 135 141 141 141 141 146 157 158 158 \n177 168 155 158 159 158 165 168 166  83  38  28  27  29  29  33 \n 34  38  45  51  77  64  44  36  33  41  41  40  36  48  46  42 \n 40  37  39  40  42  52  56  58  54  44  40  38  37  37  38  39 \n 37  42  45  46  48  47  45  45  46  43  43  42  43  42  41  43 \n 39  39  40  39  38  37  39  41  40  41  40  40  40  38  36  33 \n 34  32  31  32  31  31  29  29  30  29  28  29  28  27  29  28 \n 27  27  28  26  25  25  25  27  26  25  26  24  23  24  26  26 \n 26  25  24  25  25  26  24  25  26  24  25  24  27  28  27  27 \n 26  28  27  25  28  30  31  30  32  32  30  30  28  27  27  28 \n 25  25  26  26  26  27  28  26  27  27  26  25  26  27  26  29 \n 29  30  32  31  31  32  36  40  41  42  41  42  42  42  42  42 \n 41  41  41  41  41  41  41  41  40  40  37  36  33  30  24  19 \n 15  15  16  14  14  14  14  15  20  25  32  42  65 144 177 188 \n185 183 184 184 183 180 179 178 177 176 172 172 169 168 164 162 \n157 155 148 140 137 134 128 123 125 130 141 147 147 155 167 171 \n167 150 132 135 135 131 124 130 137 138 125 122 130 131 126 125 \n120 124 127 122 121 125 131 166 230 235 245 243 241 241 247 245 \n241 220  71  53  36  30  25  23  25  28  30  24  22  20  18  18 \n 18  18  20  21  22  24  27  29  32  32  33  34  35  37  44  46 \n 45  43  38  36  36  35  35  36  35  34  33  34  34  35  36  37 \n 40  39  39  41  41  40  41  42  41  41  42  42  42  39  39  39 \n 34  35  36  35  34  34  36  38  38  39  40  44  46  47  48  49 \n 47  47  45  47  47  45  43  46  46  44  45  46  45  45  44  44 \n 45  45  46  46  45  47  43  44  45  45  45  44  45  45  43  42 \n 43  43  41  40  36  38  40  40  40  40  39  41  42  40  40  40 \n 40  40  40  40  39  38  36  35  36  37  36  37  35  33  34  36 \n 35  37  36  36  35  36  37  38  38  37  39  35  37  37  35  35 \n 37  37  39  40  37  37  38  36  36  37  40  39  37  38  37  38 \n 36  35  37  37  35  31  30  31  31  30  32  32  33  31  31  30 \n 25  22  20  17  17  16  17  19  21  34  50  66 124 135 132 134 \n133 134 140 143 153 158 164 172 175 181 184 181 180 185 171 151 \n154 164 146 144 143 146 139 138 142 141 142 145 153 161 162 164 \n170 162 154 159 159 160 162 168 159  81  40  28  31  31  33  37 \n 43  49  63  78  80  88  59  49  36  42  42  39  38  49  46  41 \n 41  39  39  39  42  53  56  57  52  44  39  38  37  34  35  37 \n 38  42  45  46  47  48  46  45  44  43  43  43  45  42  42  41 \n 41  38  38  39  39  40  40  42  42  41  41  43  41  39  37  34 \n 33  31  32  32  30  30  29  29  30  30  28  29  29  27  28  28 \n 26  26  28  27  26  27  25  26  27  27  26  25  25  26  26  25 \n 26  25  25  26  26  26  25  24  25  25  24  24  26  27  27  27 \n 25  27  28  26  27  29  29  31  33  32  30  30  28  29  28  27 \n 26  25  27  26  27  28  27  27  26  25  27  26  28  28  28  30 \n 29  29  31  31  32  32  36  38  40  42  41  40  41  43  42  42 \n 43  42  41  41  42  43  40  40  41  41  39  36  34  32  26  21 \n 16  15  15  14  13  12  13  13  17  24  30  38  53 127 168 191 \n183 183 183 183 183 181 178 179 177 175 173 172 169 167 163 160 \n157 159 155 140 139 138 130 124 123 129 144 151 157 161 170 173 \n165 161 141 136 134 132 126 127 130 129 129 127 130 132 127 123 \n120 119 133 129 123 124 159 216 231 232 244 243 240 240 240 242 \n241 199  64  51  35  28  23  24  27  29  28  24  20  19  17  16 \n 18  18  19  20  21  24  28  30  32  33  33  33  35  39  45  46 \n 44  43  38  36  36  35  33  35  35  34  32  33  35  36  36  38 \n 41  41  41  41  40  41  41  42  43  41  41  42  41  38  40  39 \n 36  36  35  35  34  34  35  37  37  38  41  45  47  50  47  49 \n 49  48  46  47  47  46  45  45  44  43  44  44  43  47  46  46 \n 44  43  44  46  46  46  45  45  45  45  42  42  41  42  41  39 \n 41  42  41  41  40  39  39  40  41  41  41  43  43  42  41  39 \n 41  39  39  39  39  40  38  37  38  36  36  35  34  34  34  35 \n 35  37  38  37  36  36  37  40  38  39  39  37  36  35  35  34 \n 34  33  35  35  34  34  32  34  36  36  37  38  37  37  38  35 \n 35  35  34  35  33  32  34  30  32  31  33  34  33  33  32  29 \n 25  23  19  19  20  18  19  21  23  29  45  59  99 135 131 130 \n132 129 134 139 143 149 154 157 165 162 171 170 167 166 164 155 \n157 170 151 144 144 147 142 139 141 141 147 150 161 164 153 132 \n152 167 160 157 159 166 161 160 157  81  40  31  36  36  40  48 \n 58  68  87 111  85  88  70  57  45  47  44  40  41  45  46  44 \n 40  41  39  40  44  53  56  56  52  41  38  38  36  35  35  36 \n 37  42  44  46  47  46  45  46  47  44  43  43  42  43  43  43 \n 41  39  40  39  38  38  40  41  41  41  42  41  40  40  39  35 \n 34  32  31  31  31  31  29  29  30  31  29  28  28  28  26  26 \n 26  25  28  28  24  26  25  26  26  25  26  25  26  26  26  25 \n 26  27  26  26  23  24  25  23  27  26  25  24  24  26  27  27 \n 27  29  28  28  29  30  31  31  32  31  30  29  29  27  26  27 \n 27  26  26  26  26  26  26  26  27  26  26  27  25  26  29  30 \n 31  30  29  31  32  34  36  38  39  40  42  43  39  41  43  43 \n 43  41  40  40  42  40  40  40  40  37  39  38  36  32  25  21 \n 16  15  13  13  12  11  13  14  14  17  26  34  43 103 157 188 \n183 184 185 184 181 180 178 176 176 174 173 170 168 162 157 154 \n152 149 142 134 131 127 124 123 125 132 143 152 159 166 176 182 \n162 164 151 127 129 131 130 131 135 136 130 127 130 130 126 124 \n121 123 132 133 131 166 225 241 245 244 242 239 237 239 238 238 \n242 161  63  48  33  28  26  26  28  28  28  24  21  19  17  18 \n 18  18  19  20  22  24  28  31  31  32  34  35  38  38  42  44 \n 45  43  39  37  34  34  35  35  34  33  33  35  34  33  37  38 \n 42  43  42  41  41  41  42  42  43  42  40  40  40  39  38  38 \n 38  38  35  36  35  34  36  37  38  39  43  46  49  51  49  50 \n 47  48  47  48  48  45  46  43  42  44  43  43  43  43  44  45 \n 44  44  43  42  44  43  45  44  46  43  43  42  40  41  41  41 \n 41  41  37  38  41  38  37  38  39  38  38  39  41  40  40  39 \n 41  38  39  39  41  41  39  38  38  36  36  36  36  37  35  37 \n 35  36  37  36  38  38  37  38  39  39  39  37  36  35  36  34 \n 33  33  33  33  33  32  31  33  35  34  36  36  36  36  37  35 \n 36  36  36  33  33  33  33  33  33  33  33  33  32  31  28  29 \n 25  24  20  20  19  19  20  23  24  27  39  51  77 128 133 130 \n131 130 133 136 139 147 146 154 156 157 154 162 162 157 160 152 \n159 167 147 147 146 148 140 138 143 144 151 155 166 160 128 116 \n170 166 165 163 168 165 160 161 161  83  38  33  42  41  51  63 \n 75  89 106 122 116  86  78  68  51  50  49  43  42  43  45  44 \n 41  42  40  39  46  54  57  54  48  38  36  36  37  35  32  34 \n 36  41  46  46  47  45  44  45  46  44  45  44  42  42  44  44 \n 42  40  42  41  38  39  39  40  41  43  43  42  41  41  40  37 \n 34  33  31  31  32  31  30  30  28  28  27  26  27  27  27  27 \n 26  26  26  27  24  26  26  27  27  26  26  25  27  26  26  26 \n 26  27  26  26  25  24  25  24  26  26  25  25  26  28  28  27 \n 26  27  27  28  28  29  32  32  32  31  30  29  29  28  27  26 \n 26  27  26  25  28  26  26  27  27  26  26  27  27  27  28  29 \n 29  29  28  31  33  33  35  36  39  41  41  42  41  42  44  44 \n 44  43  43  42  43  41  41  40  40  39  38  36  35  33  27  22 \n 17  16  15  14  12  13  13  13  13  16  25  34  39  79 154 178 \n187 185 185 183 180 178 178 177 174 172 172 168 164 159 155 152 \n144 140 135 131 122 123 123 124 128 133 147 157 167 176 179 172 \n163 162 164 135 129 137 137 138 140 130 129 131 136 132 122 124 \n125 127 138 141 184 229 244 245 247 246 235 233 245 243 239 240 \n238 130  62  44  30  28  26  26  29  30  28  23  20  18  17  17 \n 18  17  19  21  23  25  29  32  32  33  34  35  36  39  40  43 \n 45  42  36  36  36  36  35  35  34  34  35  37  34  35  37  38 \n 41  42  42  42  41  41  42  43  43  42  40  40  40  39  39  39 \n 40  38  36  37  36  36  37  38  39  39  44  47  50  51  53  51 \n 49  48  49  46  46  46  44  44  43  41  41  41  41  42  43  41 \n 42  42  41  41  41  41  42  43  43  42  43  42  42  42  41  40 \n 40  37  39  37  41  38  40  40  37  36  37  38  39  39  40  39 \n 40  40  41  40  42  42  40  39  39  39  39  38  38  39  37  36 \n 37  37  38  38  38  39  38  39  39  40  40  37  36  36  36  35 \n 34  34  33  34  35  35  33  34  36  36  35  35  35  36  36  36 \n 36  36  34  34  34  33  34  34  33  33  33  33  33  31  29  29 \n 27  26  25  24  23  22  21  22  26  27  37  43  64 104 138 134 \n132 129 129 135 139 147 140 161 144 140 141 143 152 154 155 151 \n158 160 150 146 151 148 140 139 144 148 155 163 180 155 110 201 \n240 186 168 168 170 170 171 169 165  84  41  36  48  48  67  81 \n 99 113 125 130 137 140 125 106  71  50  50  44  42  44  46  44 \n 42  40  39  42  47  53  56  54  45  38  36  36  36  35  34  34 \n 37  41  44  46  46  46  46  47  46  45  43  45  44  44  43  42 \n 41  40  40  38  38  39  40  41  43  44  44  44  40  39  39  37 \n 35  33  32  31  31  31  31  31  30  30  28  28  28  27  27  27 \n 27  27  26  24  25  26  27  27  26  25  26  25  25  24  25  24 \n 24  27  25  24  26  26  26  25  24  24  25  25  26  26  27  27 \n 26  26  27  28  27  30  32  32  31  33  31  29  29  28  28  28 \n 26  25  26  25  26  27  26  27  27  26  27  27  27  28  28  29 \n 29  29  29  30  33  33  35  37  38  40  42  42  42  41  45  44 \n 44  43  42  42  42  41  40  39  39  40  40  40  36  33  28  21 \n 18  16  15  14  13  13  13  13  13  13  20  28  40  53 147 166 \n188 184 183 179 177 179 177 175 172 170 166 164 159 157 152 146 \n140 135 131 126 123 127 128 131 133 142 156 167 183 186 175 167 \n160 161 166 153 144 144 146 143 136 137 145 148 144 138 130 128 \n126 137 164 209 239 241 245 247 245 237 230 230 239 244 240 238 \n221 104  57  40  29  27  26  26  31  31  28  22  18  17  16  15 \n 17  17  19  20  22  24  28  31  31  33  33  34  38  41  42  43 \n 42  41  38  35  35  36  35  34  34  35  36  35  33  35  38  39 \n 40  42  44  43  43  42  43  43  43  42  41  39  39  40  39  39 \n 44  41  39  36  37  37  37  37  39  41  44  46  50  51  51  49 \n 47  46  48  46  46  46  44  44  43  41  40  40  40  41  41  40 \n 40  39  38  38  37  38  37  38  37  39  40  41  42  41  41  41 \n 40  39  39  39  41  38  39  41  39  38  37  37  37  38  39  39 \n 41  40  42  41  43  41  39  38  39  40  39  40  40  40  40  39 \n 41  40  41  40  41  39  39  39  38  39  40  40  37  37  34  34 \n 35  34  34  34  34  34  34  34  36  38  36  35  36  37  38  39 \n 38  38  34  34  36  35  34  33  34  32  34  34  32  32  30  30 \n 32  33  34  30  27  27  28  27  29  32  41  45  60  81 135 136 \n133 132 132 133 138 143 141 158 138 139 140 142 147 152 155 149 \n150 152 158 148 152 151 140 140 147 154 162 169 192 107 169 246 \n252 216 173 174 167 168 170 174 175  94  44  38  56  59  82  99 \n113 124 129 138 141 142 141 132  83  53  51  46  43  45  46  45 \n 44  41  40  42  47  53  55  55  45  39  37  37  37  34  34  34 \n 37  40  43  45  46  47  48  48  46  45  43  43  43  43  44  43 \n 41  41  38  39  39  40  41  41  43  45  44  43  41  39  39  37 \n 35  33  33  32  31  31  30  30  30  30  30  29  28  28  27  28 \n 28  28  27  25  28  27  26  27  25  24  25  23  23  23  25  25 \n 25  25  25  25  25  26  25  26  26  25  25  25  26  25  25  25 \n 28  27  27  27  27  29  31  31  31  33  31  29  30  29  27  28 \n 25  26  26  25  24  26  25  26  28  26  27  27  27  28  27  28 \n 29  29  31  29  33  33  34  37  39  39  42  42  40  41  43  44 \n 45  44  43  43  43  42  39  39  40  40  40  40  37  35  29  23 \n 18  16  15  15  14  13  13  13  13  15  19  24  36  40 128 159 \n184 184 180 179 177 179 176 174 170 166 164 161 156 152 148 145 \n142 135 127 123 124 130 138 139 141 151 166 178 187 182 165 158 \n157 159 162 156 144 139 139 137 137 141 148 151 144 136 137 133 \n137 173 220 238 237 239 243 243 242 238 237 238 245 247 244 242 \n205  91  52  39  32  29  27  28  31  30  25  20  17  17  16  16 \n 18  19  18  19  23  26  28  30  31  32  34  34  38  41  43  43 \n 44  39  37  36  36  36  35  34  33  34  36  35  34  35  36  38 \n 40  43  43  43  43  43  43  41  40  41  41  40  42  41  42  41 \n 48  44  40  39  38  38  38  39  39  41  45  47  50  53  52  47 \n 47  49  48  47  46  45  43  44  42  40  39  41  39  40  38  38 \n 39  36  34  32  34  34  32  33  36  35  33  35  37  38  39  38 \n 40  40  39  41  41  39  38  39  41  39  38  37  35  35  35  37 \n 38  40  42  40  41  41  41  42  42  43  42  42  41  41  42  42 \n 41  41  43  43  43  43  42  42  40  40  39  42  40  38  36  35 \n 34  33  34  34  34  35  35  35  34  35  36  35  36  38  38  39 \n 38  37  37  36  39  39  34  34  35  36  35  36  33  34  33  36 \n 40  44  43  43  44  44  43  43  41  44  58  56  54  69 113 142 \n134 132 131 133 135 140 141 153 143 140 145 144 144 149 153 151 \n149 156 161 150 152 151 143 145 155 163 168 146  76 102 226 253 \n254 246 194 184 176 175 177 171 164  94  44  43  68  76 101 116 \n128 130 139 140 143 141 140 136  99  53  53  45  45  49  50  48 \n 46  43  39  39  48  53  55  53  42  37  35  34  36  37  35  34 \n 37  40  43  44  46  49  47  47  45  46  44  43  42  43  44  42 \n 39  39  38  38  39  40  41  42  44  45  43  43  42  41  37  36 \n 35  34  33  34  33  33  32  30  29  28  29  31  29  28  28  28 \n 29  28  26  26  29  29  27  26  25  24  24  25  26  25  25  24 \n 25  25  25  27  26  25  24  25  26  27  26  24  24  26  25  25 \n 27  27  26  27  29  31  31  33  33  32  31  29  28  27  27  26 \n 24  25  26  24  25  24  23  25  26  26  27  27  27  27  29  31 \n 30  28  28  28  34  34  34  37  39  37  39  41  40  40  43  44 \n 45  44  44  44  44  44  42  41  39  39  40  41  39  36  31  26 \n 19  16  15  15  13  13  12  14  13  14  17  20  33  40  92 152 \n174 183 179 178 176 175 173 171 165 164 161 158 152 147 141 142 \n139 130 122 122 127 133 138 146 155 164 180 188 187 174 155 152 \n157 160 160 156 141 141 136 137 133 141 150 147 148 145 150 169 \n207 230 244 244 239 239 242 240 244 240 240 231 239 245 243 245 \n184  76  49  38  31  27  25  28  32  29  23  19  18  17  16  16 \n 19  19  21  21  24  26  28  29  31  32  33  33  35  40  41  44 \n 41  39  38  38  34  35  34  34  36  36  36  35  35  37  37  38 \n 41  41  41  40  42  42  42  41  40  41  41  40  40  41  40  39 \n 58  51  43  41  40  38  41  41  42  43  43  48  52  55  53  50 \n 53  51  50  47  47  46  44  42  42  39  37  37  38  39  38  36 \n 35  34  32  32  33  33  32  32  33  33  32  32  33  34  35  37 \n 39  39  41  40  41  40  40  39  40  39  37  37  35  36  34  36 \n 36  37  39  40  39  42  42  42  43  44  42  41  40  41  42  42 \n 43  43  43  45  45  45  44  44  41  43  43  42  42  40  37  35 \n 35  35  34  34  33  31  32  33  31  32  33  34  35  36  36  37 \n 37  35  37  39  40  36  34  36  39  38  36  35  33  37  38  41 \n 44  48  49  51  56  57  57  52  51  59  67  57  48  62  88 139 \n136 132 129 133 135 138 146 152 147 141 141 144 143 144 152 157 \n155 157 158 150 153 153 148 152 164 171 159  86  77 150 231 251 \n254 253 228 218 213 200 198 199 193 110  46  47  83  95 118 127 \n132 134 141 143 142 142 138 134 109  56  52  46  47  53  56  54 \n 47  44  42  41  48  55  55  52  43  40  36  34  35  36  36  34 \n 39  38  42  44  46  48  47  45  44  45  45  44  43  44  44  43 \n 40  39  39  39  39  40  42  42  43  43  42  42  42  42  37  37 \n 36  34  33  33  32  32  32  30  29  29  27  27  28  28  28  28 \n 29  27  26  26  27  28  25  27  26  25  26  27  24  25  26  26 \n 26  26  24  24  25  24  25  24  26  26  25  26  25  26  26  26 \n 26  27  27  28  30  29  30  32  31  32  32  29  28  29  28  28 \n 27  26  29  27  26  25  24  27  26  26  26  27  28  27  28  30 \n 29  29  28  30  33  34  33  36  37  38  39  40  41  43  44  44 \n 44  44  43  43  42  44  43  42  41  40  41  40  40  37  32  28 \n 19  17  16  16  14  13  11  14  12  13  15  19  29  38  74 145 \n167 182 179 178 176 174 170 171 167 166 159 153 148 145 138 133 \n129 124 121 124 130 133 140 158 166 176 187 188 178 168 151 154 \n158 159 156 157 142 142 146 147 151 148 145 140 152 173 203 229 \n237 242 250 244 243 242 244 239 241 248 242 237 237 244 243 246 \n157  68  48  35  28  27  27  30  31  29  22  20  18  17  15  18 \n 19  20  20  22  23  28  29  31  31  32  34  34  38  42  43  44 \n 41  38  37  36  35  34  35  34  36  36  36  35  36  38  38  40 \n 41  41  42  40  40  41  42  40  41  41  42  42  42  41  40  40 \n 78  63  51  47  45  42  44  45  45  45  48  51  56  58  57  54 \n 54  52  52  50  46  44  43  39  40  38  36  34  34  34  36  34 \n 32  31  31  32  31  32  31  32  32  30  31  32  31  31  31  35 \n 35  35  37  37  39  39  40  39  39  39  39  37  34  33  34  34 \n 35  34  37  39  38  38  41  40  41  43  44  43  41  42  43  43 \n 43  45  46  47  47  47  45  46  44  45  45  42  42  42  40  37 \n 36  32  31  31  32  31  30  31  29  30  30  31  31  33  32  33 \n 33  33  34  36  36  33  33  35  36  34  33  33  33  36  39  39 \n 43  45  51  57  62  63  56  55  64  69  61  53  49  52  72 117 \n143 135 131 132 137 140 142 152 147 142 141 144 140 142 146 155 \n170 171 156 150 153 152 154 161 170 216 201  93 101 184 224 249 \n254 254 252 252 248 246 247 247 248 150  48  54 104 116 125 132 \n134 135 139 143 139 138 135 134 120  59  51  51  52  68  66  58 \n 49  44  41  40  49  55  54  51  42  37  37  37  35  35  36  36 \n 36  39  41  42  44  46  45  45  43  43  44  47  45  44  42  42 \n 41  39  38  38  39  41  43  43  43  43  41  42  41  41  39  38 \n 34  34  33  32  32  30  29  31  30  29  30  29  28  28  28  29 \n 28  27  26  26  26  27  26  27  26  27  27  26  25  25  25  25 \n 26  26  25  24  23  23  25  25  27  26  25  25  26  27  27  27 \n 26  28  28  28  29  28  30  33  29  31  33  30  30  29  26  29 \n 33  31  31  29  25  26  26  25  27  28  29  28  27  29  29  28 \n 29  30  30  31  33  33  33  35  37  39  39  40  41  40  42  44 \n 44  43  44  43  42  44  42  40  42  41  40  38  38  35  32  27 \n 22  18  16  16  14  14  13  12  13  14  14  18  27  40  53 126 \n158 177 177 177 176 176 172 168 162 158 155 150 144 139 133 130 \n121 121 124 129 133 136 149 166 176 184 193 184 168 159 154 155 \n159 158 154 160 139 142 141 145 155 154 158 190 222 238 245 242 \n241 248 248 245 242 248 238 241 245 246 245 243 242 242 244 248 \n119  65  44  33  28  25  27  29  29  28  20  19  18  17  18  18 \n 19  20  22  23  26  28  32  31  30  32  35  35  37  42  43  44 \n 40  37  35  36  35  33  35  35  36  35  36  38  37  37  39  41 \n 39  41  43  42  39  38  40  40  42  41  41  44  42  40  41  41 \n 98  83  67  56  50  48  47  47  46  45  49  54  59  59  59  58 \n 56  55  55  50  45  43  41  38  39  38  36  34  32  33  32  32 \n 32  31  32  32  30  33  30  30  31  30  30  30  30  29  30  31 \n 32  32  35  35  37  37  38  41  40  38  39  36  36  35  35  34 \n 35  35  36  34  36  37  38  38  40  41  42  42  43  44  44  43 \n 43  44  46  45  47  48  47  47  47  46  46  42  41  39  38  37 \n 35  34  31  32  33  31  29  30  30  30  30  30  30  30  28  31 \n 33  31  33  32  31  32  32  33  33  31  30  31  33  35  35  35 \n 39  44  53  61  62  58  56  64  69  64  55  55  57  48  63  91 \n145 140 133 132 136 138 138 146 142 144 143 147 143 145 142 154 \n166 171 156 151 155 156 157 158 210 247 232 130 115 185 220 247 \n254 255 254 251 251 253 253 252 252 166  47  59 115 123 134 136 \n135 136 140 140 138 136 137 135 130  67  48  51  56  76  74  62 \n 52  47  45  44  50  56  55  52  41  36  36  36  35  35  35  34 \n 38  40  42  43  43  45  45  45  43  43  44  46  45  44  43  43 \n 43  41  38  38  38  41  43  41  42  42  40  41  40  40  40  38 \n 37  34  33  33  31  30  32  31  30  32  31  29  28  29  28  28 \n 28  27  27  26  26  27  26  26  26  26  25  24  24  25  25  26 \n 27  25  26  27  25  24  25  24  26  27  26  24  26  26  26  26 \n 27  28  28  29  29  28  30  34  32  31  31  31  30  30  28  30 \n 32  29  27  27  26  25  25  28  28  30  28  27  29  29  27  28 \n 28  28  30  31  31  31  33  35  37  37  38  40  40  42  44  45 \n 46  43  44  42  42  42  43  42  41  39  40  39  39  37  34  29 \n 22  18  17  16  16  14  14  13  13  12  15  18  25  36  45 110 \n154 174 177 178 178 176 171 165 163 158 154 148 142 136 131 127 \n122 124 129 133 137 142 159 170 184 196 188 174 158 155 156 158 \n155 156 158 160 149 155 149 158 184 197 215 232 233 237 239 239 \n243 248 247 242 244 249 243 239 242 243 245 241 240 240 245 234 \n 90  63  44  34  27  25  26  29  28  25  20  18  17  17  17  17 \n 20  21  24  23  25  30  30  30  34  33  34  34  39  42  41  41 \n 41  38  35  36  35  34  35  35  34  35  35  37  38  37  39  41 \n 39  42  43  42  39  39  40  40  42  41  41  42  42  41  41  39 \n126 106  88  75  63  56  55  52  52  54  56  55  56  57  58  58 \n 59  57  57  50  43  42  39  38  37  36  35  32  32  33  32  32 \n 32  33  31  31  30  31  30  30  31  31  29  29  30  31  29  31 \n 31  30  31  31  31  32  34  36  35  36  38  38  39  39  35  36 \n 34  35  34  31  33  33  35  36  37  37  38  40  42  43  43  43 \n 45  46  43  43  47  47  47  47  46  46  45  42  42  38  37  35 \n 33  31  31  32  32  32  31  31  31  29  28  29  28  28  29  30 \n 31  32  30  29  30  28  30  30  29  29  30  31  32  33  34  34 \n 39  43  57  61  58  56  65  68  62  55  59  66  67  50  52  67 \n121 144 134 135 138 137 140 142 144 143 144 151 147 144 147 152 \n168 157 155 152 165 163 165 197 252 252 247 185 121 170 210 239 \n255 254 254 251 250 245 246 252 252 165  49  64 127 129 135 136 \n134 136 139 138 135 134 139 141 136  82  41  52  61  76  78  68 \n 54  49  46  47  52  56  55  50  40  38  36  34  36  36  37  36 \n 37  39  41  41  43  44  45  44  43  43  45  45  44  43  42  44 \n 44  40  41  38  40  43  43  42  41  41  42  42  42  40  40  38 \n 37  35  34  31  33  31  29  31  32  32  31  30  30  29  28  29 \n 28  27  26  25  26  24  24  25  26  26  26  25  26  26  27  25 \n 24  25  25  27  24  23  24  25  26  26  26  26  28  28  26  26 \n 27  28  28  28  29  30  30  32  33  32  30  31  31  30  29  27 \n 27  27  26  25  26  25  27  27  29  28  27  27  28  25  27  28 \n 29  29  31  31  30  30  33  35  36  36  39  40  41  42  44  44 \n 45  43  43  41  41  43  44  42  41  39  40  39  39  38  35  29 \n 24  19  17  16  15  15  15  13  14  13  15  16  21  31  41  82 \n151 160 181 177 176 175 170 164 159 156 149 143 137 129 124 121 \n124 126 132 132 139 151 170 180 190 197 177 162 151 151 155 155 \n154 153 167 164 162 181 206 228 251 245 241 243 239 236 242 248 \n245 241 244 243 247 247 247 244 244 248 245 244 250 244 248 208 \n 73  59  42  31  27  24  28  30  30  24  18  18  17  16  15  17 \n 20  21  23  23  26  30  30  33  34  33  35  36  41  43  42  40 \n 40  37  35  35  34  35  33  33  33  34  35  37  38  39  40  40 \n 39  41  42  43  40  40  40  38  41  40  41  42  40  39  39  39 \n 96 109 111  99  76  65  62  58  59  64  69  65  62  59  53  53 \n 57  57  54  47  42  42  40  38  36  35  33  34  34  33  33  32 \n 33  32  31  31  31  32  32  32  32  32  30  29  30  29  29  31 \n 31  29  30  30  30  29  31  33  32  33  35  38  38  38  37  38 \n 34  35  33  34  33  32  33  34  34  33  36  39  40  42  43  44 \n 44  44  45  44  45  46  45  46  45  46  46  43  42  39  36  33 \n 32  31  29  28  29  31  29  29  29  27  26  27  26  27  29  29 \n 29  29  30  29  30  30  30  28  29  29  29  30  30  31  35  35 \n 39  44  55  56  60  66  67  60  56  59  68  73  51  46  50  60 \n 92 142 138 136 137 140 147 144 144 144 145 145 145 145 148 153 \n165 152 155 157 167 165 191 243 252 249 246 224 124 145 204 235 \n254 253 254 251 250 248 252 252 250 155  52  68 127 128 134 135 \n136 137 138 136 135 137 140 143 137 102  38  51  63  78  80  72 \n 58  51  48  49  54  56  53  47  39  39  37  37  36  35  35  36 \n 36  36  41  42  41  44  44  44  44  44  45  45  45  43  44  44 \n 45  44  41  41  42  42  42  43  40  41  41  42  42  41  41  38 \n 36  34  34  34  33  32  31  33  32  31  30  30  29  27  27  28 \n 27  27  27  27  26  24  24  26  26  25  26  27  26  25  26  25 \n 24  25  24  25  26  26  25  24  26  26  27  27  28  29  28  28 \n 27  27  28  29  29  30  31  31  31  32  33  32  30  30  30  29 \n 28  25  27  27  27  26  26  28  28  30  28  27  26  25  27  28 \n 29  30  31  31  31  32  32  33  33  35  37  41  43  42  44  46 \n 46  44  43  42  44  44  43  42  43  41  40  41  39  39  36  30 \n 24  19  17  16  13  13  14  13  13  12  14  15  18  27  39  58 \n148 153 180 174 174 173 167 162 158 152 144 139 132 126 123 124 \n126 129 133 135 146 160 177 186 193 184 168 155 150 153 153 154 \n156 153 175 196 221 237 241 244 247 244 246 243 239 240 246 248 \n243 238 247 243 243 249 241 247 244 245 242 248 252 249 246 188 \n 69  57  38  30  27  26  29  30  29  23  17  15  16  16  17  18 \n 20  21  21  23  27  29  31  33  32  34  34  35  41  43  43  39 \n 37  36  36  35  34  34  32  32  34  34  37  38  39  39  38  39 \n 39  39  41  41  40  39  40  39  41  40  41  41  41  40  40  40 \n 69  61  75  92  91  79  69  68  70  71  79  78  73  69  60  57 \n 56  54  47  45  42  40  39  38  38  38  35  34  33  34  32  35 \n 33  32  32  31  31  31  32  32  32  33  32  32  32  32  31  32 \n 33  31  29  29  30  30  29  30  30  30  33  35  35  38  38  38 \n 36  36  34  34  32  32  31  32  34  32  34  37  38  40  39  41 \n 44  44  43  45  45  46  44  46  44  44  44  43  42  39  37  35 \n 32  29  29  30  29  29  28  28  27  27  27  28  26  26  27  28 \n 27  28  28  27  29  29  29  27  28  27  29  29  30  32  33  34 \n 41  48  54  60  67  66  59  60  61  68  72  56  46  52  60  54 \n 71 129 147 140 140 143 151 151 143 142 143 143 143 143 146 153 \n158 152 157 162 169 189 243 246 249 246 251 250 154 124 181 214 \n251 254 254 250 243 254 251 249 251 156  53  69 115 112 115 123 \n128 133 137 138 134 138 139 139 137 129  41  52  68  80  81  76 \n 63  57  53  52  54  54  52  44  40  39  36  35  37  38  36  35 \n 37  38  40  40  40  42  41  42  44  46  44  44  45  43  44  43 \n 44  44  44  44  44  42  43  44  43  43  41  40  41  42  42  39 \n 36  37  36  35  34  33  33  32  30  32  32  30  30  29  28  27 \n 28  28  28  27  26  25  26  25  27  25  26  27  26  26  26  25 \n 25  26  26  25  26  27  26  24  26  26  26  25  26  29  28  29 \n 28  28  28  28  30  30  30  31  32  32  32  31  31  30  29  31 \n 29  28  29  27  27  28  31  29  29  29  28  29  29  29  29  30 \n 29  30  30  33  33  35  32  33  35  38  39  41  43  44  44  44 \n 45  44  43  43  44  45  45  43  44  43  42  41  39  38  37  32 \n 26  21  19  19  16  15  14  15  14  12  14  14  18  24  37  42 \n127 151 170 176 170 169 167 159 153 147 140 135 128 127 126 126 \n129 133 133 140 156 169 187 194 192 177 160 153 152 155 154 150 \n156 165 238 248 243 239 238 242 251 250 247 243 242 240 246 247 \n247 250 244 244 247 249 243 244 244 247 247 249 249 247 244 154 \n 67  50  34  29  25  26  28  30  26  19  18  18  18  19  18  19 \n 21  22  22  25  28  30  30  33  32  34  35  38  43  43  42  40 \n 38  36  36  37  35  34  34  33  35  33  36  39  41  40  40  39 \n 39  39  40  40  40  40  40  40  41  41  41  41  40  40  40  39 \n 71  60  51  52  72  82  76  81  85  81  76  75  73  70  63  58 \n 62  62  51  46  41  39  38  40  40  38  36  34  34  34  32  32 \n 32  32  32  31  30  31  34  33  32  33  33  32  32  32  32  32 \n 31  31  31  30  31  31  29  29  30  29  32  33  34  35  37  39 \n 37  37  35  33  33  33  32  34  33  33  36  36  35  36  37  39 \n 42  45  44  44  45  46  44  45  46  45  45  45  44  43  40  36 \n 35  32  31  32  31  29  27  28  26  25  27  27  26  27  28  29 \n 29  29  28  27  28  29  28  27  28  29  30  29  32  32  35  37 \n 43  54  63  68  65  63  69  68  73  74  57  48  52  84 110  61 \n 64  98 150 146 143 145 152 151 142 142 142 143 142 142 147 152 \n154 156 157 160 186 235 250 250 251 250 252 248 191 118 159 192 \n242 253 254 253 237 249 251 246 249 160  53  65  98  86  82  86 \n 92  99 116 130 134 138 141 139 137 142  59  53  70  84  84  78 \n 65  60  53  53  55  54  51  44  41  38  38  37  38  38  36  36 \n 36  38  39  40  42  43  43  43  45  46  44  45  46  46  45  44 \n 42  43  43  45  45  42  44  44  43  42  42  41  41  41  40  38 \n 36  36  36  34  34  33  32  32  32  32  33  31  30  28  28  27 \n 27  27  27  27  27  26  26  26  25  26  26  26  28  27  25  24 \n 24  25  27  27  25  25  26  26  26  27  26  26  26  28  27  28 \n 29  29  28  28  29  29  31  33  33  32  30  31  31  31  31  30 \n 29  29  29  25  26  27  31  27  27  28  29  29  29  29  29  30 \n 28  30  30  31  33  35  33  34  35  36  40  40  43  46  44  44 \n 44  44  44  43  44  43  42  41  43  43  41  41  39  38  37  34 \n 27  22  19  19  16  16  13  16  16  14  14  15  18  21  34  42 \n101 147 162 174 170 168 163 155 149 145 138 133 133 130 127 129 \n132 134 136 148 166 179 193 197 183 170 155 153 154 155 154 150 \n162 199 251 250 243 240 241 243 246 250 246 248 246 244 240 240 \n247 248 245 245 246 246 244 242 242 245 246 246 247 241 233 124 \n 65  44  33  29  25  27  30  30  23  18  17  17  18  19  18  19 \n 22  24  23  25  28  30  31  32  33  34  36  39  41  43  44  41 \n 37  36  36  38  36  35  35  35  36  37  38  39  41  39  40  40 \n 39  39  40  39  39  39  41  41  38  39  39  41  40  39  39  40 \n 78  67  51  43  38  43  62  88  91  84  87  86  79  75  69  65 \n 62  58  54  49  44  44  41  40  41  41  37  35  33  32  33  32 \n 32  33  31  32  32  31  32  32  32  32  33  33  32  33  31  31 \n 31  31  30  32  30  30  30  31  30  30  30  31  31  32  34  35 \n 38  38  35  34  33  32  33  33  33  33  35  35  33  35  35  37 \n 39  41  41  42  41  43  44  46  45  47  46  46  48  47  44  40 \n 36  34  32  32  32  30  30  30  26  26  26  26  26  26  27  28 \n 28  27  27  29  30  29  27  29  28  29  30  31  34  33  36  40 \n 49  61  64  65  75  81  78  78  73  58  49  56 100 149 189 134 \n 55  80 115 151 146 147 156 148 143 142 143 143 141 142 148 151 \n151 155 157 160 240 253 247 250 253 247 248 245 225 133 133 170 \n224 246 254 255 241 247 249 243 248 173  53  61  73  67  61  58 \n 57  58  61  72 101 122 136 139 137 146 116  55  75  98  84  80 \n 70  60  53  51  55  52  47  43  41  39  39  37  37  37  35  38 \n 36  36  38  41  41  42  41  42  44  45  43  44  45  45  44  43 \n 45  44  42  44  43  43  44  43  42  41  43  43  42  41  41  39 \n 36  36  34  34  35  32  32  32  32  31  30  30  30  29  30  29 \n 28  30  29  28  27  27  27  27  25  25  28  27  28  28  26  27 \n 27  27  26  26  27  26  27  26  27  27  26  26  25  25  27  27 \n 29  28  28  29  29  30  32  33  33  31  30  33  32  31  31  30 \n 31  29  27  27  28  27  26  26  28  27  30  28  28  28  29  31 \n 31  29  30  30  33  33  32  35  34  36  38  38  43  44  43  45 \n 46  47  44  44  42  41  43  43  43  42  41  42  40  40  39  34 \n 28  24  21  18  16  15  14  15  14  15  15  15  16  19  31  41 \n 72 137 156 176 167 165 157 151 144 139 135 133 132 129 130 133 \n133 135 142 158 176 187 193 188 170 155 150 152 152 150 152 146 \n174 235 249 246 240 241 244 246 250 252 253 251 247 248 250 245 \n245 242 242 244 246 243 239 243 244 245 243 243 241 244 210  92 \n 58  40  34  29  25  27  28  27  21  17  18  18  18  18  19  18 \n 22  23  24  25  28  29  31  32  32  33  36  39  42  45  44  39 \n 36  36  37  36  36  36  35  37  36  35  35  38  41  41  40  39 \n 38  38  38  39  39  38  39  40  39  40  40  40  39  38  40  38 \n 90  70  56  44  39  39  48 124 167  98  85  89  89  85  77  69 \n 65  59  54  53  48  46  42  42  42  40  37  36  35  34  33  32 \n 33  35  35  34  33  32  31  31  31  31  33  34  33  33  31  32 \n 33  31  32  31  31  30  30  31  30  31  30  30  31  32  33  34 \n 36  35  35  35  33  33  34  34  33  34  33  32  33  33  35  36 \n 37  38  38  40  40  43  43  45  44  45  45  46  48  47  45  43 \n 41  38  35  33  34  30  32  33  28  26  27  27  28  28  28  28 \n 30  29  28  28  28  30  30  29  30  30  30  30  34  36  39  42 \n 52  60  70  81  91  89  82  75  58  54  61  96 159 210 241 220 \n 84  65  92 133 148 149 161 148 143 142 145 145 144 143 148 153 \n156 161 157 147 211 239 248 253 249 249 253 252 241 166 119 156 \n207 234 251 255 246 243 251 247 247 185  54  61  67  59  53  51 \n 49  48  48  50  62  77 107 128 144 208 199  73  82 112  86  82 \n 71  58  52  51  54  51  44  41  41  39  37  36  37  35  37  37 \n 37  38  38  40  42  44  43  44  44  44  45  46  46  46  46  46 \n 47  46  44  45  43  44  43  43  44  43  43  43  42  41  42  40 \n 39  37  34  34  34  33  33  33  33  32  32  32  31  30  29  29 \n 29  29  28  27  25  26  26  28  25  25  27  28  28  26  26  26 \n 28  28  27  26  25  25  25  24  26  26  26  26  26  26  27  27 \n 28  28  28  28  28  30  31  32  33  33  33  33  33  33  31  31 \n 32  29  27  27  27  28  28  28  28  27  31  29  28  27  28  30 \n 29  28  28  31  31  33  31  33  34  37  37  39  42  44  45  47 \n 47  44  45  44  44  42  42  43  44  42  41  42  40  40  39  34 \n 30  25  22  18  17  17  14  14  15  16  14  14  15  17  26  39 \n 58 127 151 171 166 163 155 148 142 139 134 128 127 131 131 134 \n134 137 152 169 183 194 190 176 158 150 150 151 150 149 151 148 \n195 235 245 237 221 238 245 248 249 245 247 252 248 244 242 241 \n244 248 247 242 248 242 239 242 245 243 248 243 240 238 176  79 \n 51  39  31  28  27  29  29  25  21  17  18  18  18  18  19  19 \n 20  23  25  26  29  30  32  33  32  32  36  38  43  46  44  38 \n 35  35  36  35  37  35  36  36  38  37  38  39  39  40  40  40 \n 39  39  37  38  39  39  38  39  39  40  41  40  39  38  40  41 \n107  79  61  53  42  41  46 107 244 206 117  83  79  84  97 101 \n100  96  86  78  65  62  54  48  46  44  41  40  38  36  36  36 \n 37  36  35  34  35  36  34  34  32  31  33  34  32  32  34  32 \n 33  33  31  33  32  31  32  31  30  31  31  31  32  32  32  31 \n 34  35  34  35  36  37  35  33  33  32  32  33  33  32  32  31 \n 32  34  36  37  37  39  40  41  43  44  45  43  44  45  46  49 \n 46  42  39  37  35  33  32  30  29  27  28  27  27  28  28  29 \n 30  29  30  29  28  30  31  30  31  29  32  33  38  40  46  54 \n 68  79  94  99  90  81  66  56  54  68 125 182 233 250 248 251 \n194  71  72 101 130 147 154 145 140 140 144 146 147 148 152 156 \n156 156 158 163 191 235 247 249 244 251 252 250 248 213 114 135 \n186 216 238 254 251 233 249 246 252 211  60  63  61  56  51  49 \n 48  47  47  51  53  59  72 120 219 249 238 122  93 125 100  83 \n 72  63  53  51  49  47  45  42  39  39  39  37  37  38  35  36 \n 36  37  38  40  40  43  42  42  43  45  45  44  45  45  46  47 \n 44  44  43  44  43  43  41  41  42  43  44  45  39  39  42  40 \n 39  39  35  35  33  33  33  32  31  33  33  32  30  31  31  28 \n 30  29  29  27  27  28  28  27  26  26  27  27  27  26  26  26 \n 29  28  26  27  27  27  25  24  26  27  27  26  25  27  27  27 \n 28  29  30  29  29  31  31  31  33  33  34  31  32  33  30  30 \n 31  30  27  26  26  28  28  28  28  28  28  28  29  28  28  28 \n 30  30  29  31  28  30  32  34  34  35  37  40  41  41  45  47 \n 46  46  45  44  43  42  42  43  43  42  43  43  41  40  39  37 \n 31  27  20  18  16  16  15  14  15  16  15  14  14  16  21  33 \n 45 101 149 162 170 156 150 146 143 137 131 128 129 133 136 136 \n139 146 164 178 191 195 180 159 149 149 151 150 149 149 149 160 \n223 219 234 238 235 241 248 248 244 243 241 243 248 247 246 248 \n246 242 240 240 249 247 242 244 249 244 245 246 246 247 157  67 \n 47  37  29  26  26  31  29  24  18  17  18  18  17  18  19  18 \n 20  22  23  26  29  30  31  34  34  34  37  40  42  43  40  38 \n 36  35  37  36  37  33  35  35  37  36  38  41  40  40  41  41 \n 41  40  40  39  39  38  36  38  39  39  40  40  40  38  39  38 \n104  85  70  56  46  45  51  75 229 252 218 147  51  48  59  71 \n 85  95 108 108 107 100  83  74  68  60  52  50  47  44  43  41 \n 41  39  40  38  37  37  36  37  37  35  34  34  33  32  34  35 \n 34  34  33  34  31  32  33  32  32  32  31  32  34  33  32  30 \n 33  33  32  35  36  38  36  34  34  34  34  33  33  33  31  29 \n 31  33  33  33  33  36  38  37  41  40  40  40  39  43  45  49 \n 50  48  43  41  38  34  34  33  31  29  30  30  29  30  30  30 \n 31  30  30  30  29  29  30  33  31  33  35  35  40  49  63  75 \n 84  89 104 100  81  67  54  56  77 126 203 241 250 251 250 253 \n239 124  55  78 106 124 152 143 143 143 146 148 150 153 159 160 \n141 152 200 213 232 253 253 252 251 249 247 246 249 240 130 124 \n176 210 227 247 254 235 244 251 253 230  71  66  59  59  52  52 \n 48  49  53  59  66  73 114 205 250 252 249 186 111 138 108  84 \n 74  62  51  49  45  44  41  40  38  37  39  38  37  37  35  36 \n 36  37  36  39  41  42  41  42  43  44  46  46  44  45  46  47 \n 45  43  45  44  44  43  43  43  42  43  44  43  41  40  41  40 \n 40  38  35  34  32  33  31  32  32  32  33  32  31  30  28  29 \n 30  30  29  28  28  29  28  26  26  26  27  27  27  28  28  27 \n 28  27  26  28  27  27  27  26  27  27  28  27  26  28  29  27 \n 29  30  30  30  31  30  30  33  35  34  34  32  32  32  30  29 \n 29  29  28  27  26  28  28  27  27  28  29  30  30  29  27  29 \n 29  30  28  30  31  31  32  33  35  36  38  40  41  42  46  47 \n 46  46  45  43  45  44  43  44  43  44  45  44  40  39  41  39 \n 32  26  20  17  16  16  14  14  14  14  15  14  15  15  19  30 \n 43  79 147 153 169 152 146 142 138 133 130 130 132 134 141 142 \n145 158 175 185 194 188 166 153 150 151 150 149 148 148 149 190 \n242 244 243 242 244 247 247 244 238 239 239 238 241 242 252 251 \n244 240 239 239 243 245 242 247 248 249 242 249 246 247 139  63 \n 44  33  29  27  27  31  29  24  18  18  18  18  18  18  19  20 \n 21  24  26  28  29  31  33  35  34  34  36  41  41  42  38  36 \n 37  36  37  35  36  34  35  35  36  38  39  40  38  40  39  40 \n 42  40  38  40  39  40  40  41  41  41  40  40  40  40  38  40 \n 98  99  80  67  53  47  48  60 181 249 251 248  82  26  32  39 \n 55  76  91  91  95 103 119 112 103  96  87  81  70  68  62  56 \n 50  47  46  47  43  42  42  42  41  41  39  37  36  37  37  37 \n 36  34  35  34  33  32  33  33  34  34  34  32  32  33  32  31 \n 32  30  32  33  34  35  34  33  34  34  34  34  33  32  31  31 \n 29  30  31  30  31  33  35  36  36  35  37  39  38  39  42  44 \n 47  48  48  46  44  39  36  35  33  31  31  31  31  29  30  31 \n 31  31  29  30  30  31  31  33  34  35  39  43  56  71  81  84 \n 88 104 126  81  60  55  67 102 178 228 248 248 248 248 239 221 \n151  68  64  62  82  98 118 128 144 146 149 151 152 157 151 137 \n110  97 103 116 170 198 221 236 245 250 251 253 251 251 174 120 \n168 197 219 235 249 237 228 252 254 246  98  76  71  60  55  55 \n 53  54  54  61  76 128 232 250 250 249 253 238 142 148 121  92 \n 78  67  53  49  45  43  39  39  38  36  36  36  35  36  36  35 \n 36  36  35  38  42  42  44  44  45  48  47  47  47  48  47  47 \n 47  47  46  45  43  44  43  44  43  43  43  42  43  42  40  39 \n 38  37  36  33  32  33  32  33  32  32  33  33  32  30  29  29 \n 32  31  30  31  27  29  28  27  26  26  26  27  27  28  26  26 \n 26  27  27  27  27  28  27  28  27  26  26  26  27  28  28  27 \n 28  29  29  30  30  29  30  32  34  34  33  33  33  32  33  33 \n 30  30  28  27  28  28  26  26  28  27  30  34  29  29  29  28 \n 30  30  28  30  32  31  30  32  34  36  38  40  39  42  46  47 \n 48  48  47  44  44  44  46  44  44  43  43  43  41  42  38  39 \n 35  29  22  19  17  16  14  14  15  14  15  15  14  14  15  24 \n 41  57 133 149 167 152 142 140 136 131 131 133 134 139 142 145 \n157 172 185 194 190 173 152 149 154 155 151 149 147 148 160 221 \n246 246 239 239 243 250 250 244 242 240 238 240 241 238 240 245 \n249 242 242 245 239 238 241 246 249 250 241 242 244 239  99  60 \n 41  32  28  27  28  30  31  24  20  19  18  17  18  18  19  21 \n 22  22  26  27  30  32  32  33  37  36  39  41  42  41  37  35 \n 35  35  35  34  34  35  34  37  37  38  40  40  40  39  40  39 \n 40  40  39  39  39  40  39  40  40  39  41  41  41  39  39  40 \n 88 110  87  80  65  54  51  55 114 227 252 245  76  34  34  40 \n 61 129 162 169 153 118  92  89  92  97  96  94  91  97 100  93 \n 77  66  60  54  52  53  51  50  49  48  46  44  45  42  42  42 \n 40  39  38  35  37  36  35  35  36  36  35  34  35  35  33  32 \n 32  32  33  32  34  33  34  34  35  36  34  33  32  32  32  32 \n 31  32  31  30  31  32  33  34  35  35  36  37  38  38  41  43 \n 48  50  51  51  48  46  42  40  37  35  34  32  31  33  31  31 \n 32  33  31  30  30  32  32  33  36  39  45  54  69  77  80  83 \n 87 108  87  58  56  78 133 199 242 245 239 232 243 226 152  90 \n 56  48  54  68  72  84  99 106 131 146 149 155 148 140 131 129 \n126 128 124 126 142 144 146 168 196 223 242 250 252 253 210 129 \n162 194 210 222 237 233 215 248 251 249 140  82  92  65  60  60 \n 58  58  65  71 142 223 251 249 249 253 245 209 157 153 132 102 \n 80  70  56  47  45  40  39  39  38  37  35  35  34  35  35  34 \n 36  36  38  37  40  44  45  45  46  47  48  48  47  48  48  47 \n 46  44  45  45  43  43  42  43  44  44  44  44  43  41  39  40 \n 38  36  36  35  34  33  33  34  33  32  32  31  32  30  30  31 \n 35  33  32  33  28  29  28  27  26  26  27  27  27  28  27  27 \n 28  27  27  27  28  28  26  28  29  29  27  29  28  28  28  27 \n 27  27  28  29  29  29  29  31  34  33  34  33  34  34  34  33 \n 31  30  30  30  29  29  29  28  27  26  29  30  29  28  28  28 \n 28  28  30  31  32  32  32  34  36  37  39  39  39  41  45  46 \n 45  47  46  43  43  44  45  44  43  42  43  44  43  42  41  41 \n 35  30  23  20  19  17  15  16  14  14  16  15  14  15  15  21 \n 38  47 121 146 164 154 141 138 134 133 133 135 139 143 143 151 \n169 180 194 197 187 168 148 153 157 155 151 148 148 142 189 238 \n238 241 242 242 246 246 241 246 250 248 244 244 247 246 244 244 \n247 249 246 245 246 246 244 242 243 246 235 238 244 226  80  58 \n 37  31  28  26  29  31  28  20  18  18  19  19  18  18  19  21 \n 23  23  26  28  32  33  34  35  37  36  40  41  44  42  38  36 \n 34  35  35  34  35  36  35  35  38  39  39  39  39  39  39  40 \n 39  39  39  39  39  39  39  40  39  40  41  41  41  39  39  40 \n 82 110 102  90  86  75  61  56  65 126 216 206  40  44  39  41 \n127 237 237 239 239 233 218 193 160 139 115 101  90  81  83  89 \n100 105 103 100  90  83  79  76  71  69  66  64  62  59  57  54 \n 51  47  45  45  42  41  42  42  37  37  36  37  38  36  35  35 \n 34  35  34  35  35  34  35  35  34  36  34  35  35  33  33  32 \n 32  31  31  30  30  32  33  33  33  32  34  35  36  36  39  42 \n 46  50  51  54  53  51  49  46  45  40  37  36  35  34  34  30 \n 35  35  33  33  36  37  38  40  44  50  59  68  78  80  79  77 \n 67  58  60  75 133 189 234 248 240 238 230 208 139  74  50  51 \n 47  46  52  58  83  83  87  97  97 100 106 114 117 121 121 115 \n114 114 117 122 136 145 149 152 149 159 198 219 234 244 234 150 \n153 194 196 208 211 209 201 236 250 252 208 106 121  98  75  73 \n 74  76  95 156 243 251 247 249 245 233 204 159 163 150 148 117 \n 84  71  58  51  43  41  40  38  38  37  35  35  34  34  35  35 \n 35  35  38  36  39  43  46  46  47  47  48  51  51  49  47  48 \n 47  45  46  46  45  45  43  43  43  43  44  44  41  40  40  40 \n 39  37  35  34  33  32  34  35  34  34  32  31  33  33  32  32 \n 35  35  34  34  30  30  28  28  27  27  28  28  28  29  30  29 \n 28  28  28  26  28  29  27  29  29  28  28  30  29  27  28  29 \n 26  28  28  29  29  29  30  31  34  36  36  36  34  34  32  32 \n 32  30  29  29  29  28  27  27  27  26  29  29  27  27  27  29 \n 28  29  30  30  32  32  32  33  35  37  39  40  41  43  45  46 \n 46  46  46  45  45  45  45  45  45  44  44  45  44  45  42  39 \n 36  33  25  21  20  18  17  16  16  16  17  16  15  15  16  19 \n 35  42  97 142 157 163 143 140 133 132 134 139 143 145 150 163 \n179 186 195 185 182 180 151 155 156 155 150 150 148 152 235 249 \n248 247 241 238 240 243 247 247 244 244 244 246 249 247 247 246 \n245 248 245 241 243 239 238 247 243 241 239 247 244 192  70  53 \n 37  31  27  23  30  31  26  19  17  18  18  19  17  17  18  20 \n 23  24  29  30  32  32  35  36  35  35  41  42  42  42  38  37 \n 36  36  33  34  36  34  38  37  38  38  39  40  42  41  39  38 \n 38  37  38  40  40  39  40  40  39  39  39  40  39  38  38  39 \n 76  94 113 100  98  94  80  68  65  67  92  91  38  45  39  37 \n162 245 238 232 238 241 237 242 242 230 227 210 180 152 120 102 \n 87  81  84  83  89  92  92  92  89  84  81  82  84  88  90  87 \n 87  75  65  56  50  49  46  45  42  41  39  40  40  38  37  37 \n 36  35  33  36  34  34  35  35  35  36  36  36  36  35  34  34 \n 34  32  33  31  31  32  33  33  32  32  34  35  38  37  37  38 \n 43  47  50  52  51  51  50  48  52  48  41  41  40  38  36  37 \n 38  36  37  39  40  42  45  50  60  68  75  75  76  70  61  58 \n 57  71 114 166 224 245 241 240 239 229 179  97  54  52  51  51 \n 53  54  58  62  73  91 113 123 113 116 117 120 126 121 115 113 \n110 105 102 103 111 120 128 143 155 153 155 174 201 219 237 172 \n143 194 187 204 197 197 195 215 246 248 240 159 127 132 103  99 \n101 118 192 239 251 250 249 251 225 214 224 183 148 153 152 127 \n 92  78  62  51  44  41  40  39  39  37  35  35  35  35  35  35 \n 37  38  38  37  39  42  47  47  49  48  49  51  51  49  49  49 \n 47  46  45  46  45  44  45  46  43  44  43  42  39  39  41  40 \n 39  36  35  35  33  34  36  37  36  36  32  33  33  32  34  34 \n 33  34  32  32  31  30  29  28  28  28  29  29  29  29  29  29 \n 27  27  28  27  28  28  27  28  28  28  28  29  29  28  28  28 \n 28  28  29  30  29  30  29  31  33  37  36  37  35  33  31  32 \n 31  31  30  30  28  27  25  25  27  27  28  28  27  27  27  27 \n 29  30  29  28  31  32  33  35  36  37  39  41  41  44  44  46 \n 46  47  46  45  44  46  45  46  46  45  45  46  45  45  44  41 \n 37  33  26  22  19  17  18  17  16  17  16  15  15  15  15  17 \n 33  42  81 135 151 166 153 142 134 135 136 142 143 148 161 174 \n186 189 189 175 162 174 159 155 153 153 148 149 148 175 239 244 \n248 244 239 236 238 240 251 252 239 239 246 245 240 240 242 244 \n247 244 244 249 246 242 241 241 243 244 247 247 244 156  66  50 \n 35  31  27  25  30  28  25  19  18  19  18  19  17  17  18  20 \n 23  25  29  30  33  34  34  34  37  37  42  44  43  41  36  36 \n 37  35  34  33  35  35  38  38  39  36  39  39  41  39  39  39 \n 39  38  38  41  40  38  39  39  40  39  39  39  40  38  39  39 \n 73  80 108 108 104 114 114 105  90  72  62  55  47  45  46  43 \n118 177 200 216 228 242 241 247 247 245 248 252 246 244 242 237 \n217 206 194 170 149 131 113  96  88  87  80  77  75  73  74  84 \n 86  79  80  84  84  83  78  75  63  60  54  51  48  46  42  40 \n 40  39  39  40  38  36  36  35  35  36  37  36  36  35  36  35 \n 34  34  33  33  32  32  31  32  32  31  32  33  35  37  36  37 \n 39  40  45  46  46  44  45  45  47  48  49  52  53  51  49  49 \n 49  47  51  55  60  65  71  77  77  75  72  64  57  54  64  82 \n130 178 211 231 241 237 235 231 183 114  49  49  52  53  56  56 \n 61  66  77  93 110 123 121 123 134 152 182 200 216 223 220 215 \n203 187 160 134 115 107 103 116 135 148 155 146 154 162 189 210 \n144 155 166 193 183 180 184 186 247 251 251 240 178 155 152 158 \n184 227 250 252 253 252 252 230 189 192 187 174 178 171 138 139 \n101  85  67  55  47  43  38  37  37  36  36  35  35  34  35  36 \n 36  35  36  37  40  43  45  47  49  50  52  51  49  50  49  47 \n 47  47  47  46  44  44  44  46  44  42  40  40  40  42  41  39 \n 39  37  36  34  33  34  35  36  36  35  34  34  33  32  35  34 \n 35  36  34  32  31  32  30  29  29  27  30  30  29  28  28  29 \n 28  28  28  28  27  30  30  29  26  27  27  28  29  29  29  29 \n 28  29  29  29  29  30  30  30  33  34  35  37  34  34  33  34 \n 33  32  32  30  29  30  29  28  29  27  28  29  29  28  27  26 \n 29  30  29  30  31  31  32  36  37  36  40  43  43  43  44  46 \n 45  45  45  46  46  46  46  46  44  45  44  46  46  45  47  44 \n 38  35  27  22  20  18  18  16  15  16  16  15  16  16  17  18 \n 26  40  58 123 144 164 155 137 135 137 141 145 147 160 174 182 \n189 190 175 159 152 158 156 152 152 152 149 150 158 218 241 241 \n247 244 241 240 243 244 247 249 248 247 250 248 244 239 239 236 \n241 242 246 246 249 248 242 238 244 248 244 244 234 122  58  43 \n 34  29  27  27  29  28  22  20  19  18  18  19  17  18  20  22 \n 25  27  29  30  34  34  37  37  39  38  43  45  44  39  36  35 \n 34  33  33  33  34  35  37  38  39  40  41  41  39  37  38  37 \n 38  38  39  40  40  40  38  39  40  38  40  40  40  39  38  37 \n 72  75  95 113 101 108 117 127 124 107  90  74  61  57  55  56 \n 60  70  81  99 115 132 156 178 211 230 236 245 247 247 245 238 \n240 245 239 231 239 239 221 206 197 187 168 156 132 112  94  93 \n 95  81  78  82  89  88  86  99 106 108  98  87  72  64  55  52 \n 49  47  46  45  45  42  40  40  38  37  37  37  36  36  37  36 \n 37  35  34  34  34  32  32  33  34  33  34  36  35  36  36  37 \n 37  36  39  41  42  45  49  50  54  58  61  63  66  67  68  71 \n 74  74  81  81  80  80  74  68  65  62  59  59  74 106 148 179 \n212 214 191 193 211 221 207 156  71  51  51  51  56  57  60  63 \n 75  86 105 113 119 123 146 181 218 233 248 250 246 246 247 247 \n240 242 233 219 180 156 122 109 112 129 147 160 140 136 155 191 \n196 127 123 171 175 165 176 179 233 252 248 251 246 230 220 231 \n244 249 247 249 252 252 242 190 178 171 162 142 145 169 144 145 \n115  93  72  59  47  44  39  38  37  36  36  35  36  34  35  36 \n 35  37  39  38  40  44  47  49  49  50  48  50  51  51  49  47 \n 46  46  48  46  43  44  45  45  43  42  43  41  41  41  40  40 \n 37  36  34  33  35  37  36  37  36  35  35  34  33  33  36  37 \n 36  35  36  36  34  34  33  33  31  29  30  30  30  31  29  29 \n 29  28  28  28  29  29  29  28  28  28  27  27  29  29  28  30 \n 29  28  30  30  30  31  31  31  34  35  35  37  36  36  33  33 \n 34  31  31  31  30  28  29  28  29  28  27  27  28  27  28  29 \n 29  30  30  30  31  31  33  34  36  37  39  42  43  43  43  44 \n 44  45  46  47  46  46  46  45  44  46  45  46  48  46  48  45 \n 40  36  30  24  19  18  15  14  15  14  16  15  15  16  17  19 \n 24  35  49 106 144 157 162 140 138 141 148 149 158 170 177 184 \n188 180 165 151 156 157 155 150 152 149 150 150 177 239 249 246 \n247 242 246 248 247 248 246 247 239 247 249 250 247 245 244 241 \n242 242 244 248 250 245 243 243 249 248 246 244 219  98  55  41 \n 33  28  26  28  30  28  21  18  18  18  19  19  17  18  20  23 \n 28  29  33  33  33  36  38  35  37  37  42  45  46  39  37  35 \n 33  34  34  34  35  35  37  36  37  39  41  41  39  38  39  37 \n 37  38  38  38  39  40  39  38  39  37  39  39  39  40  39  40 \n 70  71  85 125 114  93 102 111 127 138 137 121 107  98  84  76 \n 69  66  66  67  66  66  62  61  65  72  86 106 128 146 169 186 \n210 228 230 234 231 230 236 242 244 245 245 241 245 243 231 213 \n201 179 157 141 127 120 101  92  87  88  99 108 115 117 116 105 \n 93  83  75  67  61  53  51  50  47  42  41  42  41  40  41  41 \n 39  38  37  37  39  38  37  36  36  35  36  37  36  35  37  38 \n 39  38  39  39  40  45  53  55  62  66  70  69  79  82  86  87 \n 81  76  70  63  60  57  61  66  76  87 116 153 187 186 155 164 \n173 173 141 113 123 129  71  48  55  53  57  60  63  69  78  89 \n106 118 115 119 143 183 239 253 252 253 253 254 250 246 249 252 \n251 251 250 252 250 245 208 158 116 108 128 144 141 125 139 181 \n202 174  87 127 164 159 171 187 213 250 244 245 247 250 252 252 \n251 253 253 252 254 246 202 193 146 135 152 130 132 141 158 140 \n138 111  83  65  52  45  41  41  37  36  35  36  35  35  37  35 \n 35  37  39  38  40  43  48  49  50  51  49  51  51  51  51  48 \n 47  47  45  45  44  44  45  43  42  42  44  41  41  41  39  40 \n 38  35  35  35  36  37  35  34  34  33  34  34  34  34  35  35 \n 34  35  35  36  37  37  35  34  33  33  34  32  32  33  31  31 \n 30  29  29  29  27  28  28  27  29  29  30  29  30  30  28  30 \n 29  28  30  32  31  30  31  33  33  36  37  36  35  35  32  33 \n 35  33  32  30  29  29  29  28  29  27  27  26  27  28  31  30 \n 29  29  30  30  31  30  32  34  37  38  38  41  42  43  42  43 \n 44  45  47  47  45  46  47  45  45  45  45  46  47  47  48  47 \n 40  39  31  23  20  19  16  15  17  15  17  15  15  17  17  18 \n 22  32  43  79 142 145 169 153 139 147 149 158 172 178 185 184 \n174 163 154 153 157 158 151 149 149 150 149 150 221 249 247 249 \n249 247 246 246 245 246 246 246 247 246 249 248 242 241 242 242 \n247 243 242 245 238 238 239 247 245 243 237 242 185  76  50  38 \n 31  29  27  29  30  27  20  18  19  18  18  19  19  19  20  25 \n 31  31  34  33  33  36  37  36  36  37  41  43  41  37  36  35 \n 34  35  35  36  35  35  35  36  37  40  41  39  38  40  41  39 \n 39  38  39  40  41  40  40  38  40  39  40  39  38  40  40  41 \n 74  71  79 110 145 108  93  99 114 118 128 128 130 132 128 122 \n109 101  92  83  75  70  67  65  63  64  63  61  59  61  66  76 \n 88 102 118 133 158 189 209 218 236 244 243 243 247 247 240 234 \n241 238 231 232 225 220 206 199 184 168 145 119 100  93  93  96 \n107 110 115 118 117 107  92  75  63  57  52  51  49  49  48  48 \n 44  44  43  42  43  42  41  40  41  40  39  39  38  39  40  43 \n 41  39  40  42  41  44  46  49  57  60  66  65  72  72  72  66 \n 62  59  55  57  71  87 112 133 159 178 202 217 219 218 210 207 \n199 184 123  75  70  57  49  53  55  59  64  69  75  84 102 113 \n116 116 132 162 222 245 251 248 249 249 251 251 252 249 251 253 \n253 252 252 254 251 251 251 229 157 126 113 132 138 131 111 149 \n191 194 124 151 174 160 169 205 204 241 241 247 251 252 253 253 \n251 253 252 254 250 241 163 158 122 124 171 127 112 123 152 142 \n141 129  96  74  55  49  42  39  36  36  36  35  34  35  36  35 \n 36  36  39  40  40  42  47  48  50  49  49  52  52  50  50  49 \n 46  45  44  44  43  44  45  43  41  41  42  41  40  42  40  39 \n 37  34  35  35  35  35  36  34  31  32  33  33  33  34  35  35 \n 33  35  34  35  36  35  34  35  35  34  36  36  35  33  32  32 \n 31  29  30  29  28  27  27  28  29  29  28  29  29  28  27  29 \n 29  29  28  32  31  30  32  32  32  34  37  37  37  37  35  34 \n 35  34  32  31  31  30  29  29  28  26  27  28  29  29  29  29 \n 29  29  30  30  31  30  31  34  35  37  39  41  43  45  43  44 \n 44  45  47  47  47  47  48  48  47  45  44  47  47  47  48  47 \n 44  41  32  25  20  19  18  17  17  16  17  16  16  17  16  17 \n 19  30  40  61 138 142 158 164 147 152 159 167 184 204 198 191 \n161 149 151 157 156 156 151 146 149 148 150 166 245 239 246 250 \n246 241 248 251 252 250 247 249 246 240 251 246 243 240 239 244 \n244 243 244 242 243 246 247 244 241 244 242 241 145  67  45  35 \n 30  27  28  31  31  27  19  17  20  18  17  18  20  21  22  27 \n 32  33  35  34  37  38  39  40  37  37  41  42  40  38  35  35 \n 34  34  35  35  36  35  36  38  38  40  40  40  39  41  41  39 \n 39  39  39  39  41  42  41  39  40  40  40  39  40  42  39  40 \n 89  74  74  83 139 159 115  94  95 104 112 115 112 115 118 121 \n120 121 124 121 121 115 109 100  89  83  77  74  67  65  60  59 \n 61  59  60  58  54  56  60  70  98 122 149 164 190 202 213 219 \n228 232 239 239 240 246 246 249 246 240 243 235 230 217 194 170 \n144 121 105 100  99 103 113 115 116 112 105  96  89  84  75  71 \n 67  64  60  57  55  54  52  51  50  48  47  47  48  46  47  49 \n 47  45  45  46  44  44  47  48  48  50  50  52  55  60  66  79 \n 96 111 134 150 165 169 175 202 237 247 247 243 246 241 237 239 \n249 237 135  51  51  52  56  61  67  72  79  87 101 118 124 119 \n131 150 179 201 236 248 240 238 239 243 246 248 248 250 247 253 \n251 251 254 253 251 246 246 248 238 182 126 121 130 127 104 100 \n170 190 204 242 179 162 160 208 197 231 248 249 249 249 253 252 \n248 250 249 245 249 203 122 127 107 125 146 110 133 136 136 140 \n136 136 120  91  63  49  41  40  37  36  35  33  33  35  35  35 \n 36  38  39  41  41  43  48  46  49  50  50  50  51  50  46  46 \n 46  46  45  44  43  42  42  42  42  42  41  42  41  41  39  37 \n 36  35  35  36  36  36  36  34  33  33  31  32  33  34  33  33 \n 32  33  34  35  34  34  37  37  34  36  36  36  35  34  34  35 \n 35  33  32  31  30  30  28  29  30  32  30  31  29  29  29  29 \n 29  29  28  31  32  31  31  32  34  35  38  37  39  39  36  34 \n 35  35  34  32  30  30  30  29  28  27  29  30  28  28  29  30 \n 29  29  30  30  31  32  32  32  34  36  37  40  42  45  45  45 \n 44  46  45  46  47  47  48  50  49  46  47  50  45  44  48  47 \n 45  40  35  28  22  20  19  18  17  17  17  18  18  17  18  19 \n 21  27  42  48 122 141 151 164 168 165 171 184 199 193 180 174 \n153 146 150 157 155 154 150 149 150 147 156 204 246 242 246 245 \n242 245 251 251 248 247 252 251 250 249 248 249 247 248 247 247 \n246 248 247 243 240 243 240 242 243 241 233 208  90  61  41  34 \n 30  28  29  31  27  23  18  17  18  17  17  18  21  22  24  30 \n 33  33  35  35  39  41  39  39  38  40  40  40  38  37  36  35 \n 35  34  35  35  35  37  37  38  40  41  41  41  41  41  40  39 \n 39  38  38  40  41  40  38  38  38  38  38  40  42  42  41  40 \n114  79  74  77 120 162 165 147 119 108 107 112 122 121 119 116 \n113 110 112 111 113 116 118 117 112 114 115 105  95  89  82  78 \n 74  71  67  63  62  59  59  59  57  56  62  65  73  78  89 100 \n122 150 185 209 224 241 252 250 246 236 248 244 238 243 247 248 \n240 227 215 209 185 165 139 122 110 101 100  99  98  98 101  99 \n 97  99  95  91  86  84  80  77  75  72  69  67  65  61  60  56 \n 53  51  49  47  46  46  45  44  42  40  40  48  91 109 123 140 \n147 148 140 126 114 124 193 240 251 248 242 248 253 252 249 243 \n207 129  56  48  53  59  66  73  80  84  94 109 121 122 125 146 \n154 146 142 145 169 200 192 192 202 215 219 219 235 249 247 248 \n249 251 251 249 249 250 252 249 251 244 159 120 124 122 107 102 \n133 183 199 233 184 155 151 188 215 218 254 253 249 249 249 249 \n252 251 247 249 246 164 117 111 106 130 113 136 183 178 138 136 \n136 137 132 106  72  55  43  39  36  35  35  32  33  33  34  34 \n 35  37  40  40  43  45  46  47  50  48  49  50  47  47  48  46 \n 46  44  45  43  44  44  42  40  41  41  39  38  39  38  38  37 \n 35  34  35  35  35  34  35  35  34  34  33  33  33  33  34  34 \n 33  32  32  33  32  34  36  35  34  36  36  36  37  35  36  36 \n 36  35  34  33  32  31  31  30  31  30  29  29  30  31  31  31 \n 30  31  30  30  30  29  29  31  33  34  39  39  40  40  37  35 \n 34  34  34  33  31  31  30  30  29  28  29  29  26  28  30  30 \n 29  29  30  31  30  31  32  32  33  37  39  39  41  44  45  44 \n 46  48  45  47  46  47  48  49  48  47  50  54  47  45  48  51 \n 47  43  37  29  23  21  19  18  19  17  17  18  18  17  19  20 \n 21  26  38  45 100 138 148 154 176 184 187 189 202 191 169 153 \n147 151 152 152 152 153 152 148 149 152 166 230 243 243 243 247 \n248 244 240 239 249 245 246 245 246 247 246 246 236 235 251 254 \n252 253 251 243 241 240 240 243 239 235 213 167  66  57  39  32 \n 29  28  30  31  27  22  18  18  18  18  18  19  19  22  27  29 \n 33  35  37  36  38  40  40  38  38  38  39  40  39  37  35  35 \n 34  34  35  35  35  36  37  39  41  42  41  40  39  39  40  39 \n 39  40  40  40  42  41  38  38  38  38  37  39  41  41  40  40 \n176  91  77  78  96 146 178 174 216 215 179 148 130 136 134 123 \n115 113 116 114 115 115 112 111 111 110 107 109 107 114 119 116 \n108 109  99  97  94  86  81  75  69  68  60  60  60  57  57  58 \n 58  56  58  62  69  91 119 142 163 180 209 222 230 237 250 250 \n248 248 251 249 248 241 242 248 237 228 214 188 162 148 132 122 \n115 110 101  96  94  94  91  91  90  88  85  82  78  75  71  70 \n 65  59  57  51  45  44  41  36  32  32  34  38  66  63  69  62 \n 55  53  59  76 142 214 247 246 241 242 246 253 249 247 220 154 \n 66  57  60  62  72  77  83  88  96 107 124 123 127 147 201 231 \n217 197 170 141 137 132 132 142 167 176 160 154 161 182 235 237 \n230 231 238 246 248 243 244 249 248 250 234 144 118 130 114 122 \n125 144 197 217 206 163 146 148 206 205 249 251 250 249 246 245 \n249 252 252 252 224 129 122 111 127 109 106 188 206 144 136 124 \n136 138 138 126  91  68  50  44  39  35  34  33  33  34  33  35 \n 33  34  38  40  42  46  47  48  48  49  47  49  49  51  49  48 \n 47  46  44  42  42  39  38  38  39  39  38  36  38  36  37  35 \n 33  32  35  35  32  32  31  33  33  32  32  32  30  32  38  40 \n 36  34  32  32  32  33  33  33  33  34  33  34  37  37  36  36 \n 36  37  37  37  36  34  33  30  30  30  31  30  31  32  30  30 \n 32  31  31  31  31  31  31  33  33  34  39  39  39  40  37  37 \n 35  35  35  33  32  32  30  30  30  28  29  30  29  28  28  29 \n 28  30  31  30  29  31  31  32  34  36  36  38  41  43  44  45 \n 43  45  45  47  47  48  49  48  47  47  48  52  50  49  49  51 \n 52  46  40  31  24  21  21  19  20  19  18  20  20  20  21  21 \n 22  27  40  48  76 135 142 149 161 182 191 191 186 178 168 152 \n150 152 153 150 150 153 148 149 150 150 194 232 239 247 245 242 \n242 247 236 242 249 247 244 251 243 239 235 238 241 244 250 247 \n243 239 238 239 245 246 241 234 234 218 179 123  57  51  37  31 \n 27  29  31  30  26  21  18  17  18  19  18  19  19  24  30  31 \n 34  36  37  36  37  39  38  38  38  39  40  39  37  34  32  34 \n 34  34  35  37  36  35  36  39  43  43  42  42  40  40  42  40 \n 40  37  38  39  42  41  39  38  38  38  38  40  40  40  40  41 \n219 120  81  78  85 121 178 176 206 244 248 236 215 206 197 155 \n115 110 109 111 113 115 114 116 115 115 112 112 109 112 110 107 \n110 111 112 112 116 116 122 121 117 103  93  83  72  69  68  65 \n 61  60  62  59  59  57  60  60  63  68  84  97 112 121 157 177 \n195 219 235 246 248 242 233 240 241 245 244 237 236 237 231 225 \n222 216 209 204 190 186 184 181 177 174 167 163 160 160 148 136 \n117 106  94  70  43  43  37  32  28  27  29  31  39  56  45  43 \n 55  67  97 163 235 248 246 249 249 248 243 240 223 180  95  66 \n 60  64  71  81  86  85  93 102 117 120 121 130 177 224 240 245 \n245 249 239 221 182 160 158 170 175 177 171 159 144 152 174 181 \n189 189 202 230 216 200 203 220 225 226 232 203 107 129 122 128 \n132 118 181 210 216 169 149 147 187 199 237 253 249 247 246 249 \n252 253 252 252 204 127 125 123 146  94 119 206 185 124 115 144 \n161 140 141 134 112  83  59  48  40  38  35  33  34  33  33  36 \n 35  37  37  40  42  47  50  51  50  49  49  48  48  49  48  47 \n 45  42  40  40  39  38  37  37  36  37  36  35  34  34  32  33 \n 32  30  32  32  30  31  29  31  33  32  31  32  31  30  35  37 \n 36  32  32  31  33  34  32  31  32  33  32  32  35  35  34  35 \n 36  37  38  38  37  37  36  35  32  32  33  31  32  31  31  31 \n 30  30  30  30  32  30  33  34  33  33  37  40  40  40  37  37 \n 36  36  36  34  34  32  31  31  29  27  28  29  30  30  28  29 \n 28  29  31  30  29  30  32  34  35  36  38  39  40  41  44  45 \n 43  46  47  47  47  47  48  49  49  47  48  49  49  53  49  50 \n 50  46  41  34  24  21  22  20  20  18  19  19  21  21  22  24 \n 28  36  42  45  64 125 141 147 153 167 181 182 180 172 167 160 \n154 151 152 150 150 149 149 151 151 156 223 236 239 250 251 247 \n241 244 243 241 245 251 243 245 244 239 237 237 239 248 244 239 \n238 238 241 242 247 244 241 237 222 182 150 101  56  48  35  28 \n 26  26  30  31  27  22  19  18  19  20  18  19  20  24  31  33 \n 36  37  39  39  40  42  40  41  40  39  39  38  38  36  34  36 \n 34  32  34  36  36  36  36  39  42  41  43  41  41  40  39  38 \n 40  40  40  41  42  42  42  40  39  39  39  41  39  39  40  40 \n240 180  84  81  80  94 163 180 194 229 250 245 233 241 241 240 \n222 201 180 159 139 126 110 106 109 110 107 109 110 111 110 109 \n111 111 110 110 108 107 111 109 110 115 115 113 118 118 110 107 \n 97  93  89  82  75  71  65  66  63  62  60  59  60  62  62  58 \n 62  66  81 101 126 142 162 186 207 227 238 239 238 239 244 240 \n246 252 247 245 236 240 245 249 251 251 247 244 244 247 239 210 \n166 123  79  63  50  48  39  31  25  24  27  31  49  52  53  65 \n 91 144 226 246 248 252 253 254 253 247 239 190  92  63  68  69 \n 78  91  97  93  92  99 115 122 121 126 166 215 244 244 246 239 \n238 247 246 245 242 240 243 246 247 249 249 242 235 228 214 195 \n174 165 163 169 164 147 140 147 147 146 192 222 159 109 141 123 \n140 122 150 198 219 194 144 152 177 199 220 248 252 250 247 251 \n252 253 254 252 163 133 126 154 107  93 141 218 139 112 117 194 \n210 153 140 142 126 106  73  55  43  39  36  35  33  33  34  35 \n 35  36  37  40  43  48  51  52  52  52  52  51  49  49  48  46 \n 43  41  39  38  37  36  37  36  35  36  34  33  34  33  34  34 \n 32  32  31  30  31  32  30  30  31  30  29  30  30  30  32  30 \n 31  31  30  28  31  31  31  30  31  31  32  32  33  34  35  36 \n 37  37  38  38  38  37  37  37  36  35  34  33  33  33  33  32 \n 33  31  31  31  31  32  34  35  33  34  37  38  38  39  38  37 \n 38  34  34  34  32  31  33  31  28  29  30  31  30  30  27  27 \n 29  28  29  29  29  28  31  34  36  36  37  37  39  41  45  46 \n 45  46  46  46  46  46  49  49  51  51  46  45  50  51  48  47 \n 48  46  43  36  25  23  22  21  21  21  22  21  23  22  24  28 \n 39  64  73  44  53 111 139 142 147 153 168 173 174 171 165 159 \n154 150 150 148 149 149 149 151 150 188 248 247 237 239 245 242 \n248 249 246 245 241 240 239 249 247 242 246 242 241 249 249 240 \n239 240 243 240 245 242 247 236 184 151 147  77  52  41  33  31 \n 28  28  31  29  25  22  19  19  18  17  19  20  20  24  30  32 \n 37  39  40  42  42  42  41  41  43  40  39  39  36  34  34  35 \n 34  35  34  34  35  34  37  39  41  43  43  42  41  41  39  39 \n 40  41  40  40  41  41  40  38  39  38  37  37  37  36  40  40 \n234 225 105  86  78  84 140 174 191 211 245 246 246 251 251 248 \n244 245 245 238 235 224 201 185 168 149 126 111 101 100  98 103 \n105 107 109 112 115 115 113 113 113 109 107 107 107 111 111 115 \n114 114 124 121 113 116 109  99  94  86  76  70  66  65  62  63 \n 61  63  59  58  56  60  65  75  86 105 115 128 150 181 213 222 \n238 243 245 249 246 241 241 250 251 246 244 250 244 243 246 246 \n248 236 201 164 100  63  53  46  32  26  32  38  54  66  80 115 \n196 231 245 250 247 251 248 252 251 224 139  84  64  67  79  93 \n105 104  98  99 110 120 119 119 143 187 238 249 242 239 246 240 \n247 248 246 246 238 239 251 249 243 238 244 244 241 241 239 240 \n239 238 232 226 216 201 184 167 139 144 193 212 201 112 133 128 \n134 136 135 175 217 195 137 159 161 181 213 242 246 245 252 253 \n254 254 253 236 144 145 140 150  95  93 168 216 105 110 149 218 \n241 184 138 142 141 122  94  67  50  44  38  38  36  35  36  35 \n 38  38  38  40  42  47  51  53  55  54  52  53  52  50  49  44 \n 41  39  38  37  38  37  35  36  37  36  33  32  34  31  34  32 \n 31  31  31  30  31  31  30  30  29  29  30  29  31  32  33  30 \n 31  31  30  29  28  30  30  29  28  30  31  29  32  33  32  34 \n 36  37  37  36  35  36  37  39  38  37  36  34  33  34  33  32 \n 33  32  33  32  32  33  33  33  34  35  38  39  38  40  39  37 \n 38  36  35  34  33  32  32  31  30  30  31  31  29  28  28  29 \n 27  26  28  30  32  31  32  34  35  36  37  36  40  39  42  44 \n 45  43  45  46  48  46  48  50  51  50  47  45  49  51  47  46 \n 46  46  44  38  29  25  24  23  21  21  23  23  24  25  27  35 \n 55  98 118  48  47  90 138 140 147 152 157 163 168 169 163 158 \n151 151 149 147 149 148 149 151 158 219 244 244 244 244 244 242 \n244 242 244 245 244 240 238 245 243 242 246 244 247 249 244 242 \n236 241 244 244 246 239 233 214 165 150 138  68  49  39  33  28 \n 28  30  32  29  24  20  18  19  17  17  19  19  22  25  31  33 \n 39  39  41  44  43  43  41  42  43  42  40  37  35  35  34  33 \n 33  33  32  33  35  35  37  41  41  42  42  42  41  40  40  40 \n 41  39  40  41  41  41  40  39  38  37  36  36  37  37  40  38 \n245 249 155  97  76  80 107 160 186 191 234 247 243 248 249 246 \n246 244 243 247 248 244 239 240 246 249 244 231 213 202 182 170 \n142 121 108 104 104 103 102 101 107 105 103 108 110 109 108 110 \n109 109 110 107 108 107 111 118 121 120 123 122 122 114  99  93 \n 86  74  74  70  65  64  61  60  62  61  60  59  58  59  63  69 \n 89 105 136 161 179 194 215 233 240 233 238 244 248 252 249 247 \n251 249 247 247 239 208 150 107  35  34  39  40  53 130 197 235 \n241 242 247 240 248 252 242 216 136  80  65  73  84 103 120 120 \n103  99 109 118 124 119 136 175 222 236 239 242 244 248 247 240 \n244 242 244 240 241 244 244 245 244 242 243 243 247 245 243 245 \n242 242 243 241 241 240 245 242 229 223 209 204 195 149 111 131 \n132 138 132 149 213 189 122 147 151 149 193 226 235 237 245 252 \n254 252 242 202 141 157 168 116  95  96 202 182 102 118 192 235 \n253 232 154 126 151 140 118  96  62  50  43  39  39  38  37  37 \n 38  39  39  40  42  46  52  54  54  55  53  53  51  50  48  43 \n 40  38  36  36  35  34  33  34  33  34  35  32  33  32  31  30 \n 29  29  30  31  33  32  29  29  30  29  29  30  30  32  33  32 \n 31  31  30  30  28  29  28  29  31  32  30  30  32  32  30  32 \n 34  36  36  36  36  36  37  38  37  36  37  38  36  37  35  36 \n 33  32  35  37  36  34  32  34  36  36  37  38  39  41  38  38 \n 37  37  35  33  34  33  31  31  32  30  30  28  29  29  29  28 \n 26  28  30  30  30  30  32  33  35  36  37  39  41  39  39  41 \n 42  44  45  44  47  48  50  50  51  51  48  44  46  49  48  47 \n 48  50  47  42  33  27  27  25  25  25  25  25  27  29  39  55 \n 96 128 139  56  47  66 137 138 146 148 149 151 158 161 158 154 \n151 151 149 148 148 150 152 151 190 241 240 244 251 248 241 245 \n247 246 247 241 238 240 241 243 242 241 244 240 243 238 245 247 \n243 246 246 247 247 240 203 166 151 148 115  59  46  36  30  27 \n 29  32  30  25  21  19  18  19  18  19  21  20  25  28  31  35 \n 37  41  42  42  44  44  41  42  40  41  38  37  36  36  33  35 \n 34  34  33  33  34  37  39  42  42  42  43  42  41  40  40  41 \n 39  38  39  38  39  40  39  39  40  37  38  37  37  35  38  38 \n244 244 205 110  94  78  89 139 184 185 214 245 246 251 253 250 \n245 238 238 247 250 238 239 243 250 248 242 243 237 242 251 250 \n229 219 204 198 190 176 152 129 109  98  91  94  98 103 106 108 \n111 108 109 109 111 107 107 109 111 114 116 116 121 121 121 123 \n125 123 114 108 105 100  89  81  74  69  65  65  61  60  61  60 \n 61  59  60  65  72  78  94 112 125 136 164 189 218 238 248 244 \n249 251 243 241 244 241 245 209  38  40  42  41  84 216 243 244 \n247 247 247 243 246 233 161 101  71  74  79  96 125 137 111 103 \n105 118 127 122 124 147 209 236 239 240 242 239 250 248 242 244 \n249 245 243 242 243 245 238 245 248 248 241 239 248 248 242 233 \n232 236 235 239 235 241 245 246 240 240 241 241 243 204 106 125 \n139 142 136 139 210 197 121 126 140 146 176 211 206 196 203 233 \n251 252 245 181 147 172 172 108 102 123 211 149 115 137 211 244 \n253 251 180 128 130 144 135 113  87  61  50  45  44  42  40  39 \n 40  39  42  43  46  49  54  55  56  56  54  54  51  50  44  40 \n 38  36  35  36  35  33  32  32  31  32  32  30  31  30  32  31 \n 31  30  29  29  31  30  29  29  27  28  29  30  31  31  29  30 \n 32  30  31  30  31  30  29  29  31  30  31  31  31  32  31  33 \n 32  33  34  35  34  35  37  37  37  37  38  40  38  38  38  39 \n 37  37  36  36  37  35  34  35  37  37  36  37  39  42  38  39 \n 38  41  36  35  34  32  33  33  32  31  30  29  28  28  30  29 \n 28  30  30  31  31  30  30  31  34  36  38  40  41  42  42  43 \n 43  45  46  45  45  48  50  50  48  48  49  46  45  46  50  50 \n 51  51  50  46  38  31  27  28  27  26  29  31  31  38  61  96 \n119 128 112  63  47  59 129 140 145 147 146 149 151 154 152 149 \n150 151 148 147 150 151 154 156 225 252 248 244 250 247 240 247 \n249 247 244 242 241 242 242 246 247 245 248 250 244 236 247 249 \n247 242 242 246 241 220 168 153 148 151 101  52  42  35  32  29 \n 31  34  31  26  21  19  18  18  21  21  21  21  24  29  31  35 \n 40  42  40  41  43  42  42  42  40  40  40  38  36  35  35  35 \n 34  33  34  34  36  38  39  40  41  41  43  41  40  39  39  41 \n 41  40  39  38  39  39  40  40  40  38  37  36  37  36  37  37 \n213 210 189 102 114  82  82 107 168 182 190 235 244 243 244 248 \n249 249 246 235 230 237 239 245 249 247 252 249 238 249 252 251 \n241 240 241 246 252 252 247 240 231 212 191 176 165 145 123 113 \n102 100  97  98  99 103 107 109 110 113 113 112 117 120 117 114 \n114 115 116 119 121 127 128 127 129 131 117 107 104  96  85  80 \n 75  72  67  64  63  61  61  62  64  63  59  61  70  81 104 122 \n142 157 182 200 217 227 247 214  36  45  41  39 120 239 236 247 \n248 244 235 208 147  95  73  80  92 110 141 144 123 109 104 113 \n129 125 123 135 196 231 242 241 241 245 248 241 246 246 249 249 \n249 243 241 249 245 245 245 249 240 245 243 240 248 244 236 237 \n241 241 239 243 242 245 246 247 236 238 237 234 243 236 134 125 \n147 148 138 137 186 195 111 117 128 138 164 204 177 172 175 164 \n182 194 199 150 153 139 152 130 129 164 205 126 121 164 222 249 \n250 249 215 161 101 101 140 132 108  91  66  55  49  44  45  43 \n 43  45  44  48  55  59  59  57  57  53  55  53  52  46  41  38 \n 35  33  34  35  33  30  30  31  30  30  28  30  28  28  30  30 \n 27  29  29  30  30  30  30  30  28  27  28  30  31  29  30  31 \n 30  31  31  30  30  31  31  32  31  30  30  31  29  31  31  30 \n 30  31  31  32  33  33  36  36  36  37  38  39  37  37  39  39 \n 38  38  37  38  39  38  37  37  38  37  36  37  38  40  41  39 \n 39  41  38  36  34  33  33  30  30  31  30  30  29  30  30  29 \n 29  30  30  30  29  32  33  33  35  36  39  41  42  42  43  42 \n 44  44  43  44  42  43  47  49  49  47  46  46  45  47  52  54 \n 55  55  53  54  45  35  31  31  29  31  37  41  50  67  99 113 \n110 105 130 121  43  53 105 139 144 145 146 146 146 145 148 148 \n148 151 151 150 150 151 156 179 249 250 250 247 243 247 237 241 \n242 243 248 250 242 243 243 243 240 236 244 246 246 242 239 241 \n248 244 242 236 207 176 156 156 153 151  78  50  39  37  35  32 \n 34  37  33  25  22  19  21  21  21  19  20  21  24  29  34  36 \n 41  42  42  39  39  43  42  40  40  39  38  37  36  34  35  34 \n 32  33  33  34  36  37  36  40  40  41  42  40  39  40  40  41 \n 39  40  40  39  37  39  39  39  39  40  39  38  40  39  37  38 \n108 102  81  61 111  94  80  89 150 178 186 217 246 247 249 248 \n250 244 239 237 230 233 238 239 249 249 252 252 248 250 252 247 \n246 245 251 249 252 252 248 245 242 237 233 236 241 230 221 209 \n200 186 159 143 129 112  96  95  95  98  99 103 110 112 114 114 \n116 118 118 115 116 117 114 118 122 125 122 123 128 129 131 128 \n125 122 111  98  89  80  74  71  70  67  63  65  64  64  65  63 \n 63  63  76  83  96 111 138 120  30  44  43  40 124 234 226 221 \n193 156 119  95  77  81  94 114 133 145 134 119 112 113 122 123 \n122 125 173 214 239 245 245 246 244 246 247 240 242 241 244 248 \n252 249 252 248 246 243 243 250 247 247 243 240 250 248 248 250 \n250 247 231 241 244 245 243 249 237 235 235 234 237 237 156 135 \n144 156 135 135 166 188  77 108 127 130 152 191 195 194 183 170 \n154 159 152 145 153 138 140 155 142 161 194 110 124 183 217 228 \n242 245 240 183 124  92  91 136 127 109  83  68  54  52  52  51 \n 55  56  55  55  59  61  63  62  60  56  54  54  49  44  39  37 \n 35  33  32  33  32  31  30  30  29  29  29  29  28  27  29  29 \n 28  29  28  28  30  30  30  29  27  27  28  30  29  28  29  30 \n 31  29  30  29  29  29  29  30  31  30  29  30  30  31  30  31 \n 31  31  31  32  31  31  35  35  35  36  36  38  39  39  41  40 \n 39  39  39  39  40  40  39  39  40  38  38  38  39  39  41  40 \n 40  39  38  37  35  34  33  31  31  31  29  30  31  30  29  30 \n 31  31  30  31  30  33  32  33  36  36  39  41  43  46  45  45 \n 44  42  42  42  41  44  47  47  49  47  44  47  48  49  54  56 \n 58  58  56  59  54  44  37  34  34  38  45  55  74  91 101 104 \n103 123 184 189  49  51  84 137 143 148 147 147 145 144 144 146 \n149 151 153 153 154 153 157 207 248 246 253 253 248 244 247 249 \n246 246 252 251 245 241 247 247 244 241 241 239 241 239 236 241 \n244 245 237 217 172 156 149 148 145 140  63  49  42  42  39  36 \n 41  43  36  28  21  19  22  21  20  19  21  22  25  31  35  38 \n 42  42  45  42  42  43  41  40  41  40  39  37  34  33  34  33 \n 33  34  35  36  37  37  39  42  42  39  40  40  41  40  39  39 \n 40  41  40  39  38  39  38  38  38  39  38  38  40  38  38  39 \n 77  75  55  45  84 116  80  84 117 170 195 194 236 241 250 244 \n248 249 238 239 246 248 246 247 250 252 251 247 243 243 242 244 \n243 242 247 253 252 252 245 241 246 250 238 242 236 240 238 243 \n239 240 243 238 238 225 208 212 193 169 146 132 118 112 107 101 \n101 101 104 107 109 111 110 114 118 118 116 120 117 118 117 118 \n123 126 134 137 138 136 127 118 114 111 103  97  87  81  75  73 \n 69  66  65  63  64  65  64  58  53  50  51  54  61  82  80  76 \n 72  76  87  95 114 135 153 143 127 120 119 122 127 127 118 121 \n153 197 242 245 249 240 241 243 245 242 245 241 238 243 245 245 \n253 251 244 243 246 245 246 248 247 245 247 246 247 254 254 250 \n251 247 237 245 242 242 248 250 245 237 234 237 227 230 173 125 \n149 161 131 130 152 186  81  91 137 128 136 159 219 245 240 242 \n240 243 209 161 174 175 135 141 112 167 180  98 134 203 201 163 \n177 199 235 189 156 113  65  69 113 125 108  92  74  66  66  70 \n 75  77  74  67  61  60  62  64  61  59  55  50  44  41  37  37 \n 34  33  33  32  30  32  31  31  30  30  31  29  28  28  29  29 \n 28  28  29  30  29  27  27  28  27  27  27  29  28  29  28  29 \n 29  29  30  29  28  28  28  29  31  29  29  30  31  31  31  31 \n 32  30  30  31  30  31  33  33  34  35  37  36  39  40  40  39 \n 41  41  41  40  43  41  40  41  40  38  38  40  40  38  39  40 \n 39  39  39  38  37  37  36  34  33  32  31  29  32  31  31  29 \n 30  29  29  30  31  33  32  34  35  35  35  37  43  44  43  45 \n 46  43  42  42  43  45  46  48  47  46  47  48  49  49  50  55 \n 56  58  60  65  65  59  54  49  45  46  53  74  83  80  80  98 \n141 179 206 237  93  52  65 126 143 146 146 144 141 142 141 144 \n147 150 153 155 155 161 171 233 244 249 250 244 244 246 242 249 \n249 248 252 250 244 243 243 239 241 244 249 243 241 239 243 246 \n248 244 222 180 150 152 149 149 149 128  55  48  53  59  55  51 \n 54  60  43  31  23  21  22  21  20  20  21  24  27  32  35  38 \n 41  41  44  43  43  40  39  40  40  39  38  36  34  33  34  34 \n 36  35  37  36  37  38  38  41  43  44  42  41  41  40  41  39 \n 41  40  39  40  40  40  40  41  38  39  38  37  38  40  40  38 \n 71  71  55  44  60 124  89  82 100 154 191 188 223 242 247 243 \n246 246 238 245 251 250 245 240 240 244 245 234 237 241 241 248 \n247 248 251 253 250 250 248 247 249 242 246 249 250 247 243 242 \n238 238 242 240 239 233 228 238 240 240 240 226 221 215 198 180 \n163 145 120 106 102  98  97 101 102 105 108 111 112 116 118 120 \n122 123 122 123 121 123 126 131 133 134 139 145 138 129 123 115 \n105  93  85  79  76  72  68  67  63  62  63  65  71  77  83  89 \n103 118 138 152 160 151 133 124 124 123 124 122 119 114 128 177 \n225 235 238 242 245 245 249 248 251 243 246 248 236 238 245 248 \n247 250 243 244 244 245 246 247 242 245 244 245 245 246 247 238 \n237 240 247 249 243 248 245 249 249 240 235 235 230 234 190 123 \n152 157 122 128 143 178  86  83 108 119 132 135 214 239 239 246 \n244 241 205 156 167 168 160 127 119 182 164  89 151 214 188 148 \n153 165 216 189 173 123  90  54  60  92 120 111  88  74  79  84 \n 86  86  83  77  71  62  60  64  64  59  53  47  41  39  35  36 \n 33  32  31  31  30  30  30  31  30  29  29  27  27  28  28  28 \n 28  30  29  29  29  28  29  29  28  27  27  27  28  29  29  29 \n 29  28  29  29  29  29  28  28  28  28  27  28  30  31  32  31 \n 33  32  30  30  30  31  32  32  34  34  36  37  37  37  39  38 \n 40  40  42  42  42  40  41  41  41  40  39  41  41  40  39  41 \n 38  38  39  38  38  38  37  35  34  33  32  31  33  31  31  32 \n 32  30  31  30  31  33  34  34  34  35  35  38  40  41  44  43 \n 44  43  41  41  43  44  46  46  46  47  47  49  49  51  51  55 \n 57  62  66  69  71  72  70  67  59  57  65  73  73  69  82 136 \n180 198 234 249 141  56  60 113 141 144 148 145 145 144 143 145 \n146 149 151 153 156 161 189 242 248 248 245 246 248 250 246 248 \n249 250 246 247 249 244 244 245 242 241 245 245 247 241 241 240 \n244 225 188 166 154 154 156 153 153 117  52  48  72  95  86  72 \n 62  70  47  34  26  24  22  21  21  21  22  25  28  32  37  38 \n 41  42  44  42  40  40  40  40  40  39  36  35  33  33  34  33 \n 35  36  37  37  37  37  37  42  41  42  41  42  41  40  41  40 \n 42  40  39  40  40  40  40  41  38  39  40  38  38  40  40  39 \n111  67  60  48  48  96 122  83  89 125 179 189 199 238 247 248 \n245 245 249 251 239 242 240 235 238 228 231 236 249 246 251 251 \n248 247 244 247 250 251 252 248 245 244 242 247 249 247 242 246 \n248 248 235 234 236 239 248 245 237 239 247 245 244 246 251 249 \n246 242 242 230 213 192 164 151 135 122 109 108 101 101 104 105 \n110 113 118 118 119 122 122 123 125 118 119 121 124 125 129 133 \n136 137 136 135 129 119 114 114 115 116 119 124 135 142 151 162 \n169 160 150 141 138 130 125 122 118 113 109 109 125 164 217 239 \n232 230 238 246 246 246 240 245 250 245 243 245 247 243 244 244 \n249 253 250 245 241 241 248 245 239 237 239 239 235 246 244 238 \n242 242 245 250 245 247 244 244 249 248 240 243 248 247 210 140 \n157 152 127 131 144 169  94  72  92 107 130 130 193 231 247 248 \n243 244 194 159 171 171 165 160 151 197 141  88 171 215 223 203 \n188 186 181 173 180 148 103  69  46  43  68  94  96  83  74  80 \n 87  87  87  83  79  71  59  61  60  56  48  43  39  36  35  35 \n 33  33  32  32  32  30  29  28  29  30  28  28  28  27  29  29 \n 27  28  26  26  26  28  29  29  27  28  28  26  27  26  28  26 \n 26  27  29  28  29  28  27  27  26  27  27  27  27  28  30  31 \n 29  31  29  29  29  27  29  30  31  32  33  35  35  36  38  39 \n 40  41  42  42  41  41  43  42  41  41  40  41  42  41  39  41 \n 40  40  39  38  38  39  38  37  36  34  33  32  32  31  30  31 \n 32  30  30  31  31  31  32  32  31  34  37  37  38  38  41  41 \n 39  41  42  42  42  43  42  44  45  48  49  48  48  50  54  57 \n 63  67  71  74  77  80  77  74  70  68  69  68  66  63 114 178 \n199 229 240 241 181  67  58  90 139 143 147 147 146 142 142 143 \n146 149 152 155 159 170 226 243 251 249 251 247 244 243 245 248 \n250 251 245 242 249 246 243 238 236 239 244 243 240 246 245 242 \n230 193 159 157 155 151 154 151 151  97  52  46 104 152 147 101 \n 77  74  54  42  34  27  22  23  22  22  23  26  32  34  38  40 \n 44  47  45  42  42  41  40  40  39  39  37  35  34  33  35  34 \n 35  35  34  34  36  38  39  42  43  42  42  40  40  40  40  41 \n 41  40  41  40  39  40  39  41  39  38  38  38  39  39  38  37 \n178  69  71  57  50  69 129  95  87 101 163 192 192 225 248 242 \n249 252 248 245 238 244 248 238 239 229 238 246 247 247 246 248 \n243 242 244 246 238 238 244 242 243 247 241 245 246 245 238 240 \n243 242 236 242 243 241 250 248 250 240 245 245 243 245 250 250 \n248 247 251 248 240 241 236 237 229 216 208 206 182 165 146 133 \n117 109 104 101 107 110 111 115 119 120 120 123 125 123 122 125 \n124 126 126 125 127 129 132 135 141 139 140 138 140 140 141 140 \n136 130 128 128 126 119 112 107 105 105 115 147 205 237 242 238 \n233 239 248 252 241 243 240 248 251 249 249 247 249 247 249 247 \n247 245 246 244 248 250 247 241 239 243 246 247 240 248 242 247 \n249 251 245 243 236 242 239 240 244 250 250 247 240 242 211 138 \n151 134 156 137 143 167 110  76  87 106 126 140 169 222 253 248 \n247 250 189 166 181 184 168 172 178 207 123  88 182 212 238 247 \n243 243 238 230 218 175 111  89  46  44  46  50  75  92  86  86 \n 93  90  84  82  83  77  61  60  60  52  45  41  37  36  36  37 \n 34  33  33  32  32  31  31  29  30  31  30  29  30  28  29  29 \n 28  27  29  28  27  27  29  28  27  28  28  28  28  27  28  26 \n 26  26  29  29  28  29  27  26  25  25  26  27  26  28  29  29 \n 27  28  29  30  30  30  32  31  30  33  33  34  33  35  38  40 \n 42  41  41  41  43  42  42  43  42  43  42  40  43  42  41  41 \n 39  39  41  40  40  39  36  37  36  34  34  31  30  31  31  30 \n 30  30  28  29  30  30  31  30  30  31  34  34  35  36  37  39 \n 40  41  41  42  41  41  41  43  42  45  45  48  47  51  55  58 \n 67  70  77  79  82  83  78  76  76  69  65  59  62  67 161 194 \n224 243 247 245 211  84  60  73 136 143 145 145 144 142 143 144 \n147 150 157 160 163 196 252 246 245 250 251 247 240 243 246 248 \n250 249 250 251 244 237 240 239 230 226 227 226 227 227 231 229 \n203 177 158 150 148 146 154 152 143  83  50  53 114 172 162 133 \n124 106  73  54  39  31  24  24  23  22  24  29  34  36  38  40 \n 45  49  47  44  41  41  41  39  37  36  35  35  33  33  34  35 \n 35  35  34  36  37  38  39  43  43  42  42  41  40  39  39  40 \n 40  40  40  40  40  40  41  40  38  38  39  40  38  38  40  38 \n202  84  77  72  63  60 116 119  82  89 134 179 196 202 242 240 \n245 245 247 240 236 242 244 239 246 245 250 242 239 242 248 246 \n242 241 241 244 248 248 246 246 251 249 246 243 249 243 244 248 \n248 249 242 248 249 252 253 249 246 243 243 243 242 250 246 240 \n243 247 251 250 249 250 248 243 241 236 241 252 248 247 250 247 \n238 227 204 186 170 153 139 124 110 109 105 108 107 112 116 119 \n120 121 121 122 123 123 127 131 132 136 142 144 141 135 125 118 \n112 107 105 103  99  94  95 103 124 161 216 242 243 239 242 245 \n241 241 244 247 243 247 242 239 245 249 240 245 240 237 244 247 \n238 233 239 241 242 250 241 248 248 252 248 248 242 240 239 241 \n243 242 242 236 230 243 249 246 246 247 250 247 248 247 209 140 \n141 127 146 137 141 164 130  79  85 104 118 153 154 207 247 246 \n242 249 179 162 154 156 154 164 178 212 108  89 194 210 235 242 \n243 245 244 242 242 200 132 119  54  47  44  42  47  64  99 108 \n103 102  97  89  81  79  64  59  55  50  44  40  37  37  36  35 \n 34  33  32  33  33  34  33  32  30  30  31  31  31  30  28  28 \n 28  30  30  29  28  26  27  28  28  30  29  28  27  29  29  28 \n 29  28  29  27  28  29  30  29  27  27  27  27  28  27  26  29 \n 27  27  27  28  30  29  29  29  29  30  31  33  33  34  34  36 \n 39  41  41  42  42  43  44  44  43  43  44  43  40  41  42  42 \n 42  40  40  42  39  37  34  34  34  34  33  32  31  32  31  29 \n 28  29  28  29  31  30  30  29  29  29  32  32  32  36  37  38 \n 40  39  38  39  40  39  38  40  39  42  44  46  47  48  50  57 \n 67  74  80  81  83  81  82  83  75  68  61  60  62 122 199 223 \n245 247 246 241 238 127  59  61 127 139 141 144 144 143 144 143 \n147 152 158 167 177 231 254 253 247 252 253 250 250 249 250 251 \n243 248 248 252 241 239 240 237 229 237 224 219 214 219 221 204 \n172 159 154 147 149 149 150 149 136  69  50  70 128 176 157 127 \n114 194 154  78  59  38  30  28  26  25  28  32  34  37  43  45 \n 50  50  48  44  40  41  39  38  37  37  35  33  33  33  33  34 \n 37  37  36  35  36  38  41  41  44  42  40  40  40  40  41  40 \n 40  39  40  41  42  41  42  41  39  38  40  39  40  40  38  37 \n202  93  89  87  81  73 103 136  90  87 110 166 195 203 230 240 \n242 245 248 244 237 246 245 238 245 248 242 237 236 240 245 239 \n244 234 237 239 250 252 243 242 244 246 247 245 247 246 246 252 \n245 238 239 242 243 249 251 249 247 253 244 241 244 248 244 249 \n251 247 245 248 244 249 244 237 248 241 246 249 247 247 248 246 \n246 251 249 245 245 241 234 219 206 193 172 159 135 122 113 109 \n106 105 104 107 110 110 116 121 131 141 154 151 139 127 121 112 \n105 103 103 102 101 104 120 150 208 241 253 253 248 242 241 250 \n246 245 246 246 245 245 242 244 238 241 241 240 240 241 248 245 \n248 242 242 240 248 244 237 237 251 249 235 238 249 244 222 218 \n238 235 232 231 232 239 242 244 249 243 243 245 242 234 204 137 \n144 123 142 137 145 166 146  79  89  91 104 148 168 203 242 245 \n243 251 172 146 141 144 136 148 167 210  98  93 193 210 232 247 \n239 244 238 241 248 219 151 120  81  53  44  41  43  52 146 187 \n127 114 117 105  92  86  76  64  54  48  44  42  38  38  36  35 \n 35  34  33  34  32  33  34  34  30  30  32  32  32  32  30  29 \n 28  31  29  29  29  27  28  29  32  31  29  29  29  30  28  28 \n 29  29  28  26  28  28  30  30  28  28  26  27  28  28  27  28 \n 27  27  26  26  28  27  27  29  29  29  29  30  31  33  34  35 \n 36  38  39  43  42  43  43  43  43  44  45  44  42  42  41  41 \n 40  41  40  41  39  37  36  35  33  32  31  31  32  30  31  31 \n 29  29  29  28  29  30  28  29  28  28  31  31  34  37  37  36 \n 38  39  39  39  39  40  39  39  40  42  43  43  44  45  48  52 \n 67  77  82  84  81  84  90  85  73  72  68  57  90 172 221 244 \n245 244 250 250 245 165  58  61 110 138 140 144 143 142 143 145 \n146 152 158 165 185 240 255 254 254 254 254 246 250 247 246 250 \n247 243 248 252 246 238 235 231 222 223 225 219 213 223 223 205 \n169 155 150 145 151 155 150 145 124  65  46  93 121 141 124 105 \n150 223 110  75  69  46  34  31  28  25  27  33  36  39  45  48 \n 52  53  48  45  41  41  38  39  39  37  35  33  33  32  33  34 \n 37  36  37  36  38  39  42  43  42  42  42  42  41  40  40  40 \n 40  40  41  41  42  40  42  41  41  40  41  40  39  39  37  38 \n224 153 132 134 131 150 174 139 120  84  93 138 191 201 211 240 \n246 246 244 239 239 242 248 243 250 251 246 244 241 242 242 240 \n239 237 230 233 239 249 244 248 250 249 249 240 238 240 244 248 \n244 244 242 243 242 245 249 248 247 243 242 244 245 246 247 246 \n245 243 241 247 250 250 247 248 250 248 251 252 248 241 237 250 \n247 245 242 242 247 249 238 237 240 243 248 249 243 237 232 222 \n205 186 170 165 167 177 193 175 135 139 156 143 131 132 136 134 \n131 132 132 140 165 190 218 232 243 249 254 252 249 247 246 243 \n244 249 249 249 245 237 237 241 243 249 246 249 245 245 249 247 \n238 236 239 241 239 235 239 239 249 240 220 223 250 245 233 232 \n248 245 250 246 236 241 237 243 240 237 239 238 235 237 209 141 \n142 125 147 138 151 172 177  97 103  89  95 115 187 192 236 246 \n242 244 163 141 142 151 124 121 165 202  88  88 192 212 218 243 \n243 246 246 245 249 243 185 124 106  65  44  41  40  50 109 224 \n231 177 115 111 113 110  96  86  66  56  51  46  42  41  36  35 \n 36  36  33  35  34  35  35  35  33  32  32  33  33  32  31  31 \n 31  30  30  31  30  30  28  29  31  30  29  30  29  29  29  29 \n 30  29  28  27  28  28  28  29  28  28  27  27  27  28  28  27 \n 28  28  26  27  27  28  28  29  28  28  29  30  30  31  33  33 \n 33  35  38  41  41  42  42  40  42  44  45  46  50  48  44  42 \n 41  42  42  42  41  38  36  35  34  33  32  33  34  32  31  29 \n 28  28  29  29  28  29  28  30  28  27  29  31  34  35  33  35 \n 37  37  36  38  38  38  37  39  42  43  43  44  42  44  50  55 \n 73  80  80  81  87  91  87  79  85  94  67  72 168 210 245 248 \n249 245 248 250 244 217  66  60  87 134 138 140 142 143 145 145 \n147 151 156 162 194 244 253 254 254 252 243 242 247 242 244 246 \n253 252 251 252 250 244 237 230 229 235 236 229 228 233 237 222 \n180 161 153 150 153 153 146 148 107  60  49 120 112 108 113 109 \n214 168  72  53  79  57  38  31  27  26  28  32  37  39  44  49 \n 53  53  49  46  41  41  40  39  36  36  35  35  36  35  34  35 \n 37  34  38  38  39  39  41  42  41  42  43  40  39  40  41  42 \n 41  39  40  41  39  42  43  41  40  40  41  40  40  41  39  38 \n232 232 226 233 227 240 242 178 136  95  92 115 180 198 203 235 \n251 239 241 247 244 245 243 240 251 246 245 244 243 248 248 245 \n236 232 235 239 243 249 248 244 244 245 250 247 243 241 246 246 \n243 237 240 238 234 236 237 240 250 248 246 245 242 239 241 236 \n244 240 240 241 246 249 249 247 244 247 251 252 251 245 244 248 \n242 239 242 242 249 247 240 239 236 244 249 250 246 247 248 251 \n250 242 232 241 246 247 235 235 222 229 238 217 188 176 176 182 \n195 207 214 222 228 232 238 239 241 249 252 254 251 252 253 249 \n247 245 241 240 240 238 237 240 244 243 238 240 234 245 246 244 \n238 243 231 238 249 247 245 246 250 243 213 222 250 248 247 241 \n250 249 240 230 231 233 234 234 229 234 231 228 226 232 211 146 \n138 122 151 138 156 171 208 126 105  93  94  99 180 183 231 244 \n245 245 159 142 144 157 121 118 163 201  86  86 180 209 210 238 \n245 248 250 248 251 251 208 152 111  84  51  45  40  44  80 187 \n246 238 188 141 116  98 104 103  95  79  58  53  49  46  42  39 \n 39  37  34  35  38  36  36  36  36  34  34  33  34  33  34  34 \n 32  31  31  32  32  32  31  31  31  32  30  29  29  28  28  29 \n 29  28  29  29  29  30  28  30  29  29  29  28  27  26  26  27 \n 28  28  27  26  27  29  29  28  28  29  29  29  29  29  30  31 \n 33  32  34  35  39  41  42  41  41  42  43  42  45  44  43  43 \n 43  42  43  43  42  42  38  36  34  33  33  33  32  31  31  30 \n 29  29  29  28  27  26  28  30  30  29  29  31  32  32  33  34 \n 37  36  34  36  37  36  36  39  42  41  42  42  41  45  52  63 \n 77  79  81  85  93  92  83  85 106  88  69 135 214 241 249 248 \n250 250 246 247 248 240  92  61  74 128 136 138 140 140 144 144 \n147 152 155 159 205 242 254 254 254 252 248 247 249 247 244 246 \n247 243 243 249 252 246 249 244 241 240 241 241 236 233 242 236 \n197 171 158 155 156 154 149 148 102  53  57 143 103 108 116 141 \n214 113  61  41  75  69  42  32  29  27  28  33  38  39  44  52 \n 56  54  50  45  41  42  40  38  36  36  35  35  36  35  34  34 \n 33  34  37  36  38  41  42  42  42  42  41  40  40  41  39  40 \n 40  39  41  43  40  41  42  41  42  43  42  40  40  41  39  38 \n220 242 240 247 246 250 242 238 154 119  90  95 158 186 196 209 \n252 248 246 244 244 242 238 239 247 247 246 249 247 245 246 247 \n246 240 247 241 244 246 238 242 248 248 248 246 244 248 243 234 \n232 244 248 240 246 245 239 243 241 242 244 244 242 238 239 232 \n230 230 239 247 251 246 249 251 252 254 250 248 252 247 247 243 \n244 244 245 243 248 247 247 247 251 249 247 245 249 245 242 248 \n251 247 238 244 241 237 235 233 245 252 250 242 241 239 236 237 \n241 249 245 245 244 237 230 241 250 247 248 253 252 248 238 237 \n238 247 249 250 248 247 248 245 242 240 247 247 242 240 249 240 \n234 236 240 243 248 248 250 251 247 248 236 236 241 252 245 245 \n243 244 242 244 236 228 237 239 238 237 233 228 229 228 205 144 \n133 126 159 137 159 180 221 173 113 100  92  94 161 179 220 243 \n249 242 156 137 142 147 120 139 175 205  85  89 159 210 208 233 \n245 246 248 243 245 250 235 186 118 121  68  48  41  42  59 125 \n245 245 243 213 150 138 123 107  91  89  81  75  68  63  56  49 \n 46  42  41  39  40  38  38  37  36  36  35  34  35  35  34  35 \n 34  34  33  34  34  34  33  33  32  33  32  32  31  31  31  30 \n 30  30  29  30  31  29  28  30  28  29  29  29  28  28  28  28 \n 29  27  28  27  26  26  26  26  26  29  29  28  29  29  30  31 \n 30  32  33  34  35  37  39  41  40  42  42  43  44  44  43  44 \n 44  46  45  44  44  43  41  39  36  33  33  34  32  31  30  30 \n 30  30  29  28  27  27  27  27  29  29  28  30  31  31  31  30 \n 33  33  34  34  33  33  35  37  39  39  39  39  44  48  57  69 \n 76  77  87  92  89  84  93 108  88  70 139 211 247 252 243 249 \n255 253 248 242 253 250 145  62  69 112 134 134 137 141 142 144 \n145 150 155 161 196 230 253 255 254 250 247 242 248 250 249 251 \n252 249 247 246 250 248 247 249 243 242 241 241 237 238 240 239 \n227 200 176 165 160 157 149 145  84  52  77 158  98 113 128 195 \n146  72  52  42  58  82  48  33  29  28  31  35  40  40  46  52 \n 58  57  50  44  42  40  40  38  36  37  34  33  34  33  33  35 \n 34  35  38  39  39  38  41  42  40  40  40  40  41  42  40  40 \n 41  41  40  41  39  39  40  39  42  43  42  40  40  41  38  37 \n221 234 249 250 243 251 252 251 190 143  93  94 132 176 197 198 \n241 250 252 241 237 239 238 239 241 245 244 243 245 242 245 247 \n243 248 249 241 245 238 238 244 251 246 247 240 242 245 248 242 \n242 249 249 242 248 249 239 244 247 246 241 240 242 240 244 229 \n226 230 237 243 249 249 252 254 251 250 247 247 246 244 246 242 \n241 246 243 244 250 252 252 251 251 246 242 241 249 241 242 250 \n248 248 245 244 239 235 241 238 240 247 247 249 245 242 237 234 \n231 239 244 242 238 239 236 228 246 248 241 238 238 233 239 243 \n248 248 241 246 252 250 246 246 250 246 245 246 239 240 249 238 \n238 247 249 244 246 248 250 250 244 244 244 244 235 247 245 243 \n244 248 241 240 248 241 242 244 246 242 239 237 234 234 202 147 \n123 131 157 138 161 181 223 206 121 116  90  96 142 186 208 236 \n251 233 155 127 143 148 126 150 176 204  88  91 139 205 211 225 \n246 249 246 243 241 247 245 202 140 123 113  53  45  44  51  83 \n213 244 244 249 213 129  82 111 130  72  77  81  78  82  84  72 \n 57  53  50  47  45  45  43  40  39  39  38  37  38  38  37  36 \n 36  35  35  34  34  36  33  34  34  33  32  33  32  32  32  33 \n 32  31  30  31  33  31  30  29  29  30  31  31  30  30  29  28 \n 28  27  27  26  26  26  26  27  26  28  29  27  27  27  28  28 \n 29  30  30  31  32  33  36  38  39  41  44  45  46  46  46  47 \n 48  48  47  46  45  45  44  41  39  37  35  35  33  32  31  32 \n 31  30  28  29  29  28  29  28  29  30  29  30  32  31  32  31 \n 33  33  32  33  34  34  35  37  37  38  40  42  46  52  62  69 \n 76  86  88  82  83  92 106  98  71 117 208 240 245 244 239 247 \n250 244 248 241 246 247 192  73  62  95 131 131 135 140 142 142 \n144 150 155 152 185 210 247 254 254 251 243 249 246 243 243 247 \n254 251 248 241 245 242 245 244 239 239 237 235 238 240 242 243 \n239 234 205 179 169 164 156 147  69  47 105 151 105 120 153 203 \n 90  58  51  51  60  89  56  37  33  29  32  37  41  41  48  56 \n 60  58  51  45  41  40  40  38  36  36  35  33  34  34  35  35 \n 35  35  36  37  38  40  41  43  41  42  40  42  42  41  40  40 \n 41  41  40  40  39  40  41  42  41  43  42  39  40  40  39  37 \n211 223 248 252 245 250 244 245 225 168 117  89 112 156 192 200 \n211 247 250 245 241 251 241 241 246 242 233 242 248 252 249 245 \n245 248 249 244 252 245 240 239 246 244 244 246 242 241 248 248 \n246 245 246 245 249 252 246 242 243 239 238 229 226 232 245 231 \n225 230 239 241 239 239 244 248 248 241 243 245 247 248 250 246 \n247 250 244 245 248 249 247 244 249 242 242 243 250 252 251 247 \n242 242 238 247 240 237 252 251 249 251 243 245 251 249 247 241 \n242 241 236 240 226 231 227 224 239 248 245 242 239 238 245 238 \n244 250 244 233 246 248 245 250 245 241 247 248 240 245 250 246 \n251 252 247 237 240 247 247 244 242 245 251 246 247 247 249 249 \n246 247 241 245 250 252 246 244 246 249 241 242 237 246 212 144 \n120 130 150 135 161 186 228 242 144 128  95  94 117 197 184 222 \n251 227 149 124 142 156 120 147 185 202  95  92 115 192 215 215 \n234 241 243 242 238 244 250 231 158 108 142  98  58  48  46  64 \n157 246 248 244 243 229 139  63  56  51  40  47  62  74  83  88 \n 84  74  67  67  64  61  54  53  46  47  46  43  42  46  45  42 \n 39  38  38  39  40  37  35  37  37  36  35  35  35  34  34  33 \n 34  33  34  34  33  34  31  30  32  31  31  31  29  31  29  29 \n 29  29  29  27  27  27  25  26  27  27  28  27  28  27  27  28 \n 29  29  28  30  30  30  32  31  35  34  40  43  46  45  48  48 \n 47  50  49  49  48  47  47  46  43  41  38  37  35  33  34  31 \n 30  28  28  29  29  30  29  29  32  32  32  32  32  31  32  32 \n 33  32  32  34  35  35  35  35  35  38  40  43  49  58  71  79 \n 84  85  80  84  94 102  91  78 136 218 244 237 243 247 248 251 \n244 245 248 241 221 205 162  81  56  79 124 133 133 136 138 141 \n143 148 155 133 165 180 220 251 254 254 236 246 246 241 246 252 \n247 241 246 250 249 246 241 236 236 240 243 240 239 240 239 239 \n240 246 231 210 188 173 155 142  62  42 151 137 116 124 196 140 \n 58  50  52  70 115 131  62  38  33  33  33  40  42  42  49  56 \n 58  55  48  43  41  41  37  37  36  35  34  33  34  35  35  35 \n 34  36  36  35  38  40  41  41  41  42  40  41  42  40  41  40 \n 41  41  39  40  39  39  40  41  41  42  42  39  38  38  37  37 \n190 220 234 247 245 248 243 241 238 193 141  95  98 138 190 202 \n190 237 246 243 243 244 242 244 246 243 238 244 245 241 244 246 \n247 245 246 249 246 239 242 241 242 247 249 249 248 244 245 248 \n241 244 249 244 249 247 243 242 246 238 243 238 226 229 240 244 \n233 227 240 248 244 230 233 236 244 242 239 245 249 241 239 250 \n243 245 245 250 246 239 240 238 245 248 251 251 246 245 243 235 \n232 243 244 246 244 239 248 252 248 253 246 243 243 240 248 250 \n253 248 236 236 228 230 234 232 237 245 247 248 246 242 247 245 \n238 240 247 242 248 247 246 246 250 251 248 249 243 246 251 254 \n252 251 249 247 249 250 251 242 242 247 250 244 253 249 246 246 \n239 241 245 243 244 251 250 248 249 245 248 245 242 249 202 145 \n118 133 147 133 164 191 234 251 167 133 108  91 106 187 181 213 \n241 219 147 124 140 152 114 146 189 203 109  93 104 179 216 214 \n231 245 237 239 243 245 239 240 187 124 111 121  85  53  49  57 \n112 219 239 240 238 242 236 151  50  47  31  32  36  58 112  89 \n 78  81  76  78  87  93  85  76  67  60  56  55  51  49  49  46 \n 43  44  42  44  43  40  39  39  37  36  38  38  36  36  37  37 \n 36  35  35  34  34  34  32  33  32  31  31  31  30  31  31  31 \n 32  31  30  30  30  29  26  27  28  27  30  29  28  28  28  28 \n 29  30  31  30  29  31  32  30  33  33  37  38  42  43  46  47 \n 48  50  50  51  49  50  51  49  48  45  41  37  37  36  34  34 \n 33  30  28  29  30  31  30  32  32  31  31  32  34  32  31  30 \n 32  33  33  34  34  36  36  36  37  39  44  46  54  66  83  83 \n 80  81  81  90 105  92  80 129 223 249 244 241 235 237 246 250 \n245 232 187 145 104  83  67  74  58  71 110 131 134 135 136 139 \n142 148 172 139 142 164 199 246 254 254 237 244 248 247 246 247 \n246 250 244 242 247 247 245 245 244 245 238 242 245 244 239 241 \n241 243 242 242 226 208 181 132  56  47 180 137 127 145 189  84 \n 53  51  78 120 172 180  71  42  36  35  36  42  43  45  53  56 \n 58  54  47  42  40  41  38  37  35  35  34  34  34  35  35  34 \n 34  35  37  36  38  40  41  41  41  42  41  42  41  41  41  40 \n 41  39  38  38  40  39  40  41  41  42  40  38  38  39  38  37 \n189 210 225 238 246 248 250 248 244 230 157 114  94 107 176 198 \n187 212 247 240 244 244 238 241 246 244 241 241 243 244 244 245 \n243 244 250 249 245 238 240 246 245 240 242 247 250 247 243 246 \n248 251 247 245 247 244 237 239 238 236 246 240 230 231 237 244 \n246 242 239 249 244 238 243 237 236 240 246 241 245 238 234 238 \n242 245 243 247 247 247 244 242 243 242 240 233 224 236 245 245 \n235 241 251 248 245 245 250 251 251 252 246 243 245 244 244 249 \n242 237 242 245 247 245 245 249 247 240 228 217 226 244 244 252 \n248 241 241 244 242 245 250 247 249 250 248 248 244 244 243 251 \n249 243 241 239 249 247 242 244 243 241 242 246 248 246 244 247 \n250 250 250 245 244 242 241 241 248 251 241 236 244 248 202 143 \n116 133 146 136 167 195 237 248 196 137 123  91  98 149 189 205 \n237 211 145 125 140 139 112 140 199 204 140  90 100 148 214 217 \n222 245 243 242 243 241 239 245 226 168 124 110 135  94  59  53 \n 70 149 240 245 242 249 252 205  46  46  31  32  39  50  85 129 \n135 120 108 101  89  89 100 109 107 100  86  81  77  71  65  61 \n 59  57  56  54  51  50  47  45  45  44  41  42  42  40  40  41 \n 38  37  36  36  37  36  36  36  35  33  34  34  33  34  32  32 \n 33  32  33  32  32  31  31  30  30  29  30  30  28  29  30  29 \n 30  28  29  29  31  32  31  31  30  31  32  33  35  38  40  43 \n 45  48  48  51  51  50  53  52  50  51  48  44  41  40  34  36 \n 32  32  31  31  31  32  30  33  33  33  32  31  30  31  30  30 \n 32  32  32  32  35  36  37  39  41  43  49  55  62  75  86  91 \n 97  97  97 106  84  84 161 233 248 240 238 246 237 236 228 199 \n135  86  65  61  54  49  48  55  84  63  97 122 132 133 136 137 \n140 150 234 232 201 176 175 230 253 254 244 233 249 247 241 239 \n241 245 248 249 251 251 249 246 245 242 241 242 245 246 245 242 \n241 242 242 247 246 246 229 125  53  72 190 141 138 184 107  60 \n 56  86 141 179 184 162 102  51  41  37  39  45  48  49  54  54 \n 54  49  44  41  40  39  36  37  33  33  32  34  35  33  34  33 \n 35  35  36  37  41  43  43  42  42  41  40  42  41  42  40  39 \n 42  41  41  40  39  40  40  40  40  41  40  38  39  39  38  37 \n204 194 222 232 242 241 243 246 246 238 186 135  93  98 153 191 \n194 195 246 245 239 238 243 247 245 247 250 250 241 247 247 247 \n246 252 248 245 241 239 243 243 247 245 235 240 245 248 246 246 \n242 247 241 246 250 247 240 245 249 245 244 233 240 243 236 238 \n238 242 248 242 236 237 239 232 239 241 246 242 240 233 228 233 \n237 240 250 250 237 232 237 244 250 248 241 227 229 245 254 249 \n240 244 253 251 251 249 253 253 251 251 247 243 248 247 241 244 \n242 247 244 242 240 231 236 243 237 236 243 236 234 242 248 251 \n248 242 244 246 242 246 246 242 249 252 249 248 248 252 249 253 \n251 251 247 240 248 247 242 245 249 241 250 250 250 251 251 251 \n253 250 248 251 249 245 245 241 247 248 241 236 241 247 196 143 \n119 135 149 138 169 200 236 242 219 146 130  98  99 118 192 188 \n237 208 144 127 143 138 110 144 199 200 162  96 100 121 209 220 \n219 245 248 250 250 243 235 246 243 192 142 118 111 136 100  69 \n 63  75 180 242 252 250 245 186  46  51  38  38  58 123 157 169 \n191 203 203 191 151 124 104  99  97  95  94  92  95  95  95  90 \n 82  80  75  72  67  63  59  57  55  53  51  50  48  46  45  45 \n 40  39  40  40  39  40  39  37  38  36  34  36  35  37  34  34 \n 34  35  33  32  33  32  34  31  32  30  31  31  30  30  29  29 \n 30  30  31  31  33  32  31  33  30  30  31  32  33  35  35  37 \n 40  42  47  49  51  52  52  53  54  53  54  52  48  43  37  37 \n 34  33  34  32  32  31  31  33  32  35  33  33  31  31  33  32 \n 32  33  33  33  35  38  39  42  47  50  58  66  76  91 108 116 \n112 110 101  81  91 165 238 252 252 244 242 248 233 193 118  84 \n 63  57  52  51  48  47  47  50  92  78  86 114 130 134 138 137 \n143 167 226 229 225 220 189 216 253 254 249 227 252 252 247 238 \n242 240 244 247 250 253 243 242 245 246 247 246 245 246 242 240 \n240 242 242 243 243 248 223 110  55 105 183 148 158 157  65  65 \n 92 138 182 183 162 161 135  74  44  42  41  46  51  52  56  56 \n 53  46  41  41  40  41  36  38  34  34  34  34  33  32  33  34 \n 34  35  37  38  39  42  41  42  42  41  41  43  42  42  41  40 \n 43  40  41  39  39  39  39  40  39  39  41  39  39  38  37  36 \n210 188 213 223 242 245 244 243 250 250 229 159 110  93 119 177 \n197 187 224 248 245 247 245 248 248 242 240 243 247 248 246 243 \n249 253 245 240 244 240 241 236 247 245 249 248 244 246 249 252 \n247 245 245 245 252 248 237 236 239 239 238 245 242 241 239 237 \n236 243 244 247 246 241 245 231 235 241 247 246 247 240 236 238 \n243 246 252 249 240 248 249 242 235 238 244 245 245 242 249 243 \n243 246 251 252 248 249 250 248 250 249 248 244 246 240 241 246 \n244 241 244 247 235 224 220 236 239 236 239 243 250 248 247 244 \n248 247 247 241 241 244 247 249 248 249 249 250 246 248 248 249 \n248 245 243 245 245 248 240 240 243 242 246 250 249 249 247 246 \n250 249 241 242 247 244 243 241 245 247 248 247 239 240 182 140 \n117 138 150 138 171 201 243 251 235 166 132 117 109  99 192 180 \n232 198 139 124 141 137 108 143 201 195 187 115  96 108 160 202 \n219 237 250 246 242 242 234 233 244 233 166 140 146 169 161 140 \n103  72  65 120 200 227 233 121  49  49  40  36 144 241 245 251 \n251 249 249 240 235 237 226 203 165 138 119 107  96  90  89  87 \n 94  99 101  95  89  85  80  78  79  72  67  65  63  62  60  56 \n 51  51  50  48  48  46  45  43  41  40  39  39  37  38  36  35 \n 37  36  36  34  34  33  34  34  35  34  35  34  34  33  33  33 \n 31  32  31  30  31  32  32  32  29  30  32  31  33  35  34  37 \n 38  39  42  45  49  52  55  56  57  57  56  56  55  52  43  41 \n 39  37  34  34  34  33  34  32  32  32  32  32  32  34  33  34 \n 32  33  35  37  39  41  46  50  56  65  80  93 118 136 135 126 \n111  94  83 117 208 245 247 248 252 243 225 180  96  64  55  51 \n 50  48  47  48  48  54  63  75  89 104  90  99 124 133 141 143 \n150 134 152 175 184 191 199 206 245 253 254 230 238 251 252 247 \n244 241 240 239 249 252 248 238 236 240 244 246 245 246 247 239 \n240 242 242 241 245 247 201  94  53 140 175 161 147  86  69  90 \n161 182 176 156 159 160 158 116  58  48  45  46  51  58  59  60 \n 54  49  41  41  41  40  38  36  32  31  33  33  33  33  33  34 \n 35  36  37  38  40  40  42  43  42  43  43  41  40  40  40  40 \n 41  40  42  41  42  41  40  40  40  40  40  39  39  38  37  36 \n191 203 196 221 234 243 244 243 247 249 246 189 127  95 107 153 \n191 190 205 244 244 251 247 250 248 239 242 243 244 245 248 247 \n251 251 245 242 241 242 240 241 253 252 244 243 241 248 249 249 \n249 244 240 244 249 240 242 244 240 237 239 242 244 244 248 240 \n238 242 240 246 252 249 251 246 240 237 241 243 247 239 243 250 \n245 251 249 250 244 247 244 232 226 238 239 244 239 241 247 247 \n240 240 249 248 243 242 244 243 250 248 243 238 244 240 243 245 \n248 243 240 236 227 220 220 232 245 248 247 250 250 246 247 243 \n247 245 248 247 246 244 244 243 243 247 250 249 245 244 247 246 \n242 242 245 249 250 245 241 242 249 245 244 247 248 247 241 243 \n252 248 243 240 244 241 242 236 237 240 246 241 240 241 183 139 \n117 140 158 138 173 206 246 253 249 201 127 132 133 104 169 182 \n221 192 141 127 141 135 114 154 205 217 190 143  93 106 126 164 \n220 229 252 250 248 245 242 242 250 249 209 160 147 180 197 185 \n161 141  97  69  84 105 122  67  51  44  42  38 191 248 248 252 \n250 246 246 242 240 245 248 249 245 234 222 205 176 156 124 105 \n 92  88  85  89  88  86  85  88  96  94  92  92  88  84  84  77 \n 69  68  63  61  58  56  54  51  49  47  45  44  43  41  42  40 \n 40  40  37  37  36  35  36  35  36  35  35  35  35  35  34  34 \n 32  32  32  31  32  34  33  32  31  33  34  33  34  35  35  37 \n 38  38  41  44  46  51  56  59  59  59  59  60  58  56  52  46 \n 42  39  37  37  35  36  35  33  33  32  33  33  33  33  33  33 \n 34  37  39  40  45  49  56  65  81  94 110 121 155 201 156 118 \n 86  88 157 219 240 241 241 243 245 202 118  76  57  52  50  49 \n 47  48  48  51  60  69  83 103 122 143 144 117 106 120 143 150 \n158 151 147 146 147 155 171 182 218 249 254 237 231 250 247 245 \n248 241 239 239 244 251 248 243 245 242 244 246 245 241 246 246 \n243 245 246 247 246 248 160  78  55 154 176 178 106  68  94 144 \n194 203 183 179 171 162 158 137  90  52  47  46  55  63  64  61 \n 56  50  42  40  39  39  38  38  33  31  32  34  33  33  34  34 \n 36  37  38  37  40  41  41  42  43  43  43  40  40  40  39  38 \n 40  40  41  42  41  42  40  41  40  40  40  40  40  38  36  35 \n151 206 191 210 223 240 252 247 241 241 242 229 150 114  95 126 \n182 195 200 228 240 239 239 247 243 244 236 242 249 240 246 248 \n248 247 245 246 240 238 239 250 251 247 245 244 243 241 242 248 \n245 236 239 248 245 239 244 251 252 245 239 242 244 241 246 249 \n250 253 251 248 252 250 250 251 246 247 248 245 249 245 250 250 \n245 245 249 248 244 247 248 237 240 250 245 243 244 251 252 250 \n247 247 247 245 242 244 247 239 247 245 245 240 249 240 245 237 \n248 243 243 232 234 233 234 243 248 251 252 253 251 249 250 244 \n244 247 248 244 243 240 245 242 241 245 252 253 249 247 250 251 \n245 243 244 247 246 241 251 247 243 247 246 246 248 248 250 247 \n243 249 248 244 241 237 230 228 236 249 244 243 244 246 177 137 \n117 145 161 143 176 207 245 249 246 235 144 136 127 105 132 191 \n192 186 136 125 151 134 114 156 209 239 194 176  91  99 114 130 \n213 219 239 242 250 250 246 238 245 249 247 209 147 141 155 174 \n193 185 183 160  99  79  65  57  50  48  44  40 120 166 184 207 \n221 228 242 242 242 247 251 245 246 244 241 242 245 249 242 232 \n214 197 172 150 129 114 101  91  90  89  89  88  91  94  99 102 \n100  94  86  84  82  78  74  70  64  63  60  58  54  52  49  49 \n 46  44  43  42  41  40  39  39  38  38  38  38  37  35  36  37 \n 35  35  35  34  34  34  33  34  35  35  34  35  35  35  38  38 \n 37  37  39  40  42  45  52  57  61  63  62  62  62  61  59  55 \n 48  41  38  39  38  36  34  34  36  35  33  32  34  35  35  37 \n 39  41  44  48  54  62  80  93 106 113 121 122 149 141  97  98 \n139 201 240 239 243 240 237 208 121  69  56  54  49  49  46  45 \n 48  55  61  72  96 122 148 159 165 163 159 161 146 130 123 137 \n165 172 172 167 162 149 146 154 159 209 248 239 216 245 245 243 \n245 243 248 250 246 247 248 241 247 244 238 243 243 241 244 243 \n247 244 246 245 244 196 108  67  62 142 191 183  79  85 147 182 \n223 235 237 230 204 185 176 159 134  83  52  54  64  70  70  63 \n 57  51  44  41  38  38  37  36  33  33  32  33  33  34  34  35 \n 36  36  37  39  40  43  42  43  43  42  42  40  40  40  39  39 \n 38  40  41  42  41  40  39  41  40  39  40  40  38  37  35  37 \n132 195 197 197 221 235 252 247 239 240 245 243 182 129  96 107 \n171 191 202 211 241 245 248 251 247 247 245 241 245 247 250 248 \n247 245 240 245 244 241 247 245 248 249 250 252 248 244 247 246 \n247 246 248 250 248 247 244 243 251 245 243 243 244 246 244 241 \n249 253 250 250 253 251 245 251 248 243 249 246 249 248 246 243 \n242 249 252 243 244 249 250 245 247 248 244 240 248 253 253 249 \n245 247 248 249 243 236 244 239 240 244 246 248 248 244 242 236 \n246 250 249 242 246 240 234 234 243 246 248 246 247 249 251 250 \n244 239 243 250 249 247 251 249 246 250 252 252 251 244 239 245 \n248 249 237 244 242 245 251 248 244 247 246 244 247 251 249 247 \n246 249 247 234 231 232 243 245 245 251 251 248 248 250 178 136 \n118 151 161 141 178 211 243 248 247 247 168 133 111 101 116 194 \n175 177 133 128 155 132 119 161 211 243 205 198  96  99 110 122 \n200 218 230 243 253 252 247 242 242 245 247 240 180 129 146 148 \n154 177 194 201 182 154 106  78  59  59  56  51  54  63  74  83 \n100 113 138 166 190 214 229 239 247 241 235 240 243 242 238 239 \n245 242 242 239 230 221 195 179 176 164 148 132 112 101  91  90 \n 90  88  88  86  83  79  78  77  72  75  78  79  81  76  69  63 \n 56  55  53  52  49  46  44  43  43  44  43  42  40  37  39  39 \n 39  37  37  37  36  36  36  37  35  36  36  37  37  36  38  38 \n 37  37  38  39  41  43  47  52  58  60  60  61  62  63  62  61 \n 55  48  41  40  41  40  39  37  37  37  35  35  38  39  40  41 \n 46  47  52  58  67  80  91  99 106 106 106 102  90  87 128 188 \n234 238 241 243 248 237 158  94  58  55  51  49  48  49  49  54 \n 60  67  91 120 153 165 158 159 155 148 144 142 143 132 113 112 \n117 126 150 172 175 165 170 167 156 192 228 231 206 235 247 248 \n244 241 246 248 249 251 247 241 246 245 237 239 242 241 244 240 \n244 243 245 250 223 146 104  62  76 131 149 131  92 131 172 206 \n235 240 234 233 232 226 220 195 131 125  64  67  88  86  76  68 \n 56  50  45  42  39  39  38  35  33  34  33  33  33  34  33  33 \n 34  35  37  40  41  43  43  44  43  43  43  41  40  41  40  39 \n 39  40  40  41  41  40  39  40  41  40  40  40  37  37  36  36 \n144 164 205 185 217 226 244 247 244 238 245 243 213 156 108  97 \n142 179 197 199 229 246 246 247 248 248 251 242 238 248 249 243 \n241 246 246 250 246 243 245 245 250 249 243 245 252 249 246 247 \n248 249 251 247 246 243 241 240 240 239 233 237 241 241 236 244 \n247 250 252 249 242 238 244 251 250 239 243 242 249 247 246 250 \n247 239 240 227 223 231 245 250 246 246 244 244 246 251 244 247 \n248 251 246 244 243 237 243 244 246 248 243 247 244 245 249 246 \n250 246 244 241 249 244 239 243 249 244 236 237 244 244 250 247 \n239 234 244 249 246 246 248 246 247 247 249 248 248 240 245 250 \n247 244 240 241 246 239 247 247 243 244 245 248 247 246 245 235 \n236 249 235 220 225 242 243 243 249 251 253 250 245 251 171 130 \n121 160 154 142 180 215 250 248 248 249 204 138 116  97 104 168 \n186 171 130 133 162 126 130 167 217 242 226 206 124  96 109 123 \n174 220 225 250 250 252 244 239 237 240 236 242 233 179 120 137 \n152 152 147 162 182 192 199 192 169 137 108  93  76  69  61  61 \n 62  65  64  68  73  79  86 102 125 139 159 182 200 212 225 233 \n242 242 243 247 239 228 209 224 252 248 247 247 240 230 211 195 \n175 155 135 127 108 102  91  84  75  73  70  73  81  89 100 106 \n103  93  86  78  71  67  62  59  53  52  50  49  47  47  45  44 \n 45  43  40  39  40  41  39  38  38  39  40  39  38  39  38  38 \n 38  39  39  40  42  43  45  47  54  57  58  58  59  61  58  58 \n 58  55  52  50  46  45  44  41  41  41  42  44  44  46  50  54 \n 60  65  73  77  82  87  90  93  86  81  83  95 135 185 238 246 \n250 250 245 238 175 103  61  56  53  50  49  47  47  53  64  73 \n 95 121 153 165 170 168 178 195 215 226 231 231 228 217 190 162 \n129 113 106 114 149 173 179 174 176 232 232 213 207 228 242 243 \n246 241 249 251 247 248 246 247 246 247 246 246 244 238 244 242 \n247 247 244 245 169 142  97  59  90 143 151 125 146 155 156 160 \n156 165 197 216 231 242 250 246 141 131  94 100 108  98  82  70 \n 58  50  44  40  39  40  37  35  33  34  34  33  34  34  33  33 \n 36  36  36  38  41  44  42  43  43  41  41  41  41  41  41  40 \n 39  39  41  41  42  42  39  37  40  39  39  39  37  35  35  36 \n163 144 204 197 199 222 235 248 242 238 240 241 234 180 131 100 \n120 168 191 197 212 245 244 248 245 248 249 246 250 248 246 244 \n242 243 248 250 241 244 245 249 249 248 241 246 251 244 246 244 \n246 246 249 248 247 245 241 241 241 239 237 240 239 248 241 242 \n245 245 253 248 245 246 248 248 247 243 248 242 246 253 246 245 \n237 231 228 229 240 243 246 242 236 237 240 249 247 243 240 245 \n246 249 243 240 241 245 250 247 242 243 239 242 240 245 252 251 \n247 244 247 243 247 248 241 248 242 243 241 237 246 242 244 247 \n246 239 246 244 240 240 248 243 244 250 251 244 243 244 248 250 \n243 233 230 233 237 236 244 247 238 232 246 253 248 248 246 233 \n232 246 242 234 242 249 250 247 249 251 254 252 252 247 165 131 \n120 159 145 144 182 213 249 247 249 244 226 148 123  96  97 137 \n205 170 128 135 169 118 137 173 222 250 240 203 151  93 105 121 \n164 216 221 246 251 246 243 246 246 237 238 238 247 234 166 117 \n121 138 148 147 152 158 167 183 199 203 198 187 172 155 135 117 \n 91  76  66  63  68  72  75  72  68  69  72  81  87  98 113 132 \n161 184 216 231 214 200 219 243 254 251 250 252 253 254 253 252 \n245 238 238 233 213 205 179 153 116 100  86  81  79  76  80  85 \n 89  94  95  98  97  95  90  88  78  72  65  63  57  56  54  53 \n 51  48  47  43  46  45  44  42  42  41  42  41  42  42  41  41 \n 42  42  41  41  42  46  46  47  51  56  65  69  71  71  71  69 \n 66  64  63  61  59  55  53  54  51  51  49  51  53  58  63  70 \n 76  79  80  79  78  80  77  75  82 102 151 194 227 236 245 242 \n243 245 204 133  74  59  54  51  50  51  50  51  58  69  87 113 \n146 164 168 167 195 223 236 234 243 247 237 234 241 244 235 224 \n205 168 119 104 109 131 177 191 172 197 214 210 226 225 240 242 \n242 239 244 250 250 243 246 248 248 245 243 248 242 242 245 248 \n248 247 250 225 150 140  87  62  95 121 138 150 166 179 192 167 \n 90  72  80 101 158 218 249 249 180 113 117  99 121 105  86  74 \n 61  52  46  43  38  39  37  36  35  35  35  35  34  34  34  34 \n 35  36  35  39  41  45  41  42  42  43  44  43  41  41  40  42 \n 40  40  42  41  41  41  39  38  38  38  39  37  36  35  33  35 \n176 152 181 209 188 215 223 244 238 242 248 251 246 221 145 112 \n102 151 181 199 199 236 244 237 233 236 237 240 240 239 249 251 \n243 246 245 237 244 250 244 238 243 246 246 246 242 245 250 245 \n243 245 245 245 247 247 248 248 249 242 243 245 244 246 243 248 \n246 240 248 248 245 246 248 253 248 242 246 242 239 248 235 232 \n234 238 229 241 242 246 249 242 244 245 244 245 249 243 250 252 \n240 243 241 241 248 249 250 248 248 245 243 242 243 241 242 243 \n243 252 252 246 249 247 243 244 243 238 232 230 227 236 245 243 \n240 246 245 237 241 243 246 248 248 248 239 232 238 244 238 240 \n242 239 239 234 236 236 243 241 239 241 247 247 246 240 237 232 \n237 245 239 233 241 243 243 250 253 250 251 248 250 248 164 130 \n118 156 134 147 183 218 248 246 247 249 241 174 132 102  91 110 \n200 172 124 138 165 111 142 181 223 251 247 209 178  99 102 109 \n170 205 219 240 251 251 247 249 246 240 240 241 243 250 243 207 \n148 132 132 150 162 144 137 138 146 144 150 160 163 171 183 190 \n194 189 170 149 127 109  94  87  75  70  66  66  65  65  65  65 \n 65  67  70  74  77  88 135 175 198 217 229 240 248 250 253 253 \n250 246 247 248 246 250 249 248 244 235 225 212 186 167 142 130 \n124 118 103 100  92  89  90  91  92  97 100  95  91  89  86  81 \n 73  69  65  61  57  56  54  54  52  53  49  49  49  50  47  46 \n 46  46  49  48  46  49  48  51  55  58  66  73  81  82  87  88 \n 89  88  85  86  86  82  80  80  75  73  71  67  69  70  74  72 \n 71  73  74  76  85  98 121 152 198 227 247 245 240 240 245 246 \n206 142  70  61  56  53  52  52  50  55  62  70  87 112 147 160 \n168 176 196 224 247 246 238 241 239 237 242 243 247 242 243 247 \n243 233 205 155 112 110 124 174 196 179 162 186 217 218 238 243 \n241 242 244 248 253 249 249 252 249 242 245 245 242 246 245 245 \n241 247 239 218 130 150  73  76 104 109 123 132 142 153 166 173 \n112  64  54  52  48  71 158 222 220 115 114  93 115 109  92  77 \n 65  56  47  46  40  39  38  37  35  33  33  32  34  34  35  35 \n 35  36  36  39  43  45  43  42  40  41  41  40  41  41  42  43 \n 40  40  42  42  41  40  39  38  36  37  38  36  36  35  34  33 \n185 167 170 196 196 202 222 235 246 247 248 248 248 240 165 131 \n 98 127 176 192 197 220 247 239 236 234 235 246 236 239 244 248 \n244 242 241 244 247 249 249 244 247 249 246 248 246 248 244 245 \n243 250 246 242 242 242 245 245 249 249 250 248 237 234 236 238 \n239 237 243 246 250 250 251 253 250 249 250 241 239 240 237 237 \n242 244 243 249 244 247 251 248 249 246 247 243 247 251 252 251 \n248 249 242 245 250 246 248 251 250 247 245 247 245 246 246 251 \n246 251 248 247 249 246 241 235 235 236 240 241 234 245 252 252 \n245 250 242 241 246 243 242 246 247 250 248 237 230 239 238 241 \n241 247 241 241 243 245 246 243 246 251 250 250 235 236 237 236 \n249 248 237 236 241 245 247 248 247 245 250 250 247 244 161 129 \n120 148 128 151 183 221 251 250 249 246 244 199 138 116  90 100 \n181 170 119 133 157 110 140 184 223 248 247 224 174 108 102 103 \n160 197 220 229 251 249 249 245 244 242 242 241 244 239 240 236 \n229 205 163 139 126 133 108 118 155 158 158 161 152 148 137 135 \n139 151 164 175 183 181 175 169 151 134 114  96  77  71  69  67 \n 66  65  63  62  61  57  60  70  85  94 112 127 157 178 200 222 \n237 242 248 250 250 250 250 250 253 251 250 250 251 248 243 235 \n223 225 206 193 172 155 134 116  98  90  90  87  90  94  96  96 \n 97  98  96  96  94  88  80  77  68  67  62  61  60  59  56  54 \n 57  56  55  55  55  55  55  56  60  63  64  68  76  85  97 102 \n102 100  97  98  97  94  93  91  89  83  78  74  72  70  69  72 \n 76  90 115 140 170 196 224 235 244 245 248 244 247 248 234 189 \n 93  66  58  54  53  54  53  57  60  68  81 105 138 155 168 167 \n198 228 246 244 248 250 241 245 240 237 244 249 253 247 241 246 \n245 239 240 218 161 118 108 125 176 190 148 154 196 216 229 243 \n248 237 247 244 246 248 246 252 247 243 247 246 242 246 245 244 \n246 249 237 221 143 159  75  99 106 170 190 173 155 142 133 144 \n142  92  57  48  46  44  55  94 207 162 101  97 102 110  95  79 \n 70  57  51  48  41  42  40  38  36  34  35  33  35  35  35  34 \n 35  36  38  41  45  46  45  44  41  40  40  39  39  42  41  43 \n 41  40  41  42  41  40  39  37  37  38  37  37  36  35  34  33 \n209 179 170 184 199 189 218 224 240 240 244 245 245 240 207 149 \n108 107 158 178 200 201 235 237 244 251 246 242 245 248 248 249 \n248 244 245 244 245 250 245 247 248 248 251 253 253 246 240 244 \n253 252 248 251 244 240 240 246 240 237 239 236 242 246 239 240 \n246 245 246 245 245 249 250 250 248 250 244 243 251 245 240 243 \n247 250 250 243 244 245 245 245 247 246 248 243 248 252 247 242 \n245 244 247 251 243 236 242 250 247 247 245 244 247 245 244 247 \n242 246 246 244 250 250 243 241 237 243 248 250 243 244 244 244 \n247 249 250 243 234 240 235 239 250 250 248 250 246 238 239 240 \n237 238 238 241 235 240 244 236 238 249 251 248 247 248 248 244 \n249 248 240 236 247 252 250 243 238 241 247 246 242 240 157 133 \n119 138 130 155 191 225 250 241 246 251 245 233 151 133  92  95 \n162 166 112 128 139 106 149 189 229 243 247 239 176 120  98 108 \n133 179 219 217 246 249 251 252 249 253 245 240 248 244 239 234 \n247 248 241 217 198 194 167 148 129 140 134 143 152 155 161 164 \n158 152 136 133 129 133 136 144 152 160 171 176 178 164 148 135 \n115  99  86  80  72  66  63  63  63  64  62  63  67  66  66  72 \n 88 107 136 156 182 204 223 231 241 246 251 252 252 252 253 249 \n248 249 249 244 244 249 250 241 226 215 199 182 155 139 125 119 \n107 104 100  91  89  91  93  94  99 101  99  95  93  91  90  88 \n 84  80  79  77  75  74  74  73  74  74  75  76  79  82  89  90 \n 87  79  71  68  66  62  62  76  92  97 104 111 125 137 156 169 \n176 180 193 212 235 248 250 246 246 242 251 250 234 195 110  66 \n 59  56  55  56  57  58  63  69  83 102 137 157 163 164 188 225 \n251 250 250 246 248 251 249 248 246 238 250 251 249 248 241 234 \n243 248 243 241 220 173 126 109 128 187 163 126 165 206 226 243 \n249 244 246 247 249 246 247 245 248 247 245 243 248 249 244 243 \n245 233 211 203 206 165  86 135 106 138 149 150 152 154 139 131 \n123 121  84  55  43  43  43  40  66 118 123 102  94 103 103  89 \n 78  63  53  50  45  43  41  38  36  35  34  32  34  34  34  35 \n 36  39  38  40  44  47  46  44  42  42  43  42  40  40  40  41 \n 42  43  42  41  40  40  38  38  38  37  36  35  36  34  34  33 \n232 197 172 176 193 194 200 221 236 243 243 244 240 245 234 167 \n124 102 139 173 198 201 223 238 236 240 243 247 250 240 240 243 \n243 243 241 244 242 246 243 247 245 248 250 246 248 245 242 250 \n252 246 251 251 244 245 247 248 240 232 228 229 234 241 239 238 \n247 246 246 245 247 246 244 246 252 252 247 242 244 245 247 248 \n249 247 250 245 236 232 248 249 247 249 247 243 237 244 239 244 \n246 244 248 249 250 246 247 251 249 246 240 238 243 247 241 242 \n243 242 242 243 249 253 245 243 241 244 247 248 249 249 246 246 \n244 243 242 249 245 242 235 233 240 250 247 249 249 246 241 242 \n240 235 234 235 233 241 241 242 245 249 252 250 251 246 241 233 \n242 243 241 238 252 254 249 246 246 251 252 250 249 239 154 134 \n120 131 131 155 194 225 251 246 247 247 249 249 170 143  98  92 \n165 163 108 125 123 110 153 190 232 243 244 244 199 137  95 107 \n121 176 213 217 235 248 250 250 253 253 249 244 250 243 241 243 \n246 246 248 248 247 244 235 215 195 190 185 133 116 123 129 134 \n150 155 154 157 155 152 149 140 140 135 128 129 135 144 159 166 \n176 175 168 160 146 133 110  95  81  72  68  67  67  63  64  63 \n 61  62  64  65  74  86  98 110 128 149 188 208 225 235 247 245 \n245 250 253 252 245 243 253 251 245 244 251 250 241 237 232 226 \n213 202 187 173 159 145 131 119 109 102  96  93  93  91  92  92 \n 90  88  89  88  85  83  87  85  83  84  81  80  78  77  75  76 \n 85  89  83  53  45  43  48  74 132 142 136 130 124 122 120 116 \n124 164 221 243 249 248 251 252 247 243 251 233 144  85  63  60 \n 58  56  57  60  65  70  78  92 121 148 167 165 177 210 243 248 \n244 249 248 249 250 252 251 246 241 238 243 243 240 235 243 245 \n249 249 246 241 248 215 150 128 106 162 177 138 153 190 223 243 \n244 246 250 251 248 245 249 244 245 243 246 246 247 250 242 240 \n244 213 202 201 213 156 114 154 107 125 123 126 132 138 149 148 \n133 114 104  80  50  44  40  38  40  42 118 108  95  99 105  97 \n 86  68  56  51  46  44  40  38  37  35  33  34  34  34  34  35 \n 35  37  38  40  43  45  46  44  44  42  43  43  41  39  41  41 \n 43  41  41  39  39  39  39  38  35  34  34  36  36  34  34  32 \n244 216 181 176 184 203 187 214 224 246 248 243 243 249 235 200 \n138 113 119 166 188 199 204 237 246 245 243 238 248 242 245 250 \n247 245 245 242 239 245 243 244 247 249 247 247 247 244 241 241 \n246 246 242 241 241 236 240 238 244 252 248 237 234 241 241 239 \n240 242 247 245 246 248 245 240 247 252 246 240 247 245 249 247 \n248 248 248 250 246 240 248 246 243 248 250 245 240 243 242 243 \n243 246 249 250 245 251 248 241 247 250 247 246 244 245 244 243 \n248 243 239 239 252 249 243 244 242 236 237 245 250 243 245 250 \n244 238 243 245 248 248 242 238 238 247 248 249 248 250 249 239 \n240 238 239 238 236 241 240 242 251 252 250 254 246 237 236 241 \n249 252 247 242 251 254 253 249 244 247 244 242 247 228 151 134 \n121 122 133 154 196 230 249 252 251 249 252 251 198 153 112  83 \n171 160 107 124 113 117 149 191 237 240 240 242 224 161  94 100 \n114 162 203 220 224 250 248 243 244 248 251 248 250 244 247 246 \n243 239 238 244 244 249 250 250 248 245 245 238 200 169 144 131 \n117 106 110 119 128 132 132 132 134 141 145 148 151 152 157 157 \n146 139 139 149 163 170 177 184 177 169 155 138 121 111  97  86 \n 79  73  69  66  62  64  63  65  64  65  63  68  73  86 109 130 \n155 170 200 215 227 232 242 245 252 248 250 253 248 241 244 249 \n251 250 251 250 249 249 243 242 235 230 222 216 207 202 198 194 \n190 185 183 181 180 179 182 185 188 189 180 171 162 154 141 131 \n122 115 103  57  42  34  35  38  39  35  38  48  66  66  86 130 \n192 235 246 251 251 248 249 252 251 233 170 104  64  58  58  58 \n 59  62  63  70  80  90 120 143 166 170 178 210 238 239 244 246 \n249 251 251 251 245 237 246 246 241 239 246 247 250 243 242 250 \n252 248 247 245 250 248 179 139 127 115 188 165 144 175 208 237 \n248 248 245 250 250 246 242 247 241 240 245 246 249 246 244 245 \n233 194 188 174 149 147 146 160 102 102 106 113 125 134 147 148 \n157 146 118  99  69  52  41  38  34  36  67 134  89  99 102 102 \n 94  79  58  53  48  45  42  39  37  35  34  35  34  33  35  35 \n 35  36  40  39  43  43  47  46  44  44  43  42  42  42  42  42 \n 41  40  40  39  38  36  35  36  36  35  34  36  36  35  35  34 \n247 237 190 175 173 195 191 200 223 236 243 239 243 249 242 232 \n156 126 108 154 183 192 200 225 248 243 238 238 249 243 248 246 \n246 247 246 246 244 243 247 245 237 240 247 252 249 248 246 239 \n239 247 247 250 250 236 234 237 243 250 249 242 241 246 243 241 \n238 241 245 245 253 248 242 240 247 251 247 241 243 241 247 244 \n249 253 247 246 245 242 245 248 250 249 245 242 241 246 248 246 \n247 248 250 250 250 250 247 244 247 245 246 249 247 245 246 247 \n246 245 239 241 250 246 239 242 236 240 243 242 243 244 245 246 \n243 244 246 246 246 247 244 239 235 236 247 249 250 248 251 249 \n247 238 242 237 239 238 251 246 249 252 251 251 250 246 243 244 \n248 249 250 246 251 254 254 250 240 245 248 246 248 224 151 137 \n117 120 135 154 203 226 248 249 249 250 250 250 219 159 125  80 \n173 155 104 123 112 120 157 194 240 249 235 241 240 176 103 100 \n108 138 198 219 219 241 246 236 237 235 241 244 249 249 252 243 \n237 241 244 243 246 252 249 248 247 248 248 249 249 246 232 220 \n205 187 162 142 127 119 114 109 110 111 116 120 128 134 145 153 \n155 151 145 142 138 144 148 151 158 159 162 165 172 174 169 165 \n156 141 129 113  97  86  76  68  66  66  68  64  65  65  61  60 \n 65  70  84  93 109 119 145 167 199 218 235 247 247 244 244 246 \n249 247 250 251 252 250 249 251 250 250 251 252 250 251 251 251 \n251 249 248 247 248 245 246 248 247 244 239 218 176 120  76  62 \n 48  45  56  54  37  31  30  31  33  37  54  70  79 113 194 235 \n244 242 242 246 246 243 240 245 213 137  75  65  59  60  59  62 \n 68  71  80  86 107 133 159 166 172 195 234 245 246 245 246 243 \n251 249 251 250 246 242 242 247 246 244 246 245 245 242 242 248 \n249 249 244 244 243 248 219 143 141 114 157 185 151 170 193 227 \n252 249 244 248 248 249 242 244 243 244 246 243 246 245 243 244 \n214 181 182 132 132 137 157 141 105 112 126 124 133 133 140 143 \n145 151 145 120  85  66  47  40  33  34  38 120 108  99 100 103 \n 96  84  61  54  49  45  43  43  39  36  36  35  35  36  35  36 \n 38  37  41  40  43  43  44  46  47  47  43  44  42  41  42  43 \n 42  40  39  39  37  37  34  36  35  34  34  36  37  34  33  33 \n245 246 211 183 167 179 198 184 220 225 243 240 242 243 248 241 \n193 148 110 128 177 182 196 208 243 249 243 240 242 242 240 244 \n245 247 238 240 241 241 241 242 241 243 243 247 252 247 244 244 \n242 240 241 247 249 235 230 233 241 244 251 249 243 241 245 247 \n248 252 242 246 249 249 243 239 244 251 249 245 246 241 245 247 \n249 246 241 240 243 246 249 245 249 245 240 244 244 248 250 242 \n243 241 241 245 250 245 242 241 247 246 246 244 245 242 247 246 \n247 249 248 246 247 249 240 242 240 238 245 248 249 250 247 245 \n248 250 246 242 240 240 248 245 241 236 238 239 237 236 244 247 \n242 241 238 234 236 244 247 245 251 254 249 244 253 247 248 244 \n249 248 250 252 252 251 250 246 243 247 251 252 251 225 149 137 \n118 122 136 153 204 230 246 248 247 245 250 247 239 179 140  93 \n176 152 104 124 109 123 161 196 246 249 244 247 251 210 112 101 \n104 111 189 213 217 230 245 236 245 248 245 245 251 252 247 247 \n249 248 243 241 248 250 245 242 242 246 250 252 250 250 247 246 \n245 249 246 238 239 226 207 187 165 149 135 125 114 103 100 103 \n112 118 125 126 130 128 128 133 135 138 139 143 145 146 150 154 \n160 164 171 173 180 169 164 163 145 128 113 101  91  82  75  70 \n 68  64  63  65  64  63  63  60  66  73  86 108 131 150 173 188 \n215 229 236 245 253 253 253 252 250 251 252 254 251 249 253 254 \n254 253 253 246 248 252 251 250 250 251 253 253 252 240 191 135 \n 77  55  47  56  48  33  31  33  38  59  84 118 204 239 249 252 \n249 238 238 245 246 246 209 146  78  65  60  58  61  65  69  76 \n 86  93 108 131 159 167 173 189 228 247 247 250 246 243 250 249 \n245 246 243 247 248 249 247 239 245 243 240 243 242 244 246 249 \n249 243 240 241 245 244 245 185 118 141 124 162 172 175 170 203 \n251 250 246 244 244 247 241 244 244 247 243 245 245 240 238 243 \n198 198 139 128 131 120 110 123 127 122 141 164 191 202 207 204 \n172 151 146 145 114  88  62  47  40  36  30  53 143 102 105  98 \n100  91  70  57  48  46  44  43  41  39  37  37  37  37  37  37 \n 38  39  41  41  45  43  45  44  44  46  44  43  42  42  42  43 \n 40  38  36  36  37  36  35  35  34  35  34  34  35  34  33  33 \n243 245 233 196 172 166 198 191 199 221 238 239 239 244 248 248 \n226 167 127 116 170 181 193 202 229 245 243 242 244 241 240 242 \n247 247 240 243 248 245 248 246 243 248 247 242 248 242 242 249 \n242 243 242 238 238 242 239 242 241 245 252 251 243 248 242 243 \n245 250 243 244 243 241 238 239 244 252 250 247 248 248 244 244 \n239 241 249 250 242 244 249 243 242 245 240 243 242 242 250 247 \n234 245 248 249 248 248 245 244 241 239 240 244 245 244 244 245 \n243 245 246 248 249 252 243 244 248 244 244 246 249 246 246 240 \n247 251 243 241 246 243 242 238 245 244 238 234 233 234 243 243 \n248 250 243 236 236 240 241 244 242 246 247 244 249 239 240 237 \n237 247 241 249 253 252 250 246 248 250 253 252 252 220 148 136 \n117 123 137 155 209 232 243 242 246 245 246 250 245 196 148 105 \n180 147 107 123 110 126 159 200 249 250 244 244 249 237 132 105 \n103 104 172 209 217 222 246 243 247 248 247 249 253 249 246 249 \n250 248 237 236 248 252 247 245 247 244 244 251 247 245 250 250 \n250 249 247 246 246 243 246 245 232 230 225 221 202 170 140 127 \n122 124 116 112 110 112 114 113 116 120 126 126 129 130 133 137 \n138 139 141 146 150 155 161 169 172 172 174 175 168 162 149 139 \n121 105  91  81  73  70  67  68  62  61  65  65  61  65  70  78 \n 91 110 122 144 176 199 219 229 241 250 251 251 248 248 253 254 \n253 251 250 246 248 253 250 249 251 250 249 253 253 252 250 241 \n194 144  76  50  50  38  34  37  50  87 158 223 249 251 251 252 \n248 246 245 245 230 177 103  71  64  61  61  67  72  77  87  93 \n101 122 149 168 169 174 217 241 251 250 251 252 251 249 249 247 \n249 247 249 250 250 253 249 245 244 241 246 247 246 248 245 248 \n248 246 242 246 249 247 248 209 128 138 129 134 179 180 171 193 \n247 249 241 245 244 239 240 241 245 245 240 245 246 242 241 238 \n203 193 126 132 124 106 139 123 112 147 190 216 239 241 245 249 \n239 216 166 140 138 109  79  57  45  39  36  30 112 123 104  97 \n100  95  78  61  49  46  43  43  41  39  38  39  37  36  38  37 \n 37  40  42  41  45  44  44  44  42  43  45  43  43  42  42  41 \n 39  37  34  35  36  36  35  36  36  35  35  34  34  34  34  35 \n246 245 243 212 182 159 187 200 185 216 228 248 245 242 245 246 \n241 195 150 119 153 176 189 194 211 233 243 248 244 250 242 240 \n237 245 243 242 246 248 245 247 249 250 251 248 242 239 246 243 \n246 250 244 239 237 237 241 244 250 247 251 252 248 250 240 244 \n244 246 247 241 250 250 244 241 242 246 250 250 249 252 250 247 \n248 249 249 250 246 237 240 245 248 249 245 246 249 249 249 248 \n248 248 252 251 250 251 250 250 251 248 247 243 248 244 250 248 \n245 247 242 241 250 250 251 249 249 244 251 249 241 242 246 243 \n249 247 244 249 249 250 249 244 238 237 238 245 241 232 243 247 \n238 241 252 250 245 247 243 240 231 236 236 243 251 249 252 247 \n241 241 240 247 252 250 246 247 247 244 248 250 250 212 146 134 \n118 131 139 158 212 237 249 250 250 249 248 249 248 227 153 126 \n183 144 111 119 112 131 162 200 251 245 242 252 249 246 166 118 \n103 105 143 202 214 214 246 248 244 240 241 246 247 245 251 253 \n250 251 248 240 242 249 246 245 252 245 244 250 250 243 245 245 \n249 246 246 247 248 244 244 243 242 247 246 247 231 190 142 160 \n224 239 226 206 181 165 145 134 119 114 107 108 109 108 110 115 \n119 123 126 127 127 128 133 136 139 146 150 156 162 162 165 172 \n178 182 180 173 162 152 136 121 104  95  80  75  71  68  66  60 \n 58  63  66  69  64  68  73  80 102 125 153 170 196 215 229 237 \n241 246 248 249 251 254 254 253 253 252 252 252 253 249 249 250 \n243 246 226 138  36  40  41  39  53 168 245 247 253 252 250 250 \n247 252 237 188 102  71  65  62  63  69  79  84  91  93  99 112 \n146 162 173 175 205 230 237 243 247 246 245 242 249 248 249 250 \n250 250 252 251 252 250 249 245 244 246 248 252 244 241 249 246 \n247 249 249 251 248 246 243 228 153 112 151 117 178 184 182 182 \n235 246 241 246 244 239 239 240 241 240 240 242 241 239 245 217 \n177 141 137 127 112 153 140 101 144 204 230 248 249 251 244 241 \n242 246 243 198 140 133  96  77  53  44  40  37  46 136 107 108 \n 99  97  87  71  50  47  44  42  41  41  41  39  37  36  36  37 \n 39  40  41  42  44  46  45  46  45  42  42  44  44  41  41  40 \n 39  38  34  33  34  35  35  35  35  35  35  34  36  36  34  32 \n246 245 244 233 190 167 173 197 187 201 226 238 243 247 245 240 \n236 211 161 131 140 169 184 195 192 233 249 246 247 245 242 239 \n237 243 245 244 248 250 247 250 252 249 246 244 244 241 249 248 \n245 245 239 235 246 246 247 245 244 243 248 248 244 246 244 242 \n247 246 245 244 248 250 243 243 242 243 244 245 243 247 251 250 \n246 243 250 250 245 239 244 247 247 252 249 247 250 251 248 249 \n251 249 249 247 246 249 249 250 250 245 247 246 246 246 248 249 \n244 246 247 242 239 241 240 238 240 240 241 247 248 245 248 243 \n242 246 252 250 240 239 243 243 242 238 240 240 236 232 239 242 \n235 238 247 248 240 246 243 239 235 247 248 246 247 243 247 245 \n245 246 249 250 248 248 246 248 245 243 247 244 244 205 149 134 \n120 136 143 160 214 235 247 250 250 252 252 250 249 245 164 143 \n179 145 117 115 119 132 168 204 252 250 247 246 252 252 195 134 \n109 107 127 195 214 214 237 245 243 244 244 246 246 245 248 250 \n247 252 248 241 242 249 245 243 247 247 251 250 246 244 240 241 \n248 246 246 248 252 249 249 247 242 243 250 248 203 167 165 213 \n250 252 249 250 249 245 236 228 211 191 175 160 141 128 113 110 \n108 110 111 110 113 115 117 118 118 124 130 137 143 145 151 148 \n149 154 159 167 171 176 176 173 171 166 160 147 127 115  94  84 \n 77  70  70  69  66  67  66  64  65  63  67  71  83  95 113 123 \n142 169 189 208 230 241 248 251 251 250 249 246 251 253 251 250 \n244 250 252 183  41  46  47  41  77 217 241 241 244 245 247 251 \n246 208 134  86  66  66  66  71  89  97  98  99 104 108 129 153 \n166 171 193 224 243 251 252 252 245 247 242 236 233 234 238 249 \n243 248 246 251 253 251 248 248 245 248 248 249 248 251 250 244 \n248 248 247 244 242 246 241 240 170 110 149 123 174 191 183 195 \n222 246 245 241 243 243 243 238 244 246 249 247 246 244 240 197 \n154 145 146 116 157 141 103 111 191 224 240 249 252 251 241 242 \n244 245 248 241 192 144 113  88  71  54  45  42  37  81 139 108 \n107  93  92  82  60  50  45  42  41  41  41  40  38  37  38  39 \n 39  41  40  42  45  45  45  47  46  44  42  44  43  41  39  39 \n 38  37  35  34  34  36  35  34  35  36  34  35  36  37  34  33 \n245 242 239 242 213 183 162 181 194 182 219 225 242 242 237 225 \n222 213 186 152 139 165 169 193 187 215 243 244 247 247 242 245 \n244 244 242 241 243 249 245 248 241 244 249 245 247 247 246 253 \n250 244 237 242 247 247 246 249 242 241 248 248 244 244 245 240 \n245 249 250 252 249 247 249 244 249 246 244 248 245 251 247 244 \n244 245 249 250 245 244 245 245 244 249 245 240 245 252 247 244 \n247 251 252 252 244 246 248 249 246 243 248 249 242 245 249 250 \n244 241 238 241 237 234 241 242 247 242 234 242 240 248 251 246 \n245 244 244 233 233 235 232 241 246 249 241 235 237 235 239 245 \n235 231 232 236 237 236 238 242 249 252 251 247 241 245 247 250 \n244 243 251 252 245 245 251 249 250 251 252 252 251 204 147 132 \n124 137 142 161 217 234 240 244 250 250 248 251 248 251 195 157 \n175 148 122 115 121 136 170 205 245 244 250 250 250 251 224 138 \n125 102 113 169 209 217 222 250 249 253 251 247 244 241 246 239 \n242 252 252 250 247 248 242 249 250 246 247 246 245 240 242 247 \n249 242 244 250 245 245 246 243 240 242 249 241 178 154 228 250 \n249 249 250 252 253 251 249 250 245 245 246 246 247 240 228 216 \n193 171 151 145 132 120 110 108 107 105 110 112 115 116 122 127 \n134 139 146 148 151 151 152 154 156 158 162 161 169 175 177 176 \n165 157 139 126 110 103  90  81  74  69  66  64  60  63  63  64 \n 65  64  63  71  83  94 117 145 174 187 205 223 238 243 249 252 \n248 252 250 172  46  52  48  41 107 231 243 239 238 237 228 202 \n136  81  74  70  77  94 120 133 123 109 113 117 130 155 164 169 \n183 214 243 241 238 240 250 251 248 252 248 249 246 244 243 242 \n240 234 229 231 224 224 232 243 247 246 245 249 250 250 249 248 \n247 246 248 247 247 246 249 249 189 123 128 130 172 193 176 169 \n199 243 241 242 244 248 247 241 243 242 239 240 243 246 231 170 \n150 169 147 163 140 105 108 162 221 237 248 251 250 251 248 242 \n243 242 241 243 244 196 134 112  89  70  53  46  41  35 109 130 \n108 105  90  91  71  54  48  43  39  39  39  40  41  39  40  39 \n 38  40  43  44  47  48  47  47  46  43  44  43  43  41  38  36 \n 36  35  35  35  35  35  35  34  34  34  35  38  34  35  35  34 \n250 247 244 242 233 195 168 166 195 187 200 221 239 245 230 219 \n217 212 210 166 142 159 166 182 189 200 240 240 248 246 244 239 \n246 248 242 243 243 246 246 247 243 245 248 250 242 244 248 249 \n250 246 244 244 247 241 244 247 237 243 250 248 251 248 246 244 \n247 244 246 252 252 248 249 245 247 250 252 247 249 251 242 247 \n251 252 252 248 244 245 241 244 246 247 249 245 245 251 248 248 \n249 249 246 249 247 247 247 244 244 246 245 243 233 243 245 248 \n249 247 243 243 234 235 241 242 246 250 247 246 248 249 252 247 \n243 239 242 242 245 246 239 237 243 246 238 236 229 230 235 247 \n241 235 235 232 237 243 238 238 250 252 249 250 252 252 249 248 \n248 249 247 251 252 249 247 246 249 253 252 249 248 198 147 131 \n125 137 144 161 220 240 242 248 247 244 243 243 243 249 220 171 \n175 153 123 115 122 140 173 190 221 244 240 245 237 234 193 113 \n140 105 108 146 208 217 213 239 252 253 253 251 243 240 240 241 \n244 252 254 254 250 252 248 249 249 249 247 247 246 243 243 249 \n250 244 245 248 240 238 236 240 245 246 247 243 236 223 247 252 \n253 253 253 253 252 251 248 246 246 249 249 251 252 249 241 244 \n241 233 238 237 223 210 190 174 154 136 122 112 108 106 110 110 \n112 112 117 121 128 130 134 136 139 138 144 144 144 139 149 149 \n158 163 170 175 175 174 167 160 148 130 111 100  84  73  68  65 \n 65  63  62  63  65  63  64  67  71  79  87 104 121 133 162 192 \n220 235 247 199  67  50  46  40 143 236 233 235 212 169 120  90 \n 73  73  80 107 162 177 140 119 120 123 130 143 156 161 171 201 \n237 248 246 245 243 240 245 252 247 247 248 251 249 246 240 245 \n246 248 245 246 243 237 232 237 234 227 226 233 237 244 249 251 \n250 249 248 248 250 247 246 245 205 138 120 130 172 189 172 165 \n176 240 242 244 247 249 243 241 241 239 243 245 243 246 211 150 \n156 167 167 161 107 103 132 204 226 237 245 250 251 250 252 248 \n248 243 247 251 250 241 173 130 108  86  62  51  44  42  57 128 \n119 106  94  89  84  62  51  44  41  39  40  41  42  41  41  40 \n 40  43  43  44  48  49  49  48  46  45  45  45  44  41  38  36 \n 36  35  37  35  34  35  35  34  33  34  37  37  35  36  35  34 \n249 240 241 241 238 212 183 160 183 193 185 213 228 240 236 236 \n234 234 234 188 148 148 174 180 193 195 226 250 247 241 246 242 \n242 243 240 242 244 248 244 243 246 244 243 244 246 248 246 251 \n253 249 243 247 245 240 245 242 244 251 251 248 250 249 239 243 \n250 241 242 246 251 248 249 252 247 246 252 252 252 250 246 246 \n252 252 253 251 246 237 237 244 246 250 246 244 251 248 245 246 \n249 250 246 244 248 251 250 248 242 241 242 237 234 248 252 250 \n246 242 237 244 236 246 249 248 247 242 245 245 249 252 249 246 \n252 246 241 245 244 246 247 245 239 244 245 238 229 233 235 242 \n249 244 243 241 244 247 241 244 250 246 240 245 250 250 251 246 \n250 254 248 249 248 245 243 244 240 242 252 249 250 192 149 130 \n125 134 144 166 222 237 248 249 246 241 246 249 247 247 240 192 \n170 151 128 121 123 143 180 202 189 155 146 128 118 111  95  76 \n136 124 101 120 200 214 217 226 252 253 253 254 249 247 243 243 \n248 253 252 252 249 249 237 236 244 251 250 246 245 244 241 247 \n245 243 246 245 246 247 240 241 243 252 231 240 252 245 246 250 \n251 254 252 253 251 252 252 249 248 250 246 242 253 250 251 248 \n250 250 246 250 250 252 252 251 248 245 234 224 205 191 173 154 \n137 126 115 110 107 105 109 111 111 112 117 121 129 137 139 141 \n143 140 140 141 144 151 153 158 166 172 175 176 180 176 163 151 \n135 121 100  90  84  77  69  70  68  67  63  63  63  65  63  63 \n 71  79  93  88  57  47  46  50 108 131 109  91  70  68  74  83 \n101 135 171 192 166 120 110 115 129 143 161 166 170 194 235 248 \n252 248 246 253 252 247 250 248 242 239 243 244 248 245 245 248 \n248 252 251 252 253 251 248 249 251 250 247 244 242 241 231 225 \n228 225 230 237 238 233 240 241 220 158 130 134 171 181 175 162 \n153 238 248 247 245 245 245 243 243 241 238 241 245 241 175 147 \n141 126 160 121 106 109 174 221 229 233 247 248 248 252 250 246 \n248 248 247 252 252 248 232 173 125 110  82  65  54  47  42  59 \n137 114 103  96  87  74  57  47  44  41  43  43  41  40  41  41 \n 40  43  43  45  47  47  47  47  44  43  45  44  43  40  39  36 \n 34  33  37  36  35  35  34  34  35  36  36  37  36  37  36  35 \n248 240 242 238 242 233 191 170 166 189 190 199 221 236 237 240 \n235 242 249 217 150 143 175 172 186 200 212 243 243 241 246 247 \n236 239 245 244 248 250 247 243 246 242 244 242 250 251 249 249 \n250 246 245 245 240 240 244 243 240 248 251 251 248 245 247 244 \n250 242 235 241 245 250 246 247 251 251 253 249 247 244 239 237 \n242 244 245 251 246 233 234 250 245 245 246 245 251 246 249 252 \n250 248 245 247 247 247 250 250 240 238 242 241 239 245 247 245 \n248 244 245 248 250 246 245 241 242 240 239 242 244 245 248 250 \n251 248 242 245 239 242 250 252 238 242 245 249 238 239 237 247 \n250 240 244 247 244 242 236 229 242 251 248 249 245 244 243 238 \n249 254 254 254 254 253 252 252 252 251 252 252 247 189 149 128 \n124 136 148 168 223 243 249 251 249 248 249 249 249 250 246 206 \n165 143 130 122 123 147 185 194 122 177 136 106 105 103  93  79 \n115 145  99 110 182 214 215 216 251 250 248 247 250 250 243 243 \n241 246 244 249 247 246 242 243 249 249 248 246 244 247 239 247 \n243 240 245 245 239 238 240 245 246 250 212 205 244 243 249 249 \n245 250 250 253 252 248 248 250 247 239 241 246 249 249 246 246 \n252 252 245 246 249 253 252 249 251 253 249 252 252 249 245 240 \n229 223 204 188 168 150 136 123 109 103 105 110 113 115 120 122 \n127 129 134 137 143 144 147 148 148 145 143 145 149 159 171 176 \n183 187 183 176 173 163 147 132 111  98  83  72  65  62  66  65 \n 65  62  62  59  54  51  49  51  54  60  63  73  84  99 136 166 \n189 181 151 132 118 124 132 145 163 166 160 189 235 245 249 246 \n247 244 245 251 252 250 249 245 246 248 244 243 248 249 252 252 \n247 248 252 250 251 246 242 247 242 239 239 245 246 243 247 245 \n238 231 233 231 219 196 191 212 212 165 133 147 160 175 174 164 \n144 228 251 247 242 241 247 247 246 242 244 238 247 235 156 145 \n127 117 143 116 113 136 204 224 230 232 243 249 248 248 252 250 \n251 250 250 250 253 252 245 229 146 130  99  81  61  52  45  39 \n 90 134 104 104  88  79  65  53  46  46  45  43  42  42  41  42 \n 43  44  44  45  45  47  50  48  45  45  44  43  42  39  37  35 \n 34  33  34  33  33  33  34  35  35  35  34  34  35  35  35  35 \n241 236 241 239 237 240 210 183 159 179 198 182 216 227 243 242 \n242 239 245 245 178 141 154 179 176 200 211 226 240 236 243 244 \n244 244 239 241 241 242 245 250 250 247 249 249 246 245 239 241 \n235 235 249 247 246 239 242 244 243 245 250 247 248 252 251 249 \n251 250 248 248 242 246 247 241 244 244 244 244 245 242 240 246 \n248 244 241 242 235 233 236 241 245 245 244 245 243 251 249 248 \n245 244 243 249 240 247 247 248 243 239 241 248 242 241 244 246 \n243 249 248 249 251 250 246 244 237 238 241 250 248 248 247 253 \n252 252 251 246 245 246 241 246 248 243 247 248 248 245 249 248 \n245 244 248 247 242 237 231 232 240 246 244 238 239 238 245 248 \n253 254 252 249 252 253 248 250 251 253 255 255 250 190 151 128 \n125 137 150 172 226 244 246 246 245 246 248 245 244 244 250 227 \n159 143 125 122 124 147 192 169 178 178  91  99  98  98  90  82 \n 90 170 101 105 154 207 216 206 245 252 250 245 242 245 238 237 \n239 240 245 246 244 245 243 243 245 242 244 248 248 245 246 248 \n245 239 238 240 237 242 246 249 239 221 196 224 252 250 248 244 \n240 247 251 253 248 245 238 243 248 250 241 244 250 253 249 251 \n251 248 247 248 252 254 248 247 253 253 253 251 245 248 252 250 \n246 251 249 245 245 248 246 240 219 200 185 167 150 140 123 118 \n115 113 114 117 117 120 122 123 129 134 140 143 149 151 150 149 \n151 153 159 164 171 177 184 190 196 196 184 179 166 150 128 114 \n105  97  90  84  89  92  97 103 115 134 158 175 196 197 187 163 \n128 118 130 144 158 162 168 166 157 166 224 245 248 252 250 248 \n246 247 247 245 243 241 244 247 248 246 246 251 253 253 251 251 \n252 247 248 250 250 246 243 247 247 242 240 241 236 236 239 241 \n230 235 247 249 250 244 226 202 196 164 127 149 160 162 173 163 \n136 216 238 235 245 246 246 249 249 245 246 243 247 212 141 143 \n135 126 133 142 142 179 223 221 230 233 244 247 248 251 251 250 \n251 247 252 251 251 253 250 249 212 153 125  98  77  62  51  48 \n 45  90 123  96  94  89  70  61  53  49  47  46  45  44  44  44 \n 45  47  46  47  47  48  49  49  48  47  46  42  41  40  38  36 \n 36  34  33  33  31  32  34  35  35  34  35  34  35  34  34  34 \n245 238 235 231 232 237 235 197 163 163 201 190 201 221 237 236 \n238 243 250 248 211 150 146 174 184 187 210 217 241 235 247 245 \n241 239 237 240 249 242 240 245 248 245 249 249 247 241 243 241 \n237 237 250 247 247 239 240 243 246 241 246 248 252 251 248 247 \n249 250 250 251 246 248 247 243 242 240 242 239 237 241 246 248 \n248 247 251 250 243 247 248 245 250 249 244 246 244 248 248 245 \n249 249 245 244 241 247 242 245 244 241 247 250 245 243 243 247 \n247 247 243 245 248 250 247 247 239 246 247 248 242 240 244 250 \n253 253 253 248 247 250 247 250 242 240 250 245 245 247 246 249 \n247 250 248 247 240 237 237 239 245 247 243 246 244 243 243 252 \n247 247 253 247 248 251 252 252 250 250 253 251 247 183 149 126 \n125 137 154 179 226 246 251 250 249 249 251 247 246 247 248 226 \n156 143 120 121 124 148 192 197 198 103 112 118  98  98  90  85 \n 76 175 118 104 134 195 217 210 236 253 248 251 241 238 233 231 \n231 235 245 249 248 248 242 247 248 246 246 245 249 246 247 247 \n249 248 243 240 240 240 250 246 219 186 210 248 250 250 249 248 \n245 248 247 246 241 251 243 243 242 246 246 250 248 253 242 247 \n251 252 245 246 252 253 250 250 252 251 250 250 247 251 253 252 \n248 251 251 247 249 251 249 250 246 245 246 245 240 232 216 207 \n188 176 157 141 127 118 115 111 112 117 122 125 128 130 134 138 \n142 146 148 155 163 165 160 160 164 168 174 185 189 188 184 184 \n186 182 180 182 183 180 181 182 184 190 194 188 171 153 141 145 \n150 155 165 165 156 146 139 137 181 228 252 253 249 251 252 252 \n249 250 245 247 248 243 238 245 252 253 249 247 248 251 252 248 \n249 248 248 248 251 250 250 248 250 250 248 244 242 240 246 247 \n240 237 238 242 247 250 247 244 234 171 129 147 174 158 162 165 \n131 211 190 198 228 243 239 238 247 251 246 246 245 188 150 163 \n154 143 130 179 164 190 222 221 229 233 247 245 247 250 250 250 \n250 247 248 250 250 252 249 250 247 196 140 116  90  75  60  54 \n 48  50 104 106  90  89  79  69  60  54  54  51  49  48  48  48 \n 49  51  50  50  50  49  48  49  48  47  44  39  40  39  36  34 \n 36  33  34  34  32  35  35  35  35  35  36  35  35  35  34  34 \n240 238 240 238 245 242 238 215 177 163 176 202 185 213 229 243 \n239 236 235 240 241 177 140 154 194 176 200 212 228 243 243 240 \n241 245 244 241 241 242 246 245 240 244 249 248 241 240 244 239 \n238 238 246 244 245 238 241 247 247 243 243 247 250 246 243 248 \n251 246 244 249 251 249 249 251 251 245 242 241 237 239 248 250 \n250 251 250 244 244 247 245 245 245 246 249 247 248 246 245 247 \n249 248 247 247 248 246 248 246 247 240 243 249 244 244 247 251 \n250 243 246 249 248 250 248 248 249 251 244 247 244 247 248 247 \n252 251 250 250 246 249 247 251 248 246 249 247 251 251 246 248 \n246 247 245 249 242 247 234 231 238 250 251 250 248 244 248 248 \n244 247 250 249 246 250 251 247 249 252 252 246 240 175 148 123 \n125 138 155 180 225 230 235 242 249 253 254 250 250 249 247 217 \n155 147 118 119 124 155 197 194 113  85 141 179  89  97  92  90 \n 80 147 155 104 118 180 209 217 224 245 244 250 245 240 235 231 \n239 249 246 246 244 245 247 246 249 249 248 244 246 246 249 248 \n246 247 243 244 249 245 247 225 187 190 245 250 246 251 250 252 \n241 246 247 249 247 249 250 247 249 250 243 244 246 249 240 246 \n248 252 245 250 253 254 252 249 252 251 247 248 251 254 252 251 \n253 251 252 252 247 252 253 251 250 252 251 253 253 250 248 253 \n251 251 252 247 238 228 213 195 176 158 137 128 121 119 116 121 \n123 127 129 130 135 138 143 147 148 150 151 148 149 151 156 157 \n156 155 149 144 140 147 154 147 140 141 147 150 161 172 174 168 \n158 146 130 122 121 135 173 217 242 248 248 252 249 249 251 251 \n253 252 246 247 252 249 249 252 245 244 250 248 249 254 251 246 \n248 250 250 251 251 251 250 247 248 252 250 252 253 250 250 241 \n241 246 244 241 239 247 248 242 230 169 137 154 176 149 141 166 \n127 200 204 200 215 221 208 183 179 195 200 203 205 159 165 160 \n158 162 147 186 180 205 208 215 229 230 238 238 243 249 250 250 \n252 252 250 246 250 252 247 242 248 244 179 153 108  92  73  59 \n 54  48  49  88 105  98  86  77  65  63  62  62  59  57  54  52 \n 53  54  52  52  52  51  50  48  48  45  42  41  40  36  35  34 \n 35  34  35  35  34  36  36  36  35  34  35  33  34  34  34  33 \n238 239 242 247 237 239 239 234 190 168 168 195 193 203 223 238 \n236 240 236 242 240 206 146 145 180 185 187 203 217 240 238 239 \n235 242 247 246 238 239 245 244 239 243 245 241 242 241 240 242 \n238 235 248 245 244 248 251 247 242 244 244 241 239 243 247 248 \n249 245 250 250 251 248 249 245 247 246 246 248 249 247 248 249 \n249 250 247 245 241 242 245 248 246 247 249 248 248 248 250 245 \n242 245 246 245 240 240 248 247 245 243 242 241 244 244 241 249 \n252 245 251 250 242 244 244 246 245 251 252 251 248 248 245 243 \n252 248 241 240 247 249 247 249 253 253 245 242 249 245 247 246 \n246 248 249 250 243 245 242 243 240 249 253 246 246 240 245 246 \n249 251 249 248 242 244 248 246 248 249 246 244 235 172 146 127 \n126 138 159 180 229 235 230 244 253 255 254 252 246 246 249 210 \n155 143 118 120 128 158 201 155 104  96 118 158  94  99  98  94 \n 98 128 179 112 110 162 203 217 218 242 245 246 247 243 240 242 \n247 252 247 248 246 249 252 252 252 252 249 250 249 246 249 245 \n241 244 246 245 247 246 232 200 194 237 239 242 245 248 249 251 \n244 248 244 247 252 250 250 248 244 245 251 252 253 252 242 247 \n247 246 247 252 253 253 251 249 252 250 248 251 252 252 248 249 \n251 251 253 253 252 253 252 253 252 251 253 254 250 251 253 254 \n252 253 252 253 252 251 253 251 249 244 230 221 209 196 174 158 \n144 133 120 117 120 123 129 134 138 138 143 144 141 139 143 140 \n138 142 149 149 137 134 131 130 130 133 136 136 137 133 126 122 \n115 117 117 127 169 214 244 250 246 246 247 252 252 253 252 252 \n253 250 249 248 248 252 253 252 246 245 251 253 252 253 249 246 \n251 251 252 252 247 250 248 246 247 247 251 253 251 251 247 248 \n249 251 251 249 244 239 234 236 231 164 139 151 157 136 143 164 \n126 181 245 250 252 249 232 198 147 138 134 129 153 149 163 150 \n151 165 180 189 185 211 202 204 235 228 235 236 248 246 250 249 \n251 254 251 247 246 250 245 247 248 249 225 174 138 102  85  68 \n 56  50  47  51  93 116 106  88  72  70  70  68  66  64  60  54 \n 50  53  55  52  52  52  49  47  47  43  40  39  38  37  35  35 \n 34  33  33  34  35  34  34  36  34  34  35  34  32  32  33  32 \n237 241 249 245 243 245 241 244 214 178 163 177 202 187 217 225 \n245 242 238 246 241 239 164 141 163 191 184 199 209 231 245 249 \n247 248 246 240 233 240 241 241 238 233 239 238 233 241 244 242 \n234 237 247 243 239 243 245 249 245 240 238 235 240 239 241 245 \n251 244 244 250 253 253 250 243 243 245 246 241 241 252 250 252 \n250 246 242 249 249 243 241 239 246 243 242 245 250 247 247 246 \n245 245 249 248 244 241 244 244 250 247 244 243 240 245 246 246 \n249 250 251 249 249 245 242 234 244 252 250 245 239 244 247 245 \n250 252 249 245 247 241 248 250 248 250 248 245 242 245 247 247 \n246 250 245 246 244 240 248 250 241 244 251 252 245 237 235 237 \n241 246 250 252 251 251 251 252 251 247 242 238 227 171 145 125 \n127 135 161 186 226 238 245 238 247 251 254 254 238 238 242 201 \n155 132 122 121 127 159 203 145 107 111 126 128 108 108 104 104 \n110 108 188 133 105 134 196 212 219 233 245 245 247 246 244 245 \n246 249 252 252 251 249 247 245 245 248 249 246 243 245 250 243 \n241 247 249 244 248 236 166 161 231 248 253 253 252 248 250 248 \n248 247 245 248 251 251 250 248 251 253 253 252 252 252 251 248 \n251 249 252 253 246 246 252 253 253 252 248 251 253 254 253 254 \n254 254 253 253 253 254 253 253 253 254 253 253 245 249 254 253 \n244 249 251 251 254 252 252 253 253 253 253 253 251 252 249 250 \n249 242 225 209 191 180 164 145 130 127 125 127 127 130 137 142 \n157 151 126 114 114 117 127 121 111 109 105 107 108 110 112 117 \n127 141 185 222 250 254 252 252 251 252 248 250 250 250 249 247 \n251 253 252 250 244 247 250 251 249 253 253 249 244 245 247 247 \n250 250 252 250 252 251 248 244 249 251 250 249 250 248 247 247 \n245 244 250 249 244 241 243 229 217 157 137 136 137 140 140 160 \n134 167 232 244 246 248 249 249 234 209 187 163 146 142 162 171 \n165 173 185 186 194 214 185 173 207 229 219 226 235 248 242 241 \n247 247 244 245 243 241 243 242 246 240 244 219 169 134  98  86 \n 65  59  50  46  51  79 119 120 101  86  79  75  70  65  62  56 \n 54  52  51  50  49  50  45  43  42  41  40  39  38  37  35  35 \n 34  34  35  33  34  34  34  33  34  34  34  33  35  35  34  31 \n239 242 249 247 244 243 236 239 236 196 160 160 199 194 203 220 \n240 241 242 243 240 246 196 144 155 180 185 192 205 221 238 246 \n254 248 243 247 240 240 240 240 232 231 236 234 226 238 247 242 \n243 243 250 252 242 245 249 249 237 235 247 238 241 247 243 245 \n252 247 245 249 252 253 252 248 244 243 241 241 245 252 249 249 \n247 244 242 244 244 245 239 233 245 244 244 244 244 242 239 243 \n247 249 248 248 245 243 247 251 249 248 253 251 242 248 248 246 \n243 242 248 251 251 249 248 240 242 245 244 243 246 250 251 252 \n248 251 250 249 250 242 247 248 244 246 247 249 247 245 248 245 \n246 249 248 243 249 238 243 248 245 249 247 250 244 230 228 227 \n229 236 248 249 246 245 248 249 249 250 246 248 232 169 146 128 \n125 139 161 192 227 244 247 244 245 247 253 254 245 243 231 187 \n158 131 124 124 128 161 201 148 119 122 133 141 125 119 121 163 \n175 129 150 147 106 121 189 210 220 225 247 244 246 246 247 250 \n250 248 246 251 253 252 246 245 248 253 247 244 243 245 245 242 \n240 246 250 248 240 211 170 205 247 250 253 250 249 248 251 251 \n252 251 249 249 252 251 249 246 250 253 254 251 250 251 252 252 \n249 249 252 254 246 243 250 252 254 254 252 252 253 253 253 252 \n252 251 250 252 252 251 252 253 250 250 251 248 253 253 254 253 \n248 250 248 251 254 253 254 253 255 254 251 251 248 250 252 251 \n253 250 247 249 250 249 244 236 224 219 207 194 174 159 156 165 \n176 167 155 146 131 114 127 133 135 121 112 113 116 125 145 172 \n209 227 246 249 254 254 250 244 252 250 252 252 252 251 251 250 \n249 249 254 254 248 251 248 246 248 253 253 252 245 248 253 253 \n253 251 254 254 250 251 248 245 251 248 249 251 251 250 250 246 \n240 242 250 243 241 249 249 242 223 155 134 133 138 149 138 159 \n145 161 229 244 245 239 233 243 248 250 251 241 172 146 162 181 \n187 183 169 179 197 213 175 146 163 177 199 221 218 239 243 240 \n246 241 245 245 250 252 245 236 243 249 250 248 196 165 114  95 \n 79  64  56  50  44  49  79 110 119 109  91  82  74  68  60  56 \n 55  53  46  45  44  43  42  41  40  39  38  38  37  36  37  37 \n 37  35  34  33  35  35  34  34  34  34  34  33  34  33  33  33 \n244 245 238 248 242 242 235 241 242 209 175 170 170 205 189 216 \n229 241 240 239 248 249 234 166 144 165 183 191 197 208 231 249 \n251 246 244 239 233 231 234 238 231 234 238 241 244 247 244 236 \n241 241 248 244 245 250 248 239 236 240 241 238 246 243 245 248 \n251 241 237 237 243 250 252 249 249 250 248 243 248 247 249 248 \n250 243 244 248 243 247 245 236 232 237 247 250 245 246 243 247 \n247 248 244 243 248 250 250 243 247 243 243 250 250 245 248 247 \n244 246 250 252 252 251 240 241 241 250 250 250 241 240 246 250 \n243 251 242 241 240 241 249 245 244 247 246 243 245 247 238 245 \n247 248 245 247 249 242 234 244 248 250 241 237 252 247 241 241 \n246 249 249 244 243 240 241 243 247 250 249 249 230 166 142 127 \n128 143 162 193 228 246 248 250 249 250 250 252 254 252 247 187 \n157 131 124 123 136 169 196 157 129 121 138 206 232 222 225 237 \n245 242 126 105 120 116 172 207 219 217 249 253 252 248 243 242 \n245 245 247 248 252 247 247 245 246 248 248 248 245 248 245 243 \n243 239 231 235 213 182 217 242 251 252 245 247 247 249 246 248 \n246 249 248 248 253 252 247 246 249 250 253 253 249 246 251 253 \n252 250 248 249 253 250 251 253 254 251 253 253 254 254 251 249 \n249 250 252 253 253 247 246 252 251 249 251 251 252 252 254 253 \n250 250 249 250 249 244 239 239 250 252 251 251 251 253 253 251 \n250 249 244 248 252 251 252 253 251 250 248 248 248 248 249 249 \n243 245 247 230 213 212 204 198 195 195 202 203 214 229 244 252 \n254 254 252 250 248 251 252 247 245 250 252 249 249 249 251 253 \n250 251 254 253 251 251 250 251 252 253 254 254 250 246 243 247 \n251 253 252 252 251 251 251 250 250 248 253 254 254 254 249 245 \n238 237 251 249 246 250 246 249 223 154 137 132 137 134 141 150 \n165 174 217 243 238 231 231 239 233 246 249 250 178 158 148 163 \n175 169 156 150 202 208 194 185 179 169 166 183 181 193 202 207 \n220 231 232 230 235 240 238 237 244 244 241 244 235 183 151 107 \n 93  79  64  57  49  46  47  61 100 114 113  98  84  75  61  54 \n 52  49  46  45  44  42  42  40  39  39  39  38  38  38  37  37 \n 37  35  35  36  35  35  35  35  33  33  32  34  35  33  33  34 \n247 244 239 246 238 240 235 240 248 230 188 171 168 193 193 207 \n222 238 245 238 246 250 247 199 139 154 178 186 195 206 224 249 \n244 237 241 242 244 239 233 227 236 233 230 234 238 240 240 237 \n234 234 240 243 241 245 238 240 247 246 239 239 248 247 249 246 \n244 240 244 243 238 235 242 244 246 246 248 246 244 243 246 248 \n249 241 238 243 247 242 238 238 236 239 244 245 243 249 243 242 \n244 249 247 244 244 247 246 247 249 248 247 251 247 240 246 248 \n250 249 245 242 245 248 244 240 239 243 242 242 237 238 245 243 \n238 247 250 247 246 243 243 240 252 252 242 247 247 246 239 247 \n242 243 247 245 250 247 241 239 233 236 245 244 246 248 246 243 \n241 246 248 243 241 242 244 246 249 251 249 250 226 163 140 126 \n128 144 161 194 230 248 250 249 248 249 247 250 252 245 237 180 \n153 128 126 121 143 172 202 163 137 121 129 202 248 249 251 250 \n252 250 184 147 133 113 157 205 215 218 239 249 251 250 244 247 \n248 248 252 249 250 249 248 244 246 250 249 247 247 246 244 243 \n234 222 206 186 169 182 246 247 252 253 251 252 251 252 252 251 \n250 243 242 247 252 251 248 251 249 250 250 251 250 250 251 253 \n250 250 248 246 249 248 251 251 250 248 252 248 251 253 251 251 \n249 250 252 252 252 250 249 247 250 247 251 250 248 251 253 255 \n255 251 249 247 242 237 234 235 240 249 247 247 253 253 252 251 \n247 243 243 249 252 254 252 250 249 249 249 248 251 251 254 250 \n244 250 254 254 253 248 244 245 246 248 252 250 246 247 253 254 \n254 254 250 248 248 250 253 247 249 252 252 251 251 249 246 249 \n253 253 252 248 248 250 253 252 250 252 255 253 249 248 246 248 \n250 253 250 249 248 247 249 251 249 249 251 253 248 249 249 248 \n243 248 251 250 247 250 248 250 217 152 140 133 138 133 143 145 \n179 186 214 248 236 234 240 247 244 249 238 240 161 159 128 114 \n136 140 165 146 205 204 235 245 242 237 230 225 218 215 200 183 \n182 180 191 214 215 222 226 234 229 238 236 239 244 217 159 129 \n100  92  74  62  55  51  47  46  68  96 111 122 110  90  69  62 \n 53  50  45  44  44  42  42  40  40  40  40  39  38  38  36  37 \n 35  36  35  37  35  36  34  34  34  32  32  33  33  34  33  33 \n242 240 238 240 239 239 239 245 247 245 209 172 175 164 201 188 \n219 228 245 241 241 245 248 233 151 146 174 179 193 203 206 230 \n242 239 237 234 242 238 234 233 227 221 245 234 222 229 246 249 \n241 222 230 232 235 232 233 241 241 244 247 245 244 241 248 242 \n242 250 247 241 239 240 247 248 245 244 243 249 246 246 250 249 \n245 243 247 247 244 242 241 246 242 240 239 242 246 238 242 242 \n249 248 250 248 248 248 250 246 245 249 249 248 249 249 245 243 \n241 247 253 249 239 238 241 242 243 235 233 237 239 247 244 243 \n244 243 251 246 246 247 251 246 247 252 245 246 248 252 245 241 \n240 245 245 238 239 234 239 241 247 246 244 244 244 242 244 244 \n239 242 249 245 245 249 248 244 251 253 250 249 219 159 141 129 \n132 141 165 195 230 251 242 242 248 248 251 252 249 238 234 173 \n154 124 126 120 144 175 206 182 152 126 152 228 247 247 250 250 \n245 242 236 197 158 118 135 198 213 220 229 247 247 241 239 242 \n249 246 244 244 245 247 248 246 253 252 251 250 244 244 243 235 \n232 220 207 190 181 233 251 249 254 253 253 251 252 252 251 253 \n247 245 248 245 243 248 246 249 251 249 249 252 251 249 254 253 \n246 246 252 252 247 250 252 253 252 250 253 254 255 253 250 250 \n254 251 252 251 251 253 251 248 246 241 249 250 242 245 253 253 \n254 252 252 252 252 247 249 253 251 250 251 251 250 251 251 248 \n251 249 245 251 250 253 254 250 252 252 251 251 251 253 251 252 \n252 252 254 252 254 252 252 252 251 251 253 254 251 249 252 254 \n253 249 250 253 254 253 253 250 250 253 253 250 248 253 253 250 \n250 254 253 252 249 249 251 252 248 253 254 255 254 254 254 254 \n254 254 254 253 252 251 250 250 246 246 253 252 246 249 248 244 \n240 249 252 246 244 253 253 253 205 151 138 133 142 140 143 148 \n191 193 210 251 245 246 252 251 238 238 230 220 154 155 117 106 \n122 130 162 153 206 203 237 250 251 250 248 251 251 252 251 250 \n244 226 204 196 194 196 191 194 193 203 180 168 202 231 192 156 \n118  98  90  75  62  59  50  46  49 138 146 111 128 118  76  80 \n 73  59  49  44  43  42  42  41  41  41  41  39  38  38  38  37 \n 36  36  35  35  36  35  35  35  34  34  33  33  35  34  33  34 \n241 239 235 236 237 244 246 245 242 242 229 190 173 170 184 187 \n209 220 238 244 238 242 241 238 180 141 165 182 188 204 201 222 \n245 246 248 244 243 244 243 232 236 228 239 236 241 245 238 237 \n229 223 227 234 241 236 236 242 245 242 248 250 241 243 240 243 \n243 241 246 243 242 241 249 252 250 247 246 250 248 246 253 252 \n243 251 246 244 241 243 245 240 243 243 244 247 240 240 239 243 \n250 247 250 253 250 249 251 248 249 249 246 247 246 247 247 243 \n239 244 252 252 248 245 243 238 233 233 245 240 237 245 244 243 \n250 252 248 244 243 243 246 249 250 250 246 245 249 249 243 246 \n241 244 245 237 245 240 235 237 248 250 242 242 247 240 244 250 \n241 247 245 250 246 242 243 244 250 251 252 248 219 162 138 128 \n132 142 169 196 228 254 251 249 247 247 246 248 250 250 227 163 \n156 126 123 123 147 178 208 195 161 144 211 237 243 246 251 248 \n248 248 245 212 184 131 125 187 214 219 222 245 249 247 239 240 \n247 245 248 249 249 244 249 251 253 251 252 252 246 238 234 228 \n222 222 206 187 208 242 247 248 251 252 253 254 252 251 249 251 \n248 251 251 245 241 250 244 250 252 251 253 251 248 248 252 253 \n250 251 251 253 251 248 251 251 246 248 252 253 253 250 250 249 \n252 252 250 254 253 252 252 247 245 244 245 244 241 248 253 252 \n252 252 253 248 249 250 252 253 251 252 254 253 253 254 250 246 \n251 248 243 251 252 254 251 247 250 251 248 249 252 248 249 249 \n250 251 254 253 254 252 251 251 251 251 253 253 252 252 252 252 \n253 247 245 250 253 254 252 250 250 252 253 253 248 250 251 250 \n251 254 252 252 249 249 248 253 250 253 254 253 252 251 252 253 \n254 250 254 254 251 249 252 252 249 249 254 254 251 254 253 248 \n245 250 251 248 250 249 251 253 199 149 132 132 149 143 146 150 \n196 195 206 249 249 248 250 242 224 229 230 216 153 144 118 113 \n117 140 155 154 211 205 234 249 249 252 252 252 252 251 251 254 \n252 252 251 250 244 241 238 240 241 238 210 170 170 197 189 167 \n148 110  98  89  68  63  56  51  43  65 210 182 111 105  88  87 \n 96  80  59  51  48  47  44  42  41  41  41  40  39  39  39  39 \n 38  37  37  37  37  37  35  36  34  35  36  35  35  36  33  34 \n236 241 241 236 234 242 244 240 243 244 245 214 173 177 160 192 \n186 216 227 246 238 241 246 237 212 153 150 176 181 192 201 208 \n238 240 241 242 234 235 236 237 244 240 239 232 241 242 243 237 \n228 227 236 237 243 251 238 246 248 248 246 238 238 247 247 244 \n241 242 247 240 242 249 253 250 252 251 246 247 249 251 252 249 \n248 241 241 242 240 243 246 241 246 249 249 247 250 247 249 247 \n245 249 251 247 247 251 249 244 249 247 248 246 242 243 251 249 \n243 240 243 243 246 248 244 241 236 239 240 246 249 249 245 242 \n245 244 245 248 249 249 246 247 250 248 246 246 247 243 245 249 \n241 245 248 231 235 238 243 246 245 248 245 246 247 247 247 246 \n242 248 249 249 246 245 246 243 242 241 245 252 218 163 137 128 \n135 145 161 186 225 246 247 249 244 249 250 244 243 236 192 157 \n148 126 122 121 151 184 208 201 173 188 233 233 237 240 247 251 \n248 245 243 230 194 156 115 170 214 215 218 235 251 248 245 242 \n244 245 246 243 243 244 246 249 249 245 249 252 250 243 224 217 \n211 217 215 193 242 250 253 252 251 251 252 253 253 255 251 252 \n249 249 248 251 251 251 251 248 250 253 251 246 251 252 253 252 \n252 252 248 251 250 251 251 250 252 253 249 247 251 252 251 248 \n252 251 251 253 248 248 252 249 245 247 245 246 249 252 252 253 \n254 252 253 254 254 251 250 248 250 253 254 254 252 253 254 255 \n251 249 248 244 247 252 251 251 250 252 254 250 252 245 247 250 \n251 253 254 252 254 252 248 250 249 250 251 250 252 249 247 250 \n251 252 251 249 249 253 249 246 248 252 251 247 244 248 249 249 \n250 250 249 251 250 254 254 253 254 254 253 252 250 249 253 253 \n253 250 253 254 252 253 251 244 232 245 251 250 248 250 249 252 \n254 254 253 254 249 247 252 254 190 145 131 136 150 136 155 159 \n203 193 204 244 245 246 243 235 229 228 225 204 150 132 130 133 \n111 147 153 158 207 203 233 253 249 248 248 251 250 250 252 254 \n252 252 252 253 250 252 252 251 253 253 253 249 249 247 243 230 \n168 145 109 101  88  70  61  56  52  41  90 183 207 141  91  84 \n107 110  80  61  58  53  50  48  44  43  42  40  38  38  39  38 \n 37  36  35  35  37  38  36  36  35  36  35  35  35  34  35  34 \n237 236 235 233 234 242 242 240 243 249 241 232 185 168 173 172 \n187 208 222 238 247 247 246 248 225 179 143 166 177 187 201 204 \n232 247 244 246 229 230 242 241 243 241 237 230 238 240 234 231 \n240 239 240 241 246 252 242 246 245 249 248 244 242 250 250 242 \n242 243 246 248 245 246 251 250 252 250 247 246 247 250 250 249 \n251 243 247 244 244 248 249 242 250 249 250 252 249 247 247 248 \n249 248 249 246 247 251 253 245 241 242 245 240 243 240 247 252 \n240 241 241 236 239 245 250 252 245 238 228 236 240 242 243 249 \n248 246 249 252 249 246 244 240 246 249 251 248 242 245 244 250 \n249 246 243 244 240 243 247 243 237 238 249 251 247 247 248 243 \n244 246 248 245 245 244 245 240 245 244 243 251 211 158 138 128 \n136 141 152 177 224 243 245 248 242 240 245 240 235 196 189 160 \n144 123 122 125 155 186 204 198 186 183 234 233 239 237 241 239 \n247 242 240 240 201 177 117 150 210 211 218 224 249 248 252 250 \n247 244 245 246 244 247 247 242 241 239 250 253 250 248 238 231 \n188 215 248 240 240 248 247 251 251 250 253 252 251 254 252 252 \n251 248 246 246 251 250 250 248 251 252 250 247 251 249 250 253 \n252 253 254 252 248 252 250 247 252 254 249 244 246 251 250 248 \n249 250 252 252 246 247 250 251 244 248 251 251 252 253 253 252 \n252 254 254 255 255 254 250 248 253 255 254 253 253 254 255 254 \n252 248 244 247 249 250 253 252 252 250 251 251 252 251 249 253 \n255 254 254 254 252 253 252 254 253 254 249 252 254 251 250 250 \n252 252 252 251 250 253 253 249 249 247 250 249 246 248 249 246 \n246 251 254 252 252 253 249 244 251 253 254 252 248 247 251 252 \n254 251 253 255 254 254 254 251 248 250 251 249 252 253 250 251 \n253 253 254 254 250 249 250 252 183 142 129 137 145 128 161 163 \n206 200 201 245 253 247 245 236 227 229 230 200 150 132 132 144 \n134 139 157 163 209 200 230 253 253 251 252 249 251 248 250 251 \n252 249 251 250 249 251 253 252 252 253 254 253 253 253 253 254 \n211 166 129 106 100  84  68  63  54  51  55  91 134 151 141 111 \n 85 102  98  76  73  65  56  53  49  45  43  41  40  39  39  39 \n 36  40  38  38  37  38  37  37  37  37  36  35  35  34  34  35 \n237 234 236 234 242 240 240 245 241 243 242 244 207 172 180 154 \n178 186 219 227 236 237 239 246 247 222 146 150 176 184 199 207 \n216 241 241 241 237 241 250 243 239 245 242 248 243 246 235 237 \n244 246 243 240 250 246 241 243 247 245 250 252 245 251 249 241 \n237 237 231 232 241 242 248 250 250 240 239 243 250 245 243 245 \n245 240 244 241 247 247 245 242 245 247 245 247 244 242 242 246 \n246 243 248 246 240 239 244 246 243 238 242 248 243 241 244 251 \n245 244 236 231 233 239 241 245 235 240 238 232 230 239 247 248 \n250 248 244 247 249 247 244 245 243 242 253 249 242 247 245 245 \n245 244 241 242 243 240 234 238 240 243 247 248 244 242 242 242 \n251 253 247 245 249 250 246 246 247 244 235 247 203 154 139 131 \n135 132 146 171 228 244 242 240 237 231 226 224 201 180 168 158 \n139 125 122 123 160 190 202 183 191 187 223 242 245 239 240 240 \n239 245 244 247 212 193 130 133 204 211 219 214 241 242 252 251 \n249 251 252 250 251 248 246 243 244 244 245 247 248 247 239 216 \n213 246 253 248 242 242 247 250 250 251 251 252 252 251 250 250 \n247 251 251 246 248 250 253 255 254 253 251 253 246 252 252 253 \n253 252 248 249 253 254 253 251 251 245 248 252 252 251 251 250 \n250 251 251 248 249 251 250 250 248 248 250 249 245 247 252 253 \n251 253 255 255 255 255 255 254 254 253 253 255 254 254 254 254 \n250 248 248 251 250 252 254 253 250 242 242 251 252 251 248 252 \n254 254 255 255 252 249 252 253 252 253 252 251 253 254 253 254 \n253 252 253 254 255 254 254 253 250 247 251 249 250 247 244 243 \n250 252 253 254 254 254 253 250 254 254 253 249 246 250 252 251 \n254 251 252 253 253 255 255 255 255 255 254 254 252 253 254 253 \n253 253 254 254 254 254 253 249 170 138 126 133 145 122 165 168 \n205 197 196 244 249 247 251 246 244 245 242 202 154 137 133 144 \n149 131 151 166 204 176 224 252 253 252 250 247 250 249 249 248 \n251 250 247 250 248 249 248 250 250 247 247 252 253 253 249 251 \n245 204 158 127 101 100  81  69  61  55  53  60  89 155 170 163 \n174 132  91  84  84  93  81  69  58  55  49  45  45  43  41  41 \n 38  38  40  40  38  38  39  38  36  36  38  36  35  36  35  34 \n237 240 242 242 243 240 243 249 238 245 238 241 222 193 166 178 \n150 171 212 221 234 239 235 237 239 232 170 144 168 182 194 205 \n210 231 239 237 245 241 248 243 238 234 246 243 241 245 241 246 \n242 248 246 245 244 236 232 241 249 247 246 250 250 251 246 244 \n234 235 239 241 246 246 243 246 248 239 237 240 249 243 243 241 \n240 238 249 247 246 235 239 237 244 249 247 241 247 245 244 239 \n242 247 248 245 243 244 244 243 246 246 246 246 246 246 245 250 \n250 246 240 234 231 229 230 227 232 241 239 238 242 247 248 246 \n243 240 245 243 244 244 246 249 240 241 250 247 246 247 247 245 \n241 240 242 242 249 242 235 246 238 246 249 246 243 246 245 245 \n247 251 241 243 252 253 249 238 240 239 242 247 194 154 139 129 \n134 132 147 161 228 236 229 222 218 220 216 198 182 167 185 158 \n136 127 125 121 166 193 191 143 183 197 207 233 235 242 250 249 \n245 247 247 249 230 201 151 125 195 212 217 215 232 237 244 247 \n250 253 253 252 252 247 245 245 246 244 243 245 245 244 203 207 \n249 253 248 251 253 251 251 250 252 254 252 251 248 247 244 243 \n249 252 252 248 251 251 253 255 252 250 252 250 249 253 246 244 \n247 252 249 248 252 253 254 253 250 242 247 252 251 252 252 253 \n252 253 253 251 252 253 250 248 249 250 249 249 250 250 248 248 \n248 249 254 255 255 255 253 252 253 253 252 254 254 254 253 253 \n247 247 248 248 248 252 251 252 253 250 248 252 252 247 236 241 \n251 251 253 255 254 250 247 254 254 254 254 254 254 254 252 253 \n249 252 254 254 254 254 253 253 253 251 254 252 250 239 236 245 \n253 250 250 251 253 252 250 246 253 254 253 249 244 248 252 252 \n253 252 249 247 252 253 253 251 253 253 253 253 251 251 250 251 \n252 251 253 254 254 251 250 244 165 136 127 135 150 126 166 178 \n202 199 190 241 246 251 253 252 247 239 234 192 155 140 135 142 \n137 130 151 173 191 146 216 251 251 253 249 247 245 247 250 252 \n251 252 250 247 246 249 248 247 250 250 252 253 251 252 252 253 \n247 242 177 151 112 105  93  78  68  59  54  55  79 210 242 236 \n241 231 162 120  90  87  95  93  79  65  55  53  52  48  45  44 \n 41  41  40  40  39  38  39  37  38  38  37  37  37  37  37  35 \n243 244 248 245 241 239 245 245 240 241 240 244 240 218 170 185 \n160 153 186 215 228 242 235 238 236 238 210 152 154 180 185 198 \n206 213 241 245 244 236 234 239 241 236 238 241 243 243 244 248 \n247 239 244 246 242 243 247 252 251 246 248 246 251 251 236 236 \n237 240 246 246 247 243 243 246 246 245 250 244 244 246 248 244 \n237 236 238 245 247 244 242 247 250 245 244 240 243 245 246 245 \n238 239 247 238 242 250 249 240 247 245 245 248 252 250 241 237 \n237 243 245 243 239 237 233 234 245 250 244 235 238 247 241 236 \n239 243 245 246 246 246 247 246 250 249 248 247 246 246 251 246 \n239 240 239 243 247 246 239 235 238 241 248 248 244 245 248 250 \n242 248 245 246 251 249 244 241 240 242 248 250 186 152 139 130 \n131 134 143 142 235 234 229 221 214 217 196 173 141 191 189 153 \n135 126 129 127 168 199 166 117 175 205 190 226 241 249 250 247 \n250 245 249 250 241 204 175 136 183 207 213 220 226 246 246 252 \n250 245 246 245 243 243 243 243 246 245 246 249 243 236 213 228 \n253 240 219 242 253 253 253 251 253 253 247 248 246 249 250 250 \n250 251 250 248 252 249 251 253 250 248 254 253 250 249 242 240 \n246 251 253 250 245 249 254 253 252 247 244 250 249 250 253 254 \n252 254 255 254 255 254 251 247 250 251 252 249 250 250 252 252 \n248 247 253 253 255 254 250 253 255 255 254 248 253 254 252 252 \n253 252 250 247 248 245 249 253 253 252 249 253 252 252 251 251 \n253 250 248 254 254 251 252 255 255 255 253 252 252 255 254 253 \n248 248 253 255 255 253 253 254 254 255 254 252 249 246 250 252 \n253 252 253 253 250 251 252 250 249 251 253 251 247 252 251 251 \n250 252 248 247 250 253 254 251 252 250 252 252 246 241 246 247 \n251 254 254 255 254 255 252 238 158 134 133 138 149 129 164 185 \n195 203 182 237 252 250 249 248 237 230 225 181 152 132 133 136 \n122 126 150 175 171 126 215 249 251 250 250 246 243 243 250 252 \n253 251 249 248 251 252 245 241 250 252 251 250 249 253 252 251 \n250 250 222 176 141 115 103  92  75  68  60  56  52 117 244 250 \n248 248 235 185 145 126  96  84  88  85  76  67  62  58  52  52 \n 48  45  43  42  42  41  41  40  41  39  40  40  39  38  38  38 \n244 245 249 247 235 236 236 243 238 236 244 239 240 240 182 161 \n191 140 159 207 220 237 228 237 241 243 233 169 146 169 183 193 \n204 207 235 244 236 240 235 241 245 247 239 242 245 247 244 245 \n244 238 249 253 247 243 252 252 248 247 247 245 253 250 234 238 \n245 246 248 247 250 246 243 250 249 247 250 245 246 246 241 241 \n236 235 238 242 245 246 245 248 248 242 241 241 238 247 243 244 \n243 243 245 245 242 250 252 244 244 246 243 252 253 248 243 243 \n240 240 249 248 247 249 246 244 242 245 248 244 238 248 240 236 \n239 246 248 248 244 238 244 244 251 250 252 243 242 244 245 241 \n241 248 245 243 243 250 238 239 244 243 247 251 243 230 238 248 \n241 239 249 247 248 247 242 240 240 244 243 249 184 149 139 133 \n131 139 141 137 238 233 224 216 214 215 170 128 168 219 182 150 \n135 128 128 132 171 201 157 111 170 198 190 221 239 248 254 253 \n253 248 252 253 243 215 186 152 176 205 211 220 222 241 240 245 \n246 241 245 245 240 240 240 240 242 241 245 249 238 229 237 246 \n248 232 224 243 253 252 252 252 252 252 246 248 249 251 248 247 \n248 251 252 247 250 246 248 254 255 253 253 253 251 251 249 252 \n249 248 250 246 246 253 254 251 250 248 247 252 251 253 252 251 \n255 255 254 255 255 252 247 247 252 252 252 252 253 249 252 253 \n253 251 249 246 251 253 251 253 255 254 255 253 252 254 248 248 \n255 254 252 250 249 250 251 253 249 251 253 254 252 250 249 247 \n249 247 250 253 251 253 254 252 253 254 254 253 253 255 254 253 \n252 252 253 254 254 252 254 253 252 254 254 253 253 252 253 250 \n249 254 253 254 249 252 253 252 252 252 254 254 246 248 252 252 \n254 252 250 253 251 252 254 254 254 250 252 246 238 239 246 241 \n246 252 254 254 253 254 253 232 154 133 136 141 145 132 163 193 \n187 208 176 234 252 247 241 245 248 239 232 179 151 127 132 132 \n117 128 152 185 145 132 217 250 250 251 252 247 245 245 246 250 \n250 251 251 249 250 249 246 244 247 250 249 249 250 252 253 253 \n251 245 245 208 159 131 112 105  94  80  67  60  58  56 182 249 \n252 249 243 239 176 116 126 126  96  80  76  75  75  72  65  59 \n 56  52  49  47  47  45  42  41  43  41  42  40  41  41  39  40 \n245 241 238 239 238 237 228 241 247 245 242 241 233 247 211 165 \n183 171 126 177 220 226 237 241 241 239 232 211 140 153 181 187 \n199 205 218 242 244 248 245 240 240 241 247 244 245 245 245 245 \n246 239 238 241 251 247 239 237 245 246 237 236 240 243 242 244 \n245 244 250 253 248 243 241 248 247 245 247 246 245 240 241 240 \n241 243 244 245 249 250 253 250 244 239 244 243 251 242 242 245 \n244 246 245 241 237 242 242 241 251 251 246 249 249 250 249 248 \n245 242 241 244 245 239 236 237 240 235 247 242 234 243 242 241 \n245 248 245 241 247 244 245 246 246 249 252 248 244 248 245 242 \n245 245 247 242 239 242 244 239 244 250 243 242 239 240 250 247 \n239 250 252 252 247 248 238 240 242 242 236 238 176 151 137 130 \n134 142 133 139 238 230 223 214 213 219 176 156 206 227 168 150 \n135 133 127 134 170 200 164 111 157 185 202 206 238 243 249 251 \n253 253 253 249 249 235 194 169 175 199 210 216 223 241 249 248 \n246 241 248 246 244 243 241 244 247 241 247 252 229 219 244 251 \n248 246 249 252 250 243 241 243 247 246 252 252 252 252 247 249 \n253 251 245 245 251 249 250 251 252 254 253 251 249 247 250 252 \n245 239 248 253 253 254 251 245 248 250 250 253 255 254 250 250 \n249 250 253 254 254 249 247 248 249 249 249 250 255 254 251 250 \n253 252 248 246 244 246 250 253 254 251 253 254 252 250 246 247 \n253 255 252 249 250 253 253 253 247 246 250 251 251 249 249 253 \n251 251 253 249 248 253 254 252 251 251 253 254 254 254 255 255 \n254 253 255 252 253 253 254 253 254 254 251 247 242 247 245 247 \n250 253 251 248 250 253 253 252 254 255 253 251 250 251 253 253 \n253 249 252 252 252 252 252 255 252 249 254 253 253 248 243 248 \n246 251 254 255 252 251 249 214 149 132 135 145 143 142 158 201 \n172 212 168 228 249 241 242 238 232 243 241 179 150 123 133 132 \n109 133 150 188 133 144 214 249 253 252 251 245 248 245 242 246 \n248 252 249 248 249 248 252 253 243 246 250 248 246 245 251 248 \n246 245 248 247 189 147 128 121 125 113  92  76  64  62  79 199 \n246 247 247 248 247 206  97  70  97  83  63  65  68  73  79  81 \n 78  70  62  57  53  52  49  47  47  44  45  42  42  42  41  41 \n240 234 233 230 234 240 240 232 239 242 241 240 233 241 231 189 \n161 198 144 139 215 220 238 245 248 248 237 239 158 142 173 186 \n195 201 212 230 238 239 241 237 244 243 247 241 241 237 242 238 \n243 248 238 237 251 241 238 244 251 242 234 237 234 233 238 245 \n244 244 250 253 250 248 247 244 245 241 246 243 246 242 245 244 \n242 242 249 249 247 249 251 252 243 241 244 249 254 250 246 247 \n246 246 250 248 248 249 246 243 248 249 251 251 246 245 245 244 \n244 240 243 242 249 242 235 241 246 244 250 245 240 246 249 252 \n252 249 243 237 239 239 242 245 242 249 243 243 244 249 250 247 \n249 248 248 246 244 244 244 241 241 243 237 241 245 247 250 249 \n248 249 252 250 246 245 240 241 243 243 238 237 168 152 136 129 \n132 142 130 136 231 219 215 210 206 214 153 127 201 207 153 152 \n135 133 127 135 171 204 169 126 142 181 206 197 235 242 250 253 \n252 251 254 248 253 251 204 180 175 201 211 214 222 227 251 246 \n245 246 246 246 248 244 245 245 247 246 246 248 229 218 248 250 \n252 250 248 249 250 246 241 242 248 250 250 249 251 253 250 242 \n246 251 248 245 249 252 247 242 246 249 247 248 252 251 253 253 \n253 249 251 252 253 251 250 248 250 253 250 252 254 254 253 248 \n250 251 251 253 253 251 249 251 250 252 250 250 253 253 253 254 \n255 254 253 253 247 248 253 252 252 252 251 254 254 251 250 253 \n253 249 248 250 247 249 252 253 251 248 250 249 253 247 247 253 \n253 254 253 249 244 251 251 250 253 253 255 251 250 253 254 254 \n255 253 255 253 255 254 253 254 255 254 252 248 247 252 247 245 \n252 254 252 252 253 252 254 253 255 255 254 253 254 253 252 252 \n247 251 253 254 254 249 253 255 252 253 251 252 253 253 251 253 \n252 250 251 255 254 252 251 208 148 134 133 142 127 151 160 206 \n160 208 169 222 252 248 241 232 232 238 242 176 150 124 132 131 \n107 135 151 185 140 156 213 247 253 253 252 250 247 244 245 251 \n252 251 249 248 249 253 251 249 250 249 246 249 243 241 249 249 \n246 245 252 252 234 173 135 133 160 160 124 100  74  65  59 109 \n229 245 248 251 250 251 207 111  49  49  54  60  57  62  72  77 \n 85  88  86  77  68  64  55  55  53  51  49  48  46  45  44  43 \n207 220 232 236 241 243 235 231 243 248 244 238 242 241 243 213 \n159 172 180 139 182 216 228 240 242 236 245 243 192 145 157 181 \n194 199 207 219 243 244 239 237 246 239 244 247 241 235 244 241 \n244 242 242 246 247 247 243 251 252 249 243 236 237 240 244 246 \n244 247 251 248 247 246 245 242 243 241 238 241 243 246 244 241 \n246 239 245 251 252 251 248 246 237 236 239 242 248 250 250 249 \n251 244 244 245 245 239 239 237 244 245 250 253 252 246 244 242 \n242 245 241 245 249 242 232 232 229 234 243 247 245 244 247 240 \n241 246 247 238 235 243 248 248 245 241 249 250 252 247 246 249 \n243 247 247 248 244 238 239 237 238 240 244 243 250 251 250 250 \n250 244 249 247 249 246 241 238 229 233 241 241 164 152 134 132 \n132 148 132 122 164 165 155 139 193 211 134  90 148 175 138 153 \n136 131 131 139 175 203 178 140 129 177 207 196 226 244 252 253 \n252 249 249 249 251 252 216 190 172 201 208 211 221 217 247 249 \n244 244 243 242 242 244 242 240 246 247 244 225 222 238 252 254 \n252 250 245 249 252 246 245 246 242 243 250 251 249 251 246 245 \n251 248 244 247 250 252 250 246 250 254 252 247 246 248 253 255 \n251 248 253 251 252 250 245 248 250 254 254 255 255 254 250 249 \n255 255 250 249 249 249 249 248 250 246 252 252 253 252 252 252 \n254 251 252 246 250 253 255 254 251 254 254 252 255 250 249 254 \n250 250 253 251 247 251 252 250 248 250 247 250 252 251 248 250 \n254 254 251 247 241 242 249 253 253 254 252 249 251 251 248 250 \n254 254 253 253 251 254 255 253 252 254 253 254 254 254 251 251 \n254 254 252 248 247 251 255 254 254 255 255 255 254 253 252 255 \n245 244 249 253 253 253 253 254 253 252 253 253 252 245 239 250 \n254 251 248 253 253 250 251 200 150 131 131 133 122 159 162 205 \n146 211 173 214 253 244 245 249 252 249 234 169 150 122 135 129 \n109 137 151 181 152 173 211 245 246 251 250 249 250 246 247 247 \n248 251 248 243 250 251 249 245 250 251 245 243 247 252 250 249 \n251 249 252 249 252 228 148 127 139 158 165 131  96  82  66  59 \n124 215 242 244 251 248 248 232  83  47  51  55  46  39  55  81 \n 84  80  83  89  91  93  90  85  76  71  63  59  57  54  52  50 \n177 178 188 212 235 239 242 237 240 247 248 239 243 246 241 226 \n178 146 188 171 155 210 222 239 237 233 244 241 221 156 148 175 \n192 199 207 212 234 237 235 235 234 233 243 245 241 234 242 247 \n249 241 245 247 242 240 243 245 251 249 243 245 243 245 247 249 \n251 252 251 251 247 243 240 245 246 243 238 243 244 247 245 239 \n247 248 247 246 241 246 248 246 245 240 239 243 252 250 249 242 \n245 244 245 244 242 242 245 240 245 246 252 254 252 250 242 244 \n246 247 244 249 250 250 248 244 233 234 232 235 245 245 247 248 \n242 245 250 247 241 248 249 242 238 238 251 249 246 243 240 245 \n244 248 250 248 246 241 244 245 244 238 247 250 250 250 250 251 \n245 242 245 245 248 246 240 237 236 235 239 235 160 150 137 134 \n131 149 128 118 124 119 118 113 188 219 118  98 119 135 140 156 \n138 130 132 142 175 200 186 151 128 173 205 208 214 243 247 245 \n249 248 254 253 252 250 231 198 172 194 204 211 221 218 238 253 \n248 245 243 239 246 242 243 247 242 249 243 201 225 251 253 254 \n253 251 250 251 249 246 245 248 248 249 254 254 252 252 249 242 \n246 246 244 249 252 251 251 251 253 252 247 249 251 250 253 253 \n253 249 251 250 251 251 247 249 252 254 254 253 254 254 252 253 \n254 255 251 250 252 253 252 252 251 248 251 254 255 252 253 252 \n252 252 249 245 253 254 254 254 254 255 253 252 255 253 254 254 \n251 252 254 254 250 247 253 250 244 246 250 254 253 252 251 252 \n254 252 253 253 246 246 253 252 250 248 251 251 252 245 238 249 \n252 251 250 251 248 253 255 253 251 253 250 252 254 255 255 254 \n253 252 251 248 247 251 253 254 254 255 255 253 251 251 253 255 \n252 247 244 251 255 254 253 253 253 253 254 254 252 247 238 236 \n242 240 242 244 247 247 249 193 148 134 133 132 123 162 163 201 \n130 208 176 208 251 243 239 244 237 241 225 167 143 127 139 130 \n107 143 154 177 157 177 208 245 251 252 250 249 250 248 241 244 \n249 246 245 248 247 246 243 243 248 251 250 247 245 250 249 248 \n247 249 252 251 251 251 193 130 130 139 165 159 115  97  82  70 \n 67 114 221 247 246 247 250 248 115  58  49  48  39  36  44  68 \n 98 118 106  92  86  90  96  99 104 107  97  88  81  72  62  59 \n169 169 168 170 172 188 212 225 240 238 235 238 239 242 239 241 \n211 152 172 189 179 192 220 225 238 234 249 243 238 195 140 159 \n189 198 203 211 225 235 234 237 239 240 241 243 240 235 246 250 \n243 242 243 240 234 235 237 238 235 238 245 246 247 245 242 243 \n244 249 250 250 242 245 248 242 244 241 243 243 245 247 244 246 \n249 252 247 243 236 242 251 247 247 248 245 242 243 251 252 244 \n250 252 253 248 245 244 246 240 239 244 247 251 253 250 246 249 \n249 248 245 243 239 238 240 235 231 235 235 244 241 236 240 251 \n249 244 246 248 244 235 244 245 247 248 250 250 247 247 234 244 \n248 247 250 245 242 240 246 242 239 247 244 244 248 252 243 243 \n248 251 248 246 247 246 241 237 241 242 246 241 154 149 135 134 \n132 155 119 118 118 120 122 114 167 212 106  95 110 123 143 159 \n140 133 130 145 179 205 200 163 134 161 195 219 200 233 247 241 \n250 251 251 252 253 250 244 205 179 184 212 214 213 221 230 250 \n246 241 241 240 242 241 244 248 245 237 225 216 250 251 252 251 \n247 248 247 245 247 251 246 249 246 251 253 253 252 250 253 252 \n252 252 252 253 253 252 252 253 255 254 254 253 249 251 253 253 \n246 248 255 255 249 250 251 252 254 253 254 255 255 254 254 252 \n253 252 252 254 254 252 248 253 252 251 252 252 253 255 252 252 \n251 253 250 248 250 248 249 250 252 251 253 255 255 254 255 255 \n255 255 250 250 253 253 253 252 250 250 249 249 253 251 250 254 \n252 252 254 255 254 250 253 250 249 243 246 246 250 247 242 247 \n250 251 251 246 247 252 254 255 253 251 248 250 249 250 249 245 \n250 253 254 253 253 253 250 252 255 255 255 254 255 254 253 253 \n254 253 252 250 253 254 254 254 254 253 252 250 248 246 239 234 \n232 235 243 239 250 250 242 183 145 134 129 122 124 161 170 195 \n117 198 183 203 246 241 244 238 193 154 169 163 139 124 141 130 \n110 143 154 170 161 183 204 242 249 251 251 252 254 250 245 248 \n250 251 250 252 247 247 242 247 249 251 247 245 251 251 244 250 \n246 246 249 248 252 251 241 189 123 127 138 160 160 137 124 101 \n 80  69  91 167 236 249 250 242 115  67  45  40  37  42  85  94 \n105 126 149 165 162 139 111 100  92  94 102 104 110 114 111 102 \n167 168 167 166 164 164 168 177 195 213 232 238 246 236 233 232 \n228 178 140 184 200 200 216 218 241 238 245 239 243 234 146 141 \n182 192 201 209 218 230 238 238 244 245 245 246 239 240 249 247 \n248 241 237 239 235 241 239 237 239 241 243 235 234 238 242 247 \n248 251 249 244 242 243 241 241 240 247 246 245 250 248 246 243 \n240 242 247 249 246 249 249 245 248 245 240 240 245 250 249 242 \n243 248 249 243 242 240 244 242 236 242 246 249 250 247 243 247 \n251 251 246 238 235 236 240 240 239 240 241 243 246 243 240 250 \n249 245 239 238 240 238 241 240 246 243 242 245 247 244 240 245 \n248 241 246 244 247 241 244 245 247 250 246 238 249 253 251 246 \n245 247 247 244 244 247 244 244 242 243 247 235 152 148 136 134 \n134 158 116 123 111 118 119 116 153 212  98  89 102 118 145 163 \n142 136 132 146 182 208 216 173 139 150 189 218 203 222 248 245 \n248 246 247 248 251 248 249 219 183 174 212 212 213 221 224 242 \n246 239 239 241 244 245 244 247 250 233 227 245 252 252 253 248 \n247 252 248 243 248 251 248 249 248 248 244 245 247 249 249 244 \n250 248 252 253 253 254 253 251 250 250 254 254 253 252 247 249 \n251 252 252 254 250 252 254 254 254 253 253 252 255 254 254 250 \n248 251 253 254 254 253 254 253 253 255 254 254 254 254 252 250 \n242 245 250 251 254 251 248 250 250 248 251 252 252 251 251 254 \n253 253 248 251 254 255 254 253 253 253 252 252 254 254 253 254 \n246 250 253 255 252 251 252 253 249 249 248 248 252 252 252 251 \n252 249 246 248 250 253 254 252 248 250 253 253 250 251 250 247 \n249 249 253 253 252 253 250 250 254 255 254 253 253 252 254 254 \n255 254 251 249 252 254 252 254 254 253 252 251 250 253 249 247 \n247 249 253 249 249 251 238 175 145 134 130 116 128 159 179 184 \n108 179 183 200 237 234 246 245 220 167 182 159 136 123 141 131 \n109 146 159 167 163 187 202 240 242 248 248 248 246 244 248 253 \n251 251 252 252 248 249 248 251 250 247 242 247 252 253 246 246 \n246 249 251 248 252 248 251 244 165 120 123 136 156 168 157 142 \n119  88  70  77 125 186 239 224  92  63  51  45  32  90 217 220 \n226 231 235 239 241 235 212 190 152 123  97  90  95 100 110 113 \n164 166 168 169 167 166 165 167 163 161 171 189 212 222 228 235 \n241 197 137 164 194 206 212 216 227 241 238 239 245 245 184 140 \n159 181 192 204 214 225 240 240 247 244 248 244 243 247 246 247 \n246 240 237 239 244 249 238 241 245 239 245 237 236 237 243 245 \n244 242 243 240 235 245 240 244 248 245 252 247 246 247 247 242 \n239 236 236 242 248 243 243 243 241 248 239 241 247 253 252 249 \n249 251 251 251 248 249 252 251 243 244 249 248 247 246 245 242 \n244 248 246 241 235 241 246 250 247 246 245 249 243 241 241 249 \n254 251 243 232 231 245 242 237 244 246 244 245 247 245 249 245 \n246 246 251 251 248 244 248 246 250 251 245 238 248 249 244 245 \n248 243 249 251 249 244 241 244 245 246 249 232 150 149 136 134 \n132 150 126 125 109 111 118 117 117 135  91  92 106 112 145 158 \n143 132 133 151 181 212 237 188 150 140 184 211 210 209 239 248 \n253 250 250 244 244 245 246 238 190 169 206 210 213 218 221 231 \n248 241 239 246 242 244 251 246 230 210 241 250 251 252 252 253 \n251 251 247 244 246 252 247 242 251 251 246 242 247 251 246 245 \n250 252 252 252 252 253 249 246 250 252 253 252 247 251 253 253 \n252 251 252 253 250 250 252 248 246 247 246 246 251 254 255 255 \n255 255 251 249 252 254 254 255 254 254 254 255 254 255 253 252 \n251 251 253 254 252 247 244 251 252 248 249 252 251 250 246 248 \n246 243 250 252 252 253 253 253 247 252 252 250 251 248 254 252 \n249 252 253 254 253 253 254 252 247 247 253 251 252 254 254 253 \n254 253 252 254 254 254 254 252 252 252 255 254 254 255 253 249 \n249 248 251 253 255 254 254 252 254 255 255 253 251 246 251 253 \n254 254 253 251 249 254 253 251 249 252 252 246 251 253 249 252 \n253 252 248 246 246 245 227 169 140 130 131 116 136 156 191 165 \n106 153 189 189 238 225 239 252 241 236 195 152 130 124 142 135 \n109 148 167 154 160 187 201 241 249 248 246 244 248 246 251 251 \n252 251 247 247 245 250 251 252 251 248 248 251 252 248 251 251 \n250 253 252 251 247 250 247 251 239 178 119 120 134 143 161 171 \n162 138 105  86  76  75  97 119  74  60  64  46  35  97 238 241 \n246 249 249 249 247 246 243 245 245 247 225 190 151 128 109 102 \n154 160 163 164 168 170 170 169 168 164 164 163 167 179 195 219 \n240 227 159 150 185 199 213 216 225 249 224 228 231 245 220 154 \n141 174 181 199 211 218 238 238 239 242 239 237 237 245 249 245 \n243 248 242 241 244 250 239 241 245 239 249 240 227 226 247 245 \n241 248 243 243 239 245 243 246 246 242 252 249 243 241 240 243 \n239 237 236 238 243 242 246 241 242 247 246 244 237 243 246 251 \n239 246 247 248 248 252 251 249 243 240 246 248 248 245 239 235 \n236 232 244 251 246 240 249 253 251 249 245 245 238 240 237 241 \n249 252 240 237 230 233 240 242 247 244 248 249 250 245 240 240 \n240 238 248 251 249 249 247 246 244 243 244 240 245 245 247 251 \n252 244 247 250 247 244 246 247 241 246 251 233 147 147 138 132 \n132 153 120 123 120 113 118 117 109  90  86  94 108 113 146 156 \n140 135 134 151 182 218 243 200 160 139 172 204 214 199 237 244 \n249 244 243 240 241 245 247 248 204 175 195 210 213 219 225 225 \n245 242 238 249 245 247 238 225 197 214 252 253 253 252 253 250 \n252 254 252 249 248 253 248 242 249 252 252 250 248 252 248 244 \n252 252 247 248 249 249 249 249 250 251 251 245 248 254 254 254 \n252 248 246 251 253 252 253 253 251 248 246 246 249 250 252 254 \n255 253 246 247 251 253 255 254 251 253 254 254 253 253 255 255 \n254 252 250 251 253 249 253 254 251 247 248 251 254 254 254 253 \n252 250 251 247 249 251 252 253 253 251 254 253 250 250 253 252 \n252 250 253 254 253 254 251 250 251 252 253 252 253 254 252 251 \n253 254 255 255 254 254 253 251 247 246 252 253 253 255 254 254 \n253 252 254 254 253 254 255 255 252 252 255 255 253 253 252 254 \n251 250 250 249 249 253 253 249 249 251 252 247 251 254 252 254 \n252 250 241 247 250 250 228 163 137 126 130 112 141 153 201 155 \n107 137 194 184 235 228 244 252 245 245 202 154 127 119 142 136 \n114 147 170 150 150 188 197 240 248 245 243 239 244 251 249 250 \n253 252 251 248 247 250 250 251 252 250 252 249 249 248 248 248 \n251 253 251 251 253 252 252 253 249 238 169 119 123 132 143 153 \n164 169 150 124  98  85  75  68  64  56  54  48  42  62 155 190 \n215 234 247 247 249 249 243 245 245 248 250 236 231 223 204 189 \n140 144 149 152 157 161 165 167 171 170 171 171 170 165 166 166 \n178 192 174 143 168 196 206 214 222 247 248 242 234 243 236 186 \n140 157 175 190 208 217 227 240 239 239 235 236 240 248 243 248 \n247 242 236 240 242 240 241 243 238 242 243 226 225 232 243 241 \n238 240 240 246 247 249 250 246 246 244 250 243 240 244 241 240 \n239 236 242 236 236 234 238 237 240 245 239 240 240 245 239 240 \n237 239 246 243 241 243 242 245 245 245 243 243 241 241 236 234 \n235 237 238 242 247 247 252 253 249 250 250 246 243 242 239 246 \n253 251 244 240 235 234 239 242 244 242 243 242 244 243 242 241 \n244 244 244 246 246 246 251 252 244 246 244 242 245 244 242 248 \n251 243 248 251 247 247 245 247 247 254 251 231 146 146 140 131 \n130 153 115 136 121 114 117 115 111  93  88  95 108 117 151 155 \n142 135 135 155 184 224 245 222 168 143 152 193 216 196 230 242 \n243 237 240 240 241 245 251 253 226 192 180 208 211 219 225 220 \n243 247 245 249 230 201 193 194 203 242 246 252 253 251 248 244 \n250 253 250 250 252 244 244 246 249 248 250 252 249 249 246 248 \n252 249 249 249 247 249 253 252 247 249 252 251 253 253 250 252 \n252 253 250 251 253 254 254 252 251 253 253 252 251 249 254 254 \n249 249 247 250 248 250 254 253 243 242 248 252 254 253 255 254 \n253 254 254 254 253 251 251 250 245 248 250 249 253 255 254 254 \n255 254 253 253 253 249 247 250 251 250 253 255 253 251 250 252 \n251 248 251 253 252 253 252 250 250 250 252 253 251 253 250 251 \n252 253 251 251 251 252 247 249 247 251 253 253 254 255 255 254 \n254 253 255 255 255 255 254 254 250 252 253 254 251 252 253 252 \n251 251 252 247 252 252 252 250 251 252 251 251 254 253 252 249 \n252 250 242 249 253 252 217 160 134 121 125 106 145 148 208 142 \n108 128 185 178 234 233 242 249 239 235 198 160 123 112 141 133 \n112 142 180 138 151 194 194 235 251 250 246 248 250 250 247 247 \n250 253 253 251 250 247 250 248 249 252 252 251 252 252 254 253 \n251 253 253 251 254 254 254 252 249 249 243 192 120 114 122 128 \n135 148 170 179 165 136 106  91  82  74  67  63  53  53  52  63 \n 82  99 128 146 165 179 201 221 231 240 247 247 240 237 235 242 \n130 133 137 140 145 149 155 158 163 166 168 170 171 172 173 173 \n167 162 156 146 155 173 194 205 220 243 246 243 245 240 242 221 \n145 138 174 188 205 215 221 243 242 238 241 244 240 241 235 246 \n243 242 237 239 238 234 241 249 246 250 244 230 226 241 245 247 \n238 234 248 247 239 240 242 243 249 241 243 243 248 245 244 242 \n242 237 239 236 237 234 237 234 234 238 236 237 242 238 240 244 \n248 243 238 237 242 248 250 249 247 245 243 244 240 240 235 244 \n245 244 242 243 246 248 249 250 252 252 252 245 245 243 239 249 \n250 246 245 245 246 245 244 246 245 240 249 252 247 243 239 238 \n239 242 242 248 250 244 245 251 247 251 241 243 248 243 244 250 \n252 246 252 250 251 254 251 251 249 252 251 227 145 145 144 132 \n132 153 132 153 131 117 117 116 113  97  92  96 112 113 153 150 \n145 133 136 159 192 232 247 239 178 151 143 180 210 205 212 244 \n246 247 243 243 244 245 249 251 239 202 181 205 212 218 223 225 \n238 242 226 215 202 182 173 188 242 253 246 250 253 247 251 253 \n251 250 252 248 248 247 249 247 247 249 250 254 252 250 250 248 \n248 249 252 250 247 250 252 252 251 253 253 252 250 252 252 251 \n249 252 251 250 255 255 254 249 251 254 252 248 249 250 249 253 \n249 247 250 248 244 250 252 251 250 245 247 250 250 250 251 254 \n255 255 255 254 255 253 253 252 247 247 253 253 255 253 253 254 \n254 251 249 249 252 253 246 243 248 252 255 255 253 253 253 250 \n249 252 253 253 248 249 248 251 253 251 253 253 252 251 250 250 \n250 249 248 253 252 249 249 248 241 251 253 253 254 254 253 250 \n253 255 255 254 254 255 254 255 254 253 251 251 245 246 253 252 \n250 246 250 244 250 250 246 246 250 250 251 252 253 253 251 251 \n249 249 245 249 254 253 210 159 133 125 125 107 146 153 212 140 \n111 132 157 166 236 234 238 242 225 231 192 155 121 105 149 132 \n114 142 185 131 154 197 196 234 247 249 251 250 248 245 244 247 \n252 254 252 250 250 248 252 251 252 252 254 255 253 253 253 253 \n252 251 253 252 255 254 254 254 250 247 249 245 185 130 116 113 \n125 134 142 149 167 176 169 151 119  95  79  74  75  71  67  63 \n 65  68  70  74  78  84  91 106 126 141 170 190 209 222 236 243 \n115 117 122 124 130 134 138 142 147 149 156 159 161 164 168 170 \n170 169 166 161 155 152 152 158 175 215 231 225 235 239 245 242 \n175 127 158 176 199 210 217 232 244 243 246 243 239 246 239 237 \n242 248 241 236 241 236 230 232 238 246 243 249 239 245 240 243 \n240 234 244 244 246 248 250 248 249 246 242 240 243 242 242 246 \n243 237 242 236 233 235 239 246 242 237 245 247 245 243 241 243 \n247 249 243 246 243 242 242 249 250 250 247 243 246 237 234 238 \n244 245 249 246 246 246 242 247 249 247 247 239 246 248 244 246 \n250 249 246 247 247 243 246 252 241 238 247 252 250 245 241 244 \n242 245 246 246 248 248 249 249 238 242 241 243 248 242 244 245 \n247 244 250 251 250 251 250 250 250 248 251 224 147 143 145 132 \n134 144 159 142 138 120 117 118 122 117 105 107 126 122 159 146 \n145 133 141 164 196 235 252 249 198 161 138 169 198 212 197 231 \n250 252 252 250 244 248 251 246 238 208 185 195 209 216 220 224 \n230 226 191 189 201 174 170 223 252 251 249 252 249 251 251 250 \n251 248 253 251 246 251 248 247 246 246 253 252 245 247 251 250 \n247 244 250 253 250 251 252 251 249 251 252 246 245 253 254 254 \n251 245 244 247 255 255 253 253 254 254 254 251 250 252 254 253 \n255 253 249 248 247 245 251 251 251 250 251 253 253 251 250 253 \n254 255 255 255 253 252 252 252 248 247 249 250 253 255 254 254 \n253 252 254 249 251 253 244 242 253 254 254 254 254 255 254 253 \n243 243 245 246 247 251 255 254 253 254 254 254 254 255 254 250 \n245 249 252 252 250 247 248 251 251 252 252 251 253 255 255 255 \n255 255 255 253 251 253 253 254 254 252 248 250 253 251 248 244 \n253 252 246 243 240 245 247 247 252 250 248 247 250 249 250 248 \n242 248 249 252 247 250 198 153 131 124 126 110 155 161 216 148 \n106 127 144 152 233 236 240 246 221 230 185 151 112  99 163 126 \n119 145 178 126 147 192 196 231 245 244 246 247 249 248 249 247 \n252 248 243 247 252 252 249 249 254 252 253 255 254 251 249 253 \n251 251 250 252 254 250 252 251 247 242 240 251 250 220 159 137 \n122 126 146 141 137 138 150 171 189 186 153 139 120 103  93  86 \n 77  71  67  64  64  64  63  63  66  68  69  71  81  89 109 125 \n102 104 111 113 119 122 126 131 135 140 146 148 151 154 160 160 \n162 168 167 168 167 168 165 163 162 170 173 174 193 207 228 238 \n206 139 143 172 191 204 216 221 249 246 238 237 240 246 247 241 \n247 251 236 229 235 237 227 225 231 231 234 244 235 240 237 239 \n238 238 244 246 244 248 243 246 248 252 249 249 245 247 244 239 \n245 240 240 239 239 245 242 250 249 240 244 243 243 245 245 246 \n244 245 248 249 246 244 250 247 244 249 250 251 245 240 239 240 \n240 242 244 244 246 247 250 249 247 250 250 245 249 248 249 248 \n246 241 242 247 249 245 247 247 243 241 241 250 247 241 245 244 \n243 248 251 247 240 242 245 248 244 242 247 251 245 244 241 242 \n240 244 248 251 250 248 248 246 251 251 254 221 148 141 147 131 \n134 143 174 138 136 126 123 127 146 158 174 139 137 131 162 145 \n147 129 146 169 195 237 250 252 217 171 139 155 194 211 198 221 \n245 249 251 246 244 245 248 244 240 219 187 187 207 213 218 226 \n227 226 197 189 191 178 191 244 250 252 253 253 252 249 247 251 \n251 247 250 253 248 252 251 248 250 252 250 252 251 252 251 250 \n251 250 252 253 251 247 244 247 250 249 252 249 250 251 253 252 \n249 248 252 253 254 254 253 252 252 253 254 254 254 255 253 253 \n254 250 252 252 252 250 249 252 247 248 251 253 254 251 249 253 \n254 254 255 255 254 254 252 250 250 249 247 247 249 254 255 255 \n255 254 254 249 249 252 249 249 255 254 253 254 255 253 252 250 \n243 244 249 252 253 254 255 254 254 253 254 254 254 255 254 254 \n249 253 254 253 246 238 245 250 251 249 249 251 252 254 255 254 \n255 255 255 254 254 255 254 253 253 252 253 254 254 251 245 243 \n250 253 251 244 242 246 246 245 249 248 242 245 248 252 250 252 \n252 252 252 251 240 248 188 149 131 125 124 116 160 164 216 158 \n104 123 161 165 228 238 247 246 243 241 180 148 110  95 185 127 \n128 154 171 119 142 186 197 233 246 241 241 242 248 248 250 251 \n252 249 247 244 248 252 253 251 253 252 251 253 252 249 237 244 \n248 248 249 253 252 249 249 250 249 244 245 249 252 251 228 179 \n131 134 152 153 145 141 130 132 153 174 179 180 180 170 165 166 \n148 136 118 100  84  76  67  63  64  64  62  62  63  63  61  64 \n 79  82  88  95  99 102 108 113 122 125 130 132 134 138 142 146 \n150 151 154 160 165 167 168 171 171 172 168 164 159 161 163 169 \n172 153 141 171 179 193 204 211 233 237 235 232 243 247 237 237 \n237 242 235 240 237 239 235 231 233 231 238 236 234 239 242 246 \n248 244 240 250 245 243 239 249 250 248 249 246 247 245 244 240 \n239 236 243 239 237 252 248 241 245 246 242 239 249 247 243 243 \n247 250 246 245 240 233 245 250 242 241 248 248 242 240 236 240 \n234 239 240 241 239 237 247 240 244 249 251 249 250 247 248 251 \n249 243 244 254 253 253 251 249 245 242 246 247 249 247 246 248 \n245 241 246 244 247 249 251 251 253 251 252 251 252 249 243 243 \n244 249 248 241 246 249 250 247 248 249 252 215 147 139 150 132 \n133 142 180 160 183 188 197 218 243 246 244 230 162 122 162 145 \n144 127 149 174 200 241 250 248 229 188 149 145 190 203 210 207 \n240 250 251 243 247 245 246 242 244 242 192 179 203 210 216 222 \n227 233 207 186 182 193 231 251 245 245 249 252 248 250 242 246 \n249 247 245 245 248 253 248 249 246 245 242 245 250 250 250 252 \n252 250 252 253 250 247 245 245 248 243 249 252 252 251 250 250 \n249 252 252 251 251 250 249 251 252 247 249 254 254 254 254 255 \n252 246 250 248 249 251 248 253 253 252 254 255 253 252 252 251 \n249 247 254 255 255 250 248 245 250 249 249 252 254 255 255 255 \n252 252 253 251 248 251 253 253 248 248 251 252 254 254 254 254 \n250 246 254 254 253 255 255 254 254 253 252 254 254 253 252 249 \n251 254 253 252 252 249 250 251 254 253 253 254 255 252 254 253 \n254 254 255 255 254 252 254 254 254 252 254 255 253 253 251 248 \n243 245 248 248 245 248 250 250 247 251 253 252 254 253 249 253 \n253 251 249 253 251 248 174 148 126 126 122 124 165 172 213 162 \n106 123 152 161 224 238 244 249 233 230 174 149 110 101 152 106 \n134 154 184 110 135 186 199 232 248 250 246 245 244 245 251 251 \n251 250 252 249 248 251 249 248 253 252 251 253 254 250 246 248 \n245 245 251 252 250 247 247 246 250 252 250 250 251 249 252 251 \n213 159 131 129 129 131 129 138 149 145 156 158 161 157 163 162 \n161 162 169 172 174 144 137 137 119 102  88  83  74  68  62  60 \n 74  74  76  78  86  85  93  98 108 110 115 118 122 126 130 135 \n136 140 144 149 155 157 159 163 164 166 168 169 170 170 168 163 \n157 151 148 153 159 169 185 200 217 227 242 239 245 250 245 243 \n240 232 233 237 241 242 228 230 232 228 237 236 239 239 246 248 \n250 242 243 249 245 249 249 246 244 249 246 244 250 245 237 238 \n240 245 247 243 247 252 234 236 241 239 238 239 245 245 243 237 \n243 250 247 246 242 234 242 246 249 244 248 246 229 230 228 221 \n219 230 234 236 243 236 244 239 241 249 250 248 244 242 248 253 \n253 249 244 248 253 248 243 246 246 247 248 248 247 249 248 252 \n247 240 243 240 243 247 249 249 246 248 252 251 253 253 252 247 \n249 249 246 241 243 249 246 244 242 243 244 202 148 139 150 132 \n136 143 185 211 242 238 244 242 246 244 247 246 228 156 162 147 \n144 128 151 179 204 245 250 248 236 201 160 139 179 196 213 198 \n237 248 252 243 246 246 241 242 245 251 205 181 194 206 214 221 \n226 230 191 195 211 230 245 252 247 251 248 250 250 247 248 248 \n247 240 241 244 247 252 252 250 250 251 245 250 252 253 251 250 \n251 248 249 249 250 248 250 244 249 248 251 251 249 247 252 247 \n246 250 252 248 246 249 251 253 250 245 248 253 254 252 250 254 \n253 251 248 251 253 252 249 251 251 249 250 255 253 250 250 250 \n249 250 254 255 254 250 249 252 254 253 255 254 254 255 255 255 \n253 253 252 252 251 249 252 254 253 253 254 255 254 254 254 254 \n250 250 253 253 253 252 255 255 254 254 254 255 254 253 252 252 \n254 255 253 250 251 248 248 247 253 250 252 251 251 251 252 252 \n252 255 255 255 254 254 254 254 253 248 254 253 252 253 250 246 \n246 243 246 249 249 249 249 248 250 251 252 253 253 253 253 252 \n254 253 253 254 253 244 168 146 128 126 121 129 165 182 209 170 \n106 126 144 147 222 242 249 246 219 222 168 151 106 109 126  96 \n139 158 186 108 132 190 193 228 246 247 251 249 244 244 251 252 \n253 249 252 253 250 253 253 253 254 253 252 254 253 248 248 253 \n251 247 250 250 253 252 250 249 250 249 253 254 251 251 248 251 \n250 239 206 175 139 127 123 123 126 129 131 133 139 144 151 146 \n138 136 134 138 141 143 148 163 168 168 159 161 150 134 114  97 \n 63  63  64  64  72  73  78  85  85  86  91  97 104 109 115 118 \n124 128 130 134 140 140 143 145 151 152 157 159 162 166 168 169 \n171 168 167 164 161 156 153 153 166 181 205 211 223 236 235 242 \n238 234 236 236 240 239 237 242 235 241 237 242 247 244 248 244 \n245 246 241 241 240 245 243 244 245 248 242 243 247 243 243 244 \n247 239 252 243 245 251 244 242 246 241 240 235 246 249 243 236 \n242 250 247 245 240 238 243 248 241 238 246 239 226 221 216 212 \n211 214 220 219 235 239 237 236 249 249 244 248 244 245 247 246 \n253 247 249 252 252 250 246 247 245 244 248 248 244 245 239 246 \n245 234 234 233 237 242 247 250 248 248 245 245 248 251 248 246 \n249 247 245 239 246 245 248 248 241 240 243 195 147 137 153 129 \n138 140 196 238 243 245 246 245 244 242 242 240 242 173 164 150 \n138 129 154 181 203 241 250 247 248 221 171 145 162 189 207 194 \n229 250 248 247 241 243 244 246 246 245 215 186 183 204 214 218 \n224 229 232 225 245 244 248 250 249 248 246 244 248 251 250 252 \n249 250 253 250 252 252 250 247 250 253 247 250 254 248 245 247 \n252 252 251 249 251 251 250 246 250 249 248 245 248 246 250 251 \n244 246 250 249 248 251 250 252 253 251 251 252 253 248 248 250 \n252 251 249 253 253 251 250 250 250 250 250 250 253 252 252 254 \n255 254 254 253 254 252 252 255 254 255 255 254 254 254 255 255 \n254 255 254 255 252 249 252 252 255 255 255 255 254 254 255 255 \n250 248 254 255 254 252 252 250 250 250 252 254 254 254 254 254 \n255 253 252 250 250 251 252 253 251 246 251 252 251 246 251 255 \n254 255 254 253 255 255 255 255 255 253 254 253 255 254 254 252 \n252 247 239 244 254 248 248 248 252 248 245 248 253 254 252 245 \n247 247 252 253 253 235 158 142 129 127 118 136 162 190 196 173 \n109 131 140 157 229 234 250 238 230 229 159 148 102 119 106  91 \n144 158 180 105 131 188 192 222 246 243 249 245 241 250 247 245 \n250 252 252 253 251 251 251 254 252 252 250 253 254 253 249 251 \n253 251 249 252 252 254 250 251 249 243 248 252 252 251 244 246 \n250 253 252 248 238 230 222 217 221 227 225 194 138 119 118 125 \n130 130 131 136 141 140 130 132 136 135 142 149 156 165 172 179 \n 45  47  51  54  63  63  70  76  77  76  78  82  87  92  97 100 \n110 115 121 124 127 128 133 134 137 139 143 148 150 155 158 162 \n165 164 167 169 173 173 168 168 165 165 163 162 169 177 193 211 \n222 231 242 241 241 244 240 242 240 246 242 241 239 243 242 244 \n247 245 243 246 245 246 246 242 244 249 244 246 241 239 239 247 \n245 245 250 243 243 247 248 246 249 246 244 241 245 248 247 243 \n243 246 249 249 239 246 247 248 236 235 242 233 222 224 221 215 \n219 220 222 227 233 245 245 242 249 248 245 243 246 245 244 240 \n244 241 250 249 247 248 243 242 245 244 241 237 239 245 241 248 \n250 242 238 239 240 242 242 245 245 245 241 242 248 253 247 242 \n245 249 247 241 251 245 249 250 248 244 246 193 150 138 150 128 \n139 142 203 242 249 246 242 242 249 247 247 241 238 168 163 145 \n141 131 158 186 207 236 244 249 247 236 179 155 149 187 204 202 \n213 245 243 243 244 246 247 249 247 249 227 192 179 198 211 213 \n223 229 235 227 246 247 248 252 250 248 249 248 250 251 252 248 \n250 252 250 248 247 250 252 247 247 252 249 250 251 249 248 252 \n253 252 250 249 250 250 250 250 252 252 248 249 253 253 252 246 \n244 247 250 253 252 253 254 254 252 249 251 252 251 250 246 244 \n246 249 252 252 251 250 252 252 253 251 251 251 251 253 252 253 \n252 254 253 252 254 254 254 254 254 251 253 255 253 250 255 255 \n254 254 252 250 248 252 254 252 254 254 254 253 254 255 254 255 \n253 252 253 254 254 248 247 249 251 251 250 250 249 252 255 255 \n255 253 253 252 252 252 251 251 250 251 252 251 252 251 250 252 \n255 254 255 254 255 254 254 254 255 254 255 254 255 253 252 252 \n251 251 246 247 254 253 251 240 239 239 244 246 251 251 247 245 \n247 250 252 252 250 226 154 141 131 126 113 143 166 196 190 160 \n115 130 158 134 247 232 242 220 237 231 156 145 107 120 100  85 \n150 160 174 104 126 187 185 220 250 243 247 244 243 248 249 248 \n248 249 251 253 250 250 250 252 251 253 253 249 252 254 252 254 \n253 253 247 244 248 252 251 247 247 246 244 249 253 252 247 246 \n250 249 250 249 245 247 250 246 240 241 249 251 230 185 125 110 \n111 111 110 115 119 125 123 127 139 136 136 137 136 135 139 143 \n 30  32  36  38  42  45  51  57  64  67  71  75  77  79  83  82 \n 85  90  96 100 105 110 115 118 120 122 125 129 133 138 141 159 \n149 151 153 158 162 163 166 169 172 172 183 175 171 169 167 166 \n168 170 179 188 204 214 224 234 242 243 242 240 245 241 244 241 \n242 240 244 244 248 249 249 245 249 248 247 245 238 239 240 240 \n244 246 246 244 232 235 239 243 246 248 245 244 248 247 242 236 \n243 244 238 247 248 244 240 244 240 235 233 226 233 230 227 225 \n233 235 233 234 231 240 238 234 241 246 242 245 247 241 242 246 \n241 245 247 246 244 240 239 243 245 239 238 236 240 246 244 250 \n251 245 244 240 244 243 245 247 249 248 240 239 238 243 249 242 \n243 246 246 248 254 252 251 249 246 247 246 185 153 138 151 131 \n140 143 206 238 243 243 242 242 247 248 250 252 238 164 162 142 \n139 135 165 190 211 238 249 253 249 251 201 163 144 179 199 208 \n197 234 244 243 242 239 241 246 249 250 243 208 180 194 210 212 \n221 229 233 245 248 245 247 250 251 251 251 248 247 252 253 250 \n252 253 254 251 248 248 252 252 252 253 253 250 249 251 248 243 \n246 252 251 253 247 246 249 252 253 251 247 254 254 253 253 252 \n251 252 252 254 253 255 253 252 251 247 250 251 248 247 250 247 \n247 246 250 252 252 251 253 250 249 246 249 252 253 254 249 251 \n253 254 252 248 251 253 254 255 254 253 252 248 248 252 251 253 \n255 254 250 253 246 250 252 253 255 255 254 254 253 254 255 255 \n254 253 250 254 254 252 248 250 247 240 241 247 248 248 253 253 \n255 255 254 253 252 251 253 252 247 253 255 254 254 253 255 254 \n255 255 255 255 254 252 254 254 253 253 255 255 253 252 252 255 \n250 249 249 252 248 245 248 238 234 238 242 241 247 250 249 248 \n241 247 248 246 250 221 149 141 136 123 117 151 166 199 199 183 \n123 119 180  91 174 218 238 229 205 196 154 144 108 121  93  89 \n155 169 162 103 125 195 180 213 247 239 242 243 251 248 247 247 \n251 249 251 252 254 255 253 252 250 252 251 252 250 252 252 253 \n254 254 251 249 251 252 253 252 248 245 247 251 253 252 251 250 \n251 250 250 250 251 248 251 253 250 246 247 252 251 252 233 198 \n159 139 123 118 111 107 108 111 114 115 119 119 125 132 136 136 \n 28  28  30  31  32  35  38  44  48  52  60  62  65  70  72  75 \n 78  78  80  84  88  91  93  96 101 105 111 114 119 126 131 135 \n137 141 146 148 150 154 155 160 164 168 183 175 173 174 176 175 \n176 173 168 167 168 168 171 178 191 201 216 223 234 237 243 246 \n239 231 235 246 252 247 248 251 245 245 246 246 243 238 238 231 \n239 246 241 239 233 234 240 243 244 249 243 242 246 247 239 240 \n250 247 246 245 242 243 246 246 241 241 237 234 236 236 236 239 \n235 239 236 238 243 242 240 241 241 246 248 248 243 238 234 237 \n239 244 246 244 246 245 245 250 248 244 247 245 246 244 242 246 \n242 241 245 245 247 248 245 248 254 251 241 245 247 242 238 245 \n244 244 246 245 249 253 254 253 251 246 244 180 153 135 157 127 \n144 145 209 238 240 245 242 243 248 252 254 254 235 159 158 148 \n134 136 167 192 216 250 254 251 248 251 222 170 147 169 199 207 \n198 224 241 241 245 243 243 244 250 246 246 224 186 187 212 211 \n219 226 232 243 244 246 247 247 251 251 250 248 247 251 251 251 \n247 249 250 249 251 251 247 250 249 250 251 246 246 250 247 245 \n249 250 249 253 251 248 246 252 253 254 251 250 253 252 251 253 \n252 251 251 253 252 253 252 251 251 248 254 252 245 243 252 250 \n251 251 251 253 251 250 254 253 251 248 251 249 247 251 248 247 \n251 253 254 254 251 252 254 255 255 253 253 252 250 251 251 252 \n255 255 253 254 250 253 251 252 255 255 255 255 254 253 254 253 \n253 249 250 251 249 249 246 242 243 247 243 246 249 251 245 249 \n251 249 246 251 246 246 251 253 250 252 255 254 252 252 254 255 \n254 254 253 255 255 253 255 255 254 254 255 254 254 254 254 254 \n249 250 252 252 244 236 244 239 243 249 247 250 251 247 252 252 \n246 247 249 251 251 211 147 144 135 123 118 159 163 202 200 192 \n132 117 192  92  89 114 194 237 153 174 152 141 107 123  93  90 \n158 176 157 103 123 190 181 212 251 247 245 248 252 252 247 245 \n248 252 251 250 252 255 254 253 253 252 251 254 250 254 253 252 \n254 254 253 252 252 252 249 248 248 251 251 252 249 246 251 249 \n250 252 252 248 250 253 253 253 254 254 253 252 249 248 251 251 \n242 230 215 204 181 164 143 127 115 109 106 106 111 113 118 119 \n 27  26  27  28  29  30  32  34  38  41  45  48  50  53  55  56 \n 60  62  65  69  74  76  81  81  82  83  84  85  91  96 107 113 \n117 120 126 127 132 133 140 144 149 151 155 158 159 161 164 167 \n171 172 173 174 173 175 175 171 169 167 167 167 167 174 186 195 \n205 210 218 224 234 243 241 237 239 248 249 241 229 232 231 233 \n239 231 240 243 232 232 246 248 247 243 243 243 241 245 248 243 \n235 233 244 244 245 248 241 241 239 241 247 248 243 245 247 246 \n239 238 235 238 243 240 251 244 245 246 234 236 240 237 246 245 \n248 248 246 247 242 244 248 237 241 241 246 243 247 248 244 239 \n243 251 244 246 248 252 249 249 249 247 249 245 242 241 243 245 \n239 238 247 247 246 252 251 253 250 251 247 179 152 135 157 126 \n143 148 211 242 238 242 245 245 244 247 249 249 227 155 157 149 \n132 138 170 194 223 248 251 253 253 253 239 184 152 157 192 204 \n204 208 240 245 249 246 243 245 248 238 235 229 193 182 203 208 \n217 222 227 237 250 249 247 248 246 244 245 247 245 248 250 252 \n250 249 249 250 253 253 253 252 251 245 246 248 250 249 242 247 \n248 252 251 251 248 243 244 249 251 252 254 253 253 250 248 252 \n248 248 252 254 253 251 251 251 252 250 253 252 248 244 248 252 \n251 252 253 250 250 253 253 251 253 254 253 252 251 253 246 248 \n251 254 255 252 252 253 254 255 255 254 254 254 253 253 252 254 \n255 253 253 253 253 254 255 255 254 254 253 253 253 251 254 254 \n254 254 252 250 251 249 251 247 237 239 238 244 250 247 246 246 \n246 243 244 249 238 242 250 252 254 254 253 251 250 252 252 254 \n251 252 251 254 255 255 255 253 249 251 251 244 248 254 255 253 \n250 245 246 247 241 249 250 250 244 240 248 249 246 247 254 252 \n249 249 247 247 249 199 147 146 127 120 120 171 164 208 202 192 \n142 116 197 103  75  75 138 210 104 172 147 143 113 123  92  94 \n152 183 146 104 122 183 182 210 251 250 251 249 251 252 248 247 \n248 249 254 253 253 254 254 254 252 252 255 255 248 249 252 252 \n253 251 247 247 250 252 247 242 242 249 253 253 248 245 249 250 \n250 247 251 251 251 250 252 249 251 254 254 251 251 251 250 252 \n252 250 248 250 250 249 245 237 224 205 184 164 142 131 117 113 \n 26  24  25  27  29  29  32  34  36  37  42  43  44  46  47  47 \n 47  50  52  55  60  63  68  70  73  75  77  78  81  80  87  90 \n 90  90  95 101 111 115 119 126 134 137 145 146 147 150 152 154 \n159 163 166 169 168 169 174 174 176 176 178 176 176 171 169 169 \n167 168 171 174 182 201 210 215 222 232 240 240 236 237 231 236 \n246 237 241 249 239 241 242 243 248 242 249 249 238 243 240 239 \n239 245 239 241 242 243 240 240 241 246 248 249 244 243 250 246 \n241 241 238 243 239 243 249 246 249 247 239 228 235 244 241 238 \n245 246 244 249 242 245 250 242 245 244 244 248 244 246 242 239 \n241 246 247 250 252 252 246 251 248 248 247 242 239 234 239 243 \n243 243 244 247 245 243 244 247 251 252 244 174 154 138 153 128 \n149 152 217 242 237 247 247 248 249 246 245 246 221 153 154 149 \n130 142 170 193 229 248 250 249 252 252 248 202 159 152 185 198 \n207 201 237 245 243 242 248 250 247 243 229 227 203 186 192 206 \n216 219 223 230 248 249 251 251 251 251 251 252 251 246 249 251 \n249 245 249 252 254 255 252 250 251 250 249 248 246 251 252 249 \n250 253 249 251 251 250 249 245 246 250 254 254 254 252 253 255 \n253 254 254 253 253 252 250 251 253 255 253 252 247 250 247 249 \n252 251 252 252 251 253 252 251 255 255 254 253 250 252 245 250 \n253 253 255 252 252 253 255 254 254 254 253 254 255 252 248 251 \n253 252 252 253 253 253 255 254 254 253 252 253 250 252 255 255 \n253 251 252 249 251 251 254 248 237 236 236 243 249 247 252 251 \n251 250 252 252 249 252 249 250 253 253 251 251 253 254 253 254 \n254 252 253 254 254 255 255 254 251 252 252 244 249 253 252 254 \n252 250 247 240 247 250 253 250 245 241 251 250 247 249 252 251 \n251 247 246 247 246 192 144 152 123 120 126 173 167 212 201 193 \n149 120 194 109  72  73 175 186  99 172 148 145 114 121  89 102 \n150 188 144 103 118 180 185 209 247 248 249 251 251 248 252 248 \n250 251 255 254 254 254 254 254 253 254 252 252 251 250 250 248 \n250 250 249 250 253 254 252 247 243 252 253 253 253 252 250 249 \n249 248 247 251 251 251 250 248 250 253 254 254 253 253 248 252 \n249 244 249 251 251 253 250 244 244 243 245 240 231 222 206 196 \n 27  25  26  25  26  27  30  32  33  34  37  40  40  42  42  43 \n 41  41  44  45  48  52  52  54  55  58  60  63  63  65  70  72 \n 77  80  81  80  78  80  89  93 101 109 115 124 134 140 137 136 \n140 144 150 155 155 158 160 164 165 166 169 171 174 174 177 178 \n178 176 178 176 173 169 165 163 164 173 186 195 202 206 215 231 \n241 227 227 228 229 238 246 251 243 246 247 245 249 245 235 241 \n242 244 245 242 246 247 246 249 242 242 248 247 247 242 249 243 \n241 244 239 243 235 245 247 250 240 231 235 231 230 246 244 242 \n244 245 243 249 240 243 245 244 241 246 248 249 245 244 244 241 \n243 247 246 248 244 245 235 238 234 230 237 242 238 240 235 234 \n243 238 239 248 241 242 244 247 248 244 238 166 157 139 149 124 \n153 153 221 241 241 242 242 244 249 248 245 252 219 156 153 161 \n129 144 174 194 234 251 248 244 245 238 249 219 167 153 171 196 \n209 196 230 247 239 238 249 247 241 232 217 208 220 189 181 201 \n212 220 224 224 247 253 250 248 245 244 249 248 251 251 251 249 \n249 246 248 253 251 249 248 251 252 254 251 251 251 254 253 250 \n246 242 245 250 249 252 248 252 249 251 251 253 253 251 250 251 \n254 255 254 253 253 252 252 253 254 254 250 252 254 253 249 250 \n253 250 247 251 251 252 254 253 252 253 255 253 251 253 250 248 \n253 253 252 254 254 254 254 254 254 255 255 255 252 253 253 254 \n251 250 252 249 253 255 255 255 255 255 254 253 253 254 253 245 \n245 249 253 252 251 254 253 250 248 252 249 251 253 252 254 252 \n253 254 253 252 249 248 247 248 253 252 250 252 254 255 254 254 \n250 248 244 249 253 254 255 254 254 253 250 249 250 253 246 243 \n247 249 247 245 249 253 250 248 245 243 249 245 247 244 244 243 \n242 243 248 252 243 186 145 143 120 116 135 177 175 212 202 188 \n155 125 199 119  68  82 211 182 143 179 136 181 130 117  89 107 \n157 194 136 105 112 179 187 205 251 250 248 252 252 251 250 250 \n248 251 253 251 251 249 251 252 251 251 250 250 253 252 252 250 \n250 251 251 250 251 253 253 252 247 251 253 251 251 253 253 248 \n253 252 240 246 252 253 252 252 253 254 253 254 252 251 248 251 \n254 253 253 254 252 254 253 248 247 245 246 249 250 248 248 248 \n 24  23  24  25  26  27  27  29  33  32  34  38  38  39  43  42 \n 39  39  42  41  45  47  48  48  48  50  48  49  52  52  56  58 \n 63  64  67  69  65  69  76  77  82  85  90  93 107 122 122 114 \n120 123 133 140 142 145 149 149 149 151 155 157 163 164 168 172 \n174 171 176 179 178 179 180 179 177 178 178 176 171 170 171 176 \n183 179 183 194 204 212 228 238 241 245 245 245 241 226 229 241 \n239 237 244 245 246 244 242 247 245 243 247 243 241 239 238 240 \n241 242 244 246 242 248 242 238 236 235 235 232 237 245 245 246 \n242 248 247 248 241 241 250 245 238 245 245 249 250 248 249 248 \n248 249 242 241 241 239 244 249 242 237 238 241 235 236 240 242 \n247 247 245 249 249 251 250 250 243 241 235 161 155 138 147 125 \n155 157 221 244 246 246 249 250 251 251 243 250 207 154 152 164 \n127 148 179 195 237 250 249 238 238 236 246 237 174 155 161 189 \n207 198 218 245 237 238 245 247 241 240 237 232 231 198 177 196 \n212 218 222 224 238 253 252 251 246 247 252 254 254 252 250 252 \n252 250 250 250 242 243 248 249 251 253 252 248 251 252 253 252 \n246 243 244 250 251 250 248 252 249 252 254 254 253 252 254 254 \n254 254 254 253 252 251 253 253 252 253 252 251 253 247 244 252 \n254 252 248 248 248 252 253 250 248 250 253 254 255 253 250 249 \n250 251 253 253 254 253 253 254 255 255 255 255 253 254 252 252 \n254 253 252 252 255 255 255 255 255 254 252 248 254 254 253 252 \n246 244 251 246 244 245 246 249 249 250 250 252 254 254 252 246 \n253 254 253 252 247 252 251 252 250 247 251 253 254 255 254 255 \n252 245 238 242 251 250 248 247 252 251 242 247 254 253 246 249 \n250 249 241 248 251 251 247 239 233 228 241 241 235 230 238 245 \n240 240 246 252 237 178 147 138 122 114 145 173 181 220 206 198 \n159 132 202 141  64 109 211 155 149 181 134 156 126 115  94 113 \n156 196 137 105 115 177 192 204 250 252 251 251 252 252 252 250 \n251 251 251 250 249 249 250 251 251 248 252 250 251 252 253 252 \n253 252 251 252 254 254 253 254 253 250 250 246 250 252 253 251 \n251 248 244 246 249 251 252 252 252 254 253 253 250 252 255 251 \n254 253 249 252 252 250 252 252 251 251 251 252 251 251 250 246 \n 25  24  24  25  24  24  26  27  29  30  33  35  37  38  40  41 \n 40  40  40  40  42  44  43  43  44  46  44  44  46  45  46  48 \n 48  48  50  52  53  55  58  61  65  68  71  75  77  84  88  86 \n 84  86  92  97 104 109 116 122 124 126 136 142 146 149 154 164 \n164 158 164 166 173 171 170 171 176 181 183 182 185 185 181 181 \n181 178 173 170 169 170 171 176 184 196 203 209 213 211 223 236 \n235 236 236 242 239 240 241 243 246 243 246 247 240 238 240 238 \n242 241 236 237 245 247 238 242 237 233 227 224 232 231 230 228 \n240 247 252 252 244 241 246 245 241 239 239 246 248 246 251 253 \n254 253 248 246 245 241 240 245 238 235 242 244 241 241 244 243 \n248 251 252 249 249 249 247 244 236 238 232 156 150 136 141 129 \n157 158 220 236 246 250 248 245 246 247 243 249 198 155 148 167 \n124 150 179 198 237 239 243 243 246 245 246 250 192 162 151 173 \n203 213 203 234 244 244 246 243 254 243 231 235 240 213 180 181 \n209 215 223 226 230 251 251 250 251 252 254 253 254 247 251 249 \n250 253 248 250 253 251 250 252 252 252 253 252 252 251 247 250 \n251 241 243 247 249 252 251 250 252 252 254 251 251 251 252 252 \n253 253 254 253 251 249 253 255 253 253 254 254 254 254 249 252 \n255 254 251 250 252 253 252 250 250 251 252 253 252 252 249 250 \n253 253 250 252 254 252 254 254 254 254 251 251 253 255 254 254 \n255 255 255 255 255 254 255 255 255 255 253 252 251 253 253 251 \n247 251 251 246 247 250 247 247 246 252 255 255 254 254 251 247 \n253 253 254 253 254 254 254 252 247 249 253 254 255 253 248 248 \n253 252 250 250 251 250 252 254 253 247 245 253 253 252 242 236 \n243 240 234 238 247 252 249 242 234 229 232 236 240 239 246 247 \n243 248 245 246 234 171 142 134 125 116 153 166 189 228 208 199 \n170 136 203 162  67 167 175 114 129 178 142 144 117 116  99 117 \n152 199 142 106 115 179 197 206 245 250 249 249 251 250 251 250 \n250 252 246 246 251 251 251 253 254 249 252 251 248 249 249 249 \n253 253 254 254 255 253 253 253 254 253 251 248 249 249 252 253 \n253 252 251 248 249 250 249 250 247 248 251 251 250 249 253 253 \n251 251 250 247 250 253 252 254 252 249 253 252 253 252 253 252 \n 26  23  22  23  24  24  25  28  28  29  32  35  36  37  40  41 \n 37  39  42  41  42  43  41  42  42  42  43  43  44  43  43  44 \n 43  44  45  47  47  47  52  53  54  57  57  60  65  67  68  70 \n 71  74  78  80  80  83  91  98  98 102 110 116 124 131 138 143 \n145 145 148 152 164 160 156 156 161 164 172 175 175 177 180 184 \n185 185 185 185 188 191 184 185 185 181 179 179 177 177 183 187 \n194 198 207 217 218 224 237 241 244 240 247 246 243 240 239 244 \n245 235 236 241 244 243 243 243 243 241 228 231 227 223 238 236 \n234 236 242 248 235 241 242 238 240 243 241 248 244 246 247 247 \n254 253 248 245 249 251 246 241 235 235 242 240 241 246 242 245 \n250 249 246 246 248 243 246 243 236 240 230 155 153 134 140 129 \n161 162 221 239 247 252 253 251 242 239 242 251 189 153 144 162 \n123 153 179 199 245 245 245 245 246 248 246 252 208 172 148 160 \n198 218 199 227 240 245 248 248 253 242 226 228 239 229 184 175 \n207 213 222 225 226 246 252 250 252 254 255 254 254 250 248 245 \n248 252 250 245 251 252 253 254 253 251 249 248 253 250 247 248 \n249 250 251 251 248 250 252 248 250 251 252 248 250 250 250 252 \n250 250 253 253 252 251 253 255 253 254 254 254 255 254 254 253 \n254 254 254 254 254 254 254 251 247 249 252 251 251 252 252 252 \n253 251 250 252 253 247 252 254 251 251 247 250 254 255 255 254 \n255 254 253 253 255 253 253 255 255 252 253 253 254 255 253 252 \n253 254 255 255 254 253 248 250 252 254 254 253 249 250 255 253 \n252 245 248 251 252 252 255 253 250 252 252 254 255 253 248 244 \n248 252 253 255 254 254 254 253 250 245 247 253 253 251 245 243 \n247 249 241 239 237 244 253 250 240 241 244 247 252 252 252 253 \n244 244 245 244 225 165 140 132 125 114 164 163 196 239 207 198 \n173 141 204 161  97 201 136  91 127 171 146 137 115 117 103 127 \n152 201 143 110 116 179 198 204 242 246 251 250 251 251 250 252 \n250 248 248 248 252 250 253 252 255 255 254 253 251 250 251 251 \n253 251 251 248 254 251 248 252 253 252 253 252 253 251 249 251 \n252 251 252 251 253 253 252 251 250 250 251 252 251 250 253 253 \n253 251 250 251 252 253 254 252 245 248 248 247 247 250 250 249 \n 25  25  23  23  25  24  24  26  28  28  30  35  38  38  39  39 \n 39  38  40  41  40  39  41  42  40  41  41  43  43  42  43  42 \n 42  43  43  44  44  43  45  46  48  48  49  51  53  54  56  59 \n 58  59  60  59  62  63  68  74  78  80  83  85  88  91  92  97 \n107 110 113 116 126 131 129 131 137 147 161 167 158 159 161 165 \n168 170 178 175 180 182 185 188 190 193 195 196 194 189 192 192 \n187 185 179 175 169 169 176 178 186 193 199 206 208 218 221 226 \n229 228 238 238 238 237 234 244 238 247 237 241 227 233 245 248 \n237 231 237 246 237 242 242 245 242 248 252 249 240 237 250 251 \n253 253 251 248 245 241 244 247 237 244 249 244 246 247 247 242 \n242 250 250 242 242 246 246 249 249 247 224 153 150 134 137 131 \n162 163 227 247 248 250 250 251 240 240 238 243 175 158 143 161 \n122 154 185 200 248 252 248 246 246 245 244 250 230 187 154 149 \n192 211 196 212 241 244 244 249 253 241 237 232 235 246 197 173 \n198 216 216 222 225 238 253 251 249 253 253 254 253 253 253 252 \n251 253 253 254 254 254 252 252 251 250 250 249 253 252 250 253 \n252 253 250 251 252 252 255 254 255 253 253 249 246 252 254 255 \n253 252 252 254 252 253 253 253 250 250 253 252 253 253 247 252 \n254 253 252 253 252 251 250 249 246 251 252 251 254 254 254 252 \n252 254 249 247 250 252 252 253 252 253 254 252 254 253 253 255 \n254 253 254 254 254 254 255 255 252 251 253 253 250 253 255 255 \n255 254 253 254 254 253 251 255 255 254 253 254 250 249 250 252 \n249 245 248 249 248 245 252 254 253 252 253 254 251 252 252 250 \n249 249 249 252 254 252 254 254 254 253 251 252 249 247 246 252 \n252 249 246 237 238 246 250 248 247 246 249 250 250 249 250 251 \n250 250 251 252 218 162 138 126 122 116 166 164 207 240 213 204 \n181 146 190 152 142 211 115 102 184 169 144 138 115 115 101 136 \n159 200 133 112 118 179 196 200 244 249 249 250 252 252 252 253 \n252 248 243 245 251 248 248 249 254 254 252 253 253 251 250 254 \n254 253 252 248 253 254 253 253 253 252 250 250 250 252 253 253 \n247 246 248 250 252 253 252 245 249 249 245 242 247 249 249 251 \n253 253 249 245 248 251 249 251 251 248 251 250 248 247 246 246 \n 25  23  22  24  24  23  24  26  28  27  29  33  36  36  39  40 \n 40  37  40  40  41  39  39  41  41  41  43  43  43  42  43  40 \n 43  43  43  43  44  44  44  44  45  44  47  48  50  50  54  54 \n 52  53  52  53  59  61  62  62  64  65  66  68  73  74  74  78 \n 88  87  88  90  95 100 102 103 110 115 126 133 130 135 141 145 \n148 154 165 166 170 172 172 175 180 181 181 184 187 184 187 187 \n186 187 185 184 184 183 182 182 180 179 178 178 177 176 176 181 \n179 184 192 194 206 209 212 222 226 232 229 237 228 232 240 242 \n233 239 246 251 248 242 238 245 240 247 251 252 240 243 250 252 \n254 253 249 249 249 237 235 244 238 238 249 238 238 243 240 244 \n248 252 248 240 235 241 241 241 246 249 225 148 148 137 129 134 \n161 163 228 248 247 245 248 252 246 248 240 244 167 158 143 155 \n124 158 191 203 252 253 247 247 245 245 251 252 241 195 163 150 \n181 203 192 200 240 246 249 249 249 244 234 240 248 252 213 180 \n188 213 213 222 226 231 249 250 251 253 254 253 253 254 253 253 \n252 254 254 254 255 253 252 253 253 253 253 253 253 252 250 253 \n254 254 251 253 254 255 255 255 255 255 255 255 253 254 255 255 \n254 254 254 254 253 254 255 254 251 251 253 252 253 254 253 254 \n253 251 252 252 249 250 250 247 250 252 253 255 255 255 254 254 \n254 253 250 249 252 253 254 255 252 253 254 252 252 252 251 254 \n252 248 254 255 254 254 255 255 254 254 253 253 252 254 255 255 \n254 253 251 254 253 250 252 255 254 253 253 255 250 245 252 252 \n253 252 252 249 249 249 252 250 251 248 250 252 250 251 248 252 \n254 252 251 248 251 253 252 252 254 254 249 250 249 251 247 250 \n248 247 246 241 241 245 248 247 250 253 253 247 242 240 240 240 \n246 252 254 253 211 164 133 125 122 119 173 162 214 240 221 211 \n194 172 202 191 185 196 115 134 229 165 145 132 112 112  93 145 \n162 201 143 110 118 178 194 201 241 247 248 249 250 252 250 250 \n251 250 242 243 250 249 245 248 251 252 254 254 253 254 254 253 \n249 253 254 252 251 255 252 250 252 252 252 251 249 252 253 253 \n249 246 247 252 250 252 252 248 248 248 248 243 246 249 248 248 \n252 253 252 247 247 248 249 247 252 248 252 250 250 251 249 245 \n 25  23  22  22  23  24  25  24  27  28  30  33  35  36  38  40 \n 39  39  42  43  44  41  40  39  39  41  41  41  42  43  41  42 \n 43  43  42  40  42  43  43  43  44  44  44  46  48  49  51  48 \n 46  46  45  49  53  54  55  56  53  54  59  60  60  60  63  62 \n 62  64  67  66  72  75  78  78  85  89  94  96  94  98 100 104 \n109 114 124 132 139 146 152 154 161 162 165 168 171 174 175 175 \n173 175 175 177 180 180 182 184 189 192 190 190 190 190 186 197 \n187 188 185 182 178 176 177 175 174 174 179 182 183 185 189 194 \n197 208 221 221 219 219 219 220 228 232 235 238 238 242 245 249 \n249 246 246 245 250 245 235 241 240 243 244 238 253 250 243 247 \n253 248 241 241 243 248 249 242 236 242 209 143 150 140 128 134 \n150 168 225 238 240 243 239 242 239 236 245 250 163 161 137 144 \n128 159 191 206 247 245 250 251 251 252 249 250 247 220 171 153 \n162 196 217 198 231 247 252 237 234 233 241 247 250 252 234 189 \n177 208 210 217 224 226 246 245 247 252 253 250 254 255 254 253 \n251 250 253 254 253 249 250 253 255 253 253 253 253 255 254 254 \n250 250 252 254 253 252 253 254 254 255 254 253 254 255 255 254 \n252 249 252 254 254 253 251 253 249 245 246 250 249 249 254 254 \n253 254 251 246 248 251 246 252 250 251 254 254 255 255 254 254 \n255 255 253 252 255 255 255 255 254 254 254 254 253 249 255 253 \n254 254 253 250 252 252 251 250 253 253 252 254 254 254 254 254 \n251 249 253 255 254 251 254 255 252 253 254 253 254 252 253 253 \n254 254 253 254 252 250 251 254 252 247 250 254 254 254 252 249 \n245 247 253 250 251 252 254 254 250 251 249 246 251 252 253 251 \n249 250 242 247 248 241 236 238 246 251 251 248 247 244 246 248 \n249 251 242 244 198 157 133 120 123 123 174 163 221 253 252 252 \n249 240 215 214 211 193 134 185 220 157 144 127 113 111  95 145 \n168 200 156 113 116 176 194 203 241 247 251 249 249 250 249 250 \n248 245 246 250 249 247 246 246 243 249 248 248 249 249 252 253 \n245 245 254 253 250 251 254 251 253 253 253 253 251 252 255 255 \n251 249 250 250 252 248 251 252 252 252 252 245 242 245 249 250 \n248 248 249 248 247 246 248 249 251 252 251 244 243 244 248 251 \n 26  24  23  22  22  23  24  24  26  27  29  31  35  36  37  40 \n 41  39  43  45  44  43  41  40  39  40  41  42  42  41  41  43 \n 43  41  42  41  42  44  43  43  43  44  42  46  48  50  48  46 \n 47  45  45  46  48  50  51  52  53  54  55  58  61  62  59  61 \n 62  63  64  62  63  64  63  68  72  67  76  79  75  80  81  81 \n 83  83  91  96 101 104 108 114 121 126 134 145 155 165 167 165 \n165 165 168 172 176 174 173 173 178 177 180 183 182 184 186 191 \n188 187 188 187 193 190 192 190 186 186 187 184 183 183 182 180 \n180 181 185 185 183 181 177 179 184 185 189 191 193 197 206 210 \n211 212 209 215 222 221 214 218 226 228 230 232 243 235 236 240 \n243 236 237 235 239 242 244 241 233 240 206 148 153 147 136 141 \n153 171 221 233 233 234 236 237 240 235 240 243 158 155 142 139 \n136 159 190 206 242 242 250 248 245 247 244 246 247 233 179 160 \n155 188 218 205 219 246 247 217 214 212 250 252 249 249 247 203 \n173 201 215 214 223 226 243 252 252 252 254 254 255 255 253 253 \n248 247 245 247 252 254 254 252 252 252 249 251 253 252 254 255 \n252 251 253 253 254 251 252 255 254 254 255 255 255 255 255 254 \n254 253 248 250 253 253 249 254 248 244 250 253 251 249 253 254 \n253 255 254 252 251 252 251 254 254 254 252 253 254 254 254 254 \n254 252 253 255 254 255 255 255 255 255 255 253 251 249 252 254 \n254 254 253 251 253 254 252 247 249 252 254 255 255 253 251 252 \n248 249 255 255 255 254 254 255 255 254 254 254 254 253 251 248 \n255 255 253 250 249 252 251 251 254 254 254 254 254 254 252 248 \n249 250 252 253 253 252 253 250 246 248 247 248 249 249 250 251 \n253 254 253 252 251 248 244 247 247 250 253 251 251 250 254 254 \n249 239 233 235 186 155 133 120 125 129 174 173 221 249 240 229 \n218 208 211 204 203 181 181 217 196 161 145 126 117 110  99 143 \n171 204 160 117 115 169 194 200 239 248 253 250 247 248 247 249 \n249 253 252 251 248 247 244 249 247 249 248 244 248 248 249 250 \n249 250 252 254 250 248 253 250 252 253 255 255 253 251 254 255 \n251 249 247 248 252 248 247 250 250 248 250 246 246 247 249 248 \n251 250 251 251 249 245 248 249 252 252 252 244 246 243 241 248 \n"
  },
  {
    "path": "thirdparty/LSD/doc/annotated.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: Annotated Index</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindexHL\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindex\" href=\"globals.html\">Globals</a></div>\n<h1>LSD Data Structures</h1>Here are the data structures with brief descriptions:<table>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structcoorlist.html\">coorlist</a></td><td class=\"indexvalue\">Chained list of coordinates </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structimage__char__s.html\">image_char_s</a></td><td class=\"indexvalue\">Char image data type </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structimage__double__s.html\">image_double_s</a></td><td class=\"indexvalue\">Double image data type </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structimage__int__s.html\">image_int_s</a></td><td class=\"indexvalue\">Int image data type </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list_s</a></td><td class=\"indexvalue\">'list of n-tuple' data type </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structpoint.html\">point</a></td><td class=\"indexvalue\">A point (or pixel) </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structrect.html\">rect</a></td><td class=\"indexvalue\">Rectangle structure: line segment with width </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structrect__iter.html\">rect_iter</a></td><td class=\"indexvalue\">Rectangle points iterator </td></tr>\n</table>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:48 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/doxygen.css",
    "content": "H1 {\n\ttext-align: center;\n\tfont-family: Arial, Helvetica, sans-serif;\n}\nH2 {\n\tfont-family: Geneva, Arial, Helvetica, sans-serif;\n}\nCAPTION { font-weight: bold }\nDIV.qindex { width: 100%;\n             background-color: #eeeeff;\n             border: 4px solid #eeeeff;\n             text-align: center;\n             margin-bottom: 2px\n}\nA.qindex { text-decoration: none; font-weight: bold; color: #0000ee }\nA.qindex:visited { text-decoration: none; font-weight: bold; color: #0000ee }\nA.qindex:hover { text-decoration: none; background-color: #ddddff }\nA.qindexHL { text-decoration: none; font-weight: bold;\n             background-color: #6666cc;\n             color: #ffffff\n           }\nA.qindexHL:hover { text-decoration: none; background-color: #6666cc; color: #ffffff }\nA.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }\nA.el { text-decoration: none; font-weight: bold }\nA.elRef { font-weight: bold }\nA.code { text-decoration: none; font-weight: normal; color: #4444ee }\nA.codeRef { font-weight: normal; color: #4444ee }\nA:hover { text-decoration: none; background-color: #f2f2ff }\nDL.el { margin-left: -1cm }\nDIV.fragment {\n\twidth: 98%;\n\tborder: 1px solid #CCCCCC;\n\tbackground-color: #f5f5f5;\n\tpadding-left: 4px;\n\tmargin: 4px;\n}\nDIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }\nTD.md { background-color: #f2f2ff; font-weight: bold; }\nTD.mdname1 { background-color: #f2f2ff; font-weight: bold; color: #602020; }\nTD.mdname { background-color: #f2f2ff; font-weight: bold; color: #602020; width: 600px; }\nDIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold }\nDIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller }\nBODY {\n\tbackground: white;\n\tcolor: black;\n\tmargin-right: 20px;\n\tmargin-left: 20px;\n}\nTD.indexkey { \n   background-color: #eeeeff; \n   font-weight: bold; \n   padding-right  : 10px; \n   padding-top    : 2px; \n   padding-left   : 10px; \n   padding-bottom : 2px; \n   margin-left    : 0px; \n   margin-right   : 0px; \n   margin-top     : 2px; \n   margin-bottom  : 2px  \n}\nTD.indexvalue { \n   background-color: #eeeeff; \n   font-style: italic; \n   padding-right  : 10px; \n   padding-top    : 2px; \n   padding-left   : 10px; \n   padding-bottom : 2px; \n   margin-left    : 0px; \n   margin-right   : 0px; \n   margin-top     : 2px; \n   margin-bottom  : 2px  \n}\nTR.memlist {\n   background-color: #f0f0f0; \n}\nP.formulaDsp { text-align: center; }\nIMG.formulaDsp { }\nIMG.formulaInl { vertical-align: middle; }\nSPAN.keyword       { color: #008000 }\nSPAN.keywordtype   { color: #604020 }\nSPAN.keywordflow   { color: #e08000 }\nSPAN.comment       { color: #800000 }\nSPAN.preprocessor  { color: #806020 }\nSPAN.stringliteral { color: #002080 }\nSPAN.charliteral   { color: #008080 }\n.mdTable {\n\tborder: 1px solid #868686;\n\tbackground-color: #f2f2ff;\n}\n.mdRow {\n\tpadding: 8px 20px;\n}\n.mdescLeft {\n\tfont-size: smaller;\n\tfont-family: Arial, Helvetica, sans-serif;\n\tbackground-color: #FAFAFA;\n\tpadding-left: 8px;\n\tborder-top: 1px none #E0E0E0;\n\tborder-right: 1px none #E0E0E0;\n\tborder-bottom: 1px none #E0E0E0;\n\tborder-left: 1px none #E0E0E0;\n\tmargin: 0px;\n}\n.mdescRight {\n\tfont-size: smaller;\n\tfont-family: Arial, Helvetica, sans-serif;\n\tfont-style: italic;\n\tbackground-color: #FAFAFA;\n\tpadding-left: 4px;\n\tborder-top: 1px none #E0E0E0;\n\tborder-right: 1px none #E0E0E0;\n\tborder-bottom: 1px none #E0E0E0;\n\tborder-left: 1px none #E0E0E0;\n\tmargin: 0px;\n\tpadding-bottom: 0px;\n\tpadding-right: 8px;\n}\n.memItemLeft {\n\tpadding: 1px 0px 0px 8px;\n\tmargin: 4px;\n\tborder-top-width: 1px;\n\tborder-right-width: 1px;\n\tborder-bottom-width: 1px;\n\tborder-left-width: 1px;\n\tborder-top-style: solid;\n\tborder-top-color: #E0E0E0;\n\tborder-right-color: #E0E0E0;\n\tborder-bottom-color: #E0E0E0;\n\tborder-left-color: #E0E0E0;\n\tborder-right-style: none;\n\tborder-bottom-style: none;\n\tborder-left-style: none;\n\tbackground-color: #FAFAFA;\n\tfont-family: Geneva, Arial, Helvetica, sans-serif;\n\tfont-size: 12px;\n}\n.memItemRight {\n\tpadding: 1px 0px 0px 8px;\n\tmargin: 4px;\n\tborder-top-width: 1px;\n\tborder-right-width: 1px;\n\tborder-bottom-width: 1px;\n\tborder-left-width: 1px;\n\tborder-top-style: solid;\n\tborder-top-color: #E0E0E0;\n\tborder-right-color: #E0E0E0;\n\tborder-bottom-color: #E0E0E0;\n\tborder-left-color: #E0E0E0;\n\tborder-right-style: none;\n\tborder-bottom-style: none;\n\tborder-left-style: none;\n\tbackground-color: #FAFAFA;\n\tfont-family: Geneva, Arial, Helvetica, sans-serif;\n\tfont-size: 13px;\n}\n.search     { color: #0000ee;\n              font-weight: bold;\n}\nFORM.search {\n              margin-bottom: 0px;\n              margin-top: 0px;\n}\nINPUT.search { font-size: 75%;\n               color: #000080;\n               font-weight: normal;\n               background-color: #eeeeff;\n}\nTD.tiny      { font-size: 75%;\n}\n"
  },
  {
    "path": "thirdparty/LSD/doc/files.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: File Index</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindexHL\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindex\" href=\"globals.html\">Globals</a></div>\n<h1>LSD File List</h1>Here is a list of all files with brief descriptions:<table>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"lsd_8c.html\">lsd.c</a> <a href=\"lsd_8c-source.html\">[code]</a></td><td class=\"indexvalue\">LSD module code </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"lsd_8h.html\">lsd.h</a> <a href=\"lsd_8h-source.html\">[code]</a></td><td class=\"indexvalue\">LSD module header </td></tr>\n</table>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:17 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/formula.repository",
    "content": "\\form#0:\\[ G(x,y) = \\frac{1}{2\\pi\\sigma^2} e^{-\\frac{x^2+y^2}{2\\sigma^2}} \\]\n\\form#1:\\[ G(x,y) = G(x) * G(y) \\]\n\\form#2:\\[ G(x) = \\frac{1}{\\sqrt{2\\pi}\\sigma} e^{-\\frac{x^2}{2\\sigma^2}}. \\]\n\\form#3:\\[ \\Gamma(x) = \\frac{ \\sum_{n=0}^{N} q_n x^n }{ \\Pi_{n=0}^{N} (x+n) } (x+5.5)^{x+0.5} e^{-(x+5.5)} \\]\n\\form#4:\\[ \\log\\Gamma(x) = \\log\\left( \\sum_{n=0}^{N} q_n x^n \\right) + (x+0.5) \\log(x+5.5) - (x+5.5) - \\sum_{n=0}^{N} \\log(x+n) \\]\n\\form#5:\\[ \\Gamma(x) = \\sqrt{\\frac{2\\pi}{x}} \\left( \\frac{x}{e} \\sqrt{ x\\sinh(1/x) + \\frac{1}{810x^6} } \\right)^x \\]\n\\form#6:\\[ \\log\\Gamma(x) = 0.5\\log(2\\pi) + (x-0.5)\\log(x) - x + 0.5x\\log\\left( x\\sinh(1/x) + \\frac{1}{810x^6} \\right). \\]\n\\form#7:\\[ \\mathrm{NFA} = NT \\cdot B(n,k,p) \\]\n\\form#8:\\[ B(n,k,p) = \\sum_{j=k}^n \\left(\\begin{array}{c}n\\\\j\\end{array}\\right) p^{j} (1-p)^{n-j} \\]\n\\form#9:\\[ \\left(\\begin{array}{c}n\\\\k\\end{array}\\right) = \\frac{ \\Gamma(n+1) }{ \\Gamma(k+1) \\cdot \\Gamma(n-k+1) }. \\]\n\\form#10:\\[ A = \\left(\\begin{array}{cc} Ixx & Ixy \\\\ Ixy & Iyy \\\\ \\end{array}\\right) \\]\n"
  },
  {
    "path": "thirdparty/LSD/doc/functions.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: Compound Member Index</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindexHL\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindex\" href=\"globals.html\">Globals</a></div>\n<div class=\"qindex\"><a class=\"qindexHL\" href=\"functions.html\">All</a> | <a class=\"qindex\" href=\"functions_vars.html\">Variables</a></div>\n\n<p>\nHere is a list of all struct and union fields with links to the structures/unions they belong to:<ul>\n<li>data\n: <a class=\"el\" href=\"structimage__double__s.html#o0\">image_double_s</a>, <a class=\"el\" href=\"structimage__int__s.html#o0\">image_int_s</a>, <a class=\"el\" href=\"structimage__char__s.html#o0\">image_char_s</a><li>dim\n: <a class=\"el\" href=\"structntuple__list__s.html#o2\">ntuple_list_s</a><li>dx\n: <a class=\"el\" href=\"structrect.html#o8\">rect</a><li>dy\n: <a class=\"el\" href=\"structrect.html#o9\">rect</a><li>max_size\n: <a class=\"el\" href=\"structntuple__list__s.html#o1\">ntuple_list_s</a><li>next\n: <a class=\"el\" href=\"structcoorlist.html#o2\">coorlist</a><li>p\n: <a class=\"el\" href=\"structrect.html#o11\">rect</a><li>prec\n: <a class=\"el\" href=\"structrect.html#o10\">rect</a><li>size\n: <a class=\"el\" href=\"structntuple__list__s.html#o0\">ntuple_list_s</a><li>theta\n: <a class=\"el\" href=\"structrect.html#o7\">rect</a><li>values\n: <a class=\"el\" href=\"structntuple__list__s.html#o3\">ntuple_list_s</a><li>vx\n: <a class=\"el\" href=\"structrect__iter.html#o0\">rect_iter</a><li>vy\n: <a class=\"el\" href=\"structrect__iter.html#o1\">rect_iter</a><li>width\n: <a class=\"el\" href=\"structrect.html#o4\">rect</a><li>x\n: <a class=\"el\" href=\"structrect__iter.html#o4\">rect_iter</a>, <a class=\"el\" href=\"structrect.html#o5\">rect</a>, <a class=\"el\" href=\"structpoint.html#o0\">point</a>, <a class=\"el\" href=\"structcoorlist.html#o0\">coorlist</a><li>x1\n: <a class=\"el\" href=\"structrect.html#o0\">rect</a><li>x2\n: <a class=\"el\" href=\"structrect.html#o2\">rect</a><li>xsize\n: <a class=\"el\" href=\"structimage__double__s.html#o1\">image_double_s</a>, <a class=\"el\" href=\"structimage__int__s.html#o1\">image_int_s</a>, <a class=\"el\" href=\"structimage__char__s.html#o1\">image_char_s</a><li>y\n: <a class=\"el\" href=\"structrect__iter.html#o5\">rect_iter</a>, <a class=\"el\" href=\"structrect.html#o6\">rect</a>, <a class=\"el\" href=\"structpoint.html#o1\">point</a>, <a class=\"el\" href=\"structcoorlist.html#o1\">coorlist</a><li>y1\n: <a class=\"el\" href=\"structrect.html#o1\">rect</a><li>y2\n: <a class=\"el\" href=\"structrect.html#o3\">rect</a><li>ye\n: <a class=\"el\" href=\"structrect__iter.html#o3\">rect_iter</a><li>ys\n: <a class=\"el\" href=\"structrect__iter.html#o2\">rect_iter</a><li>ysize\n: <a class=\"el\" href=\"structimage__double__s.html#o2\">image_double_s</a>, <a class=\"el\" href=\"structimage__int__s.html#o2\">image_int_s</a>, <a class=\"el\" href=\"structimage__char__s.html#o2\">image_char_s</a></ul>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:48 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/functions_vars.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: Compound Member Index</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindexHL\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindex\" href=\"globals.html\">Globals</a></div>\n<div class=\"qindex\"><a class=\"qindex\" href=\"functions.html\">All</a> | <a class=\"qindexHL\" href=\"functions_vars.html\">Variables</a></div>\n\n<p>\n<ul>\n<li>data\n: <a class=\"el\" href=\"structimage__double__s.html#o0\">image_double_s</a>, <a class=\"el\" href=\"structimage__int__s.html#o0\">image_int_s</a>, <a class=\"el\" href=\"structimage__char__s.html#o0\">image_char_s</a><li>dim\n: <a class=\"el\" href=\"structntuple__list__s.html#o2\">ntuple_list_s</a><li>dx\n: <a class=\"el\" href=\"structrect.html#o8\">rect</a><li>dy\n: <a class=\"el\" href=\"structrect.html#o9\">rect</a><li>max_size\n: <a class=\"el\" href=\"structntuple__list__s.html#o1\">ntuple_list_s</a><li>next\n: <a class=\"el\" href=\"structcoorlist.html#o2\">coorlist</a><li>p\n: <a class=\"el\" href=\"structrect.html#o11\">rect</a><li>prec\n: <a class=\"el\" href=\"structrect.html#o10\">rect</a><li>size\n: <a class=\"el\" href=\"structntuple__list__s.html#o0\">ntuple_list_s</a><li>theta\n: <a class=\"el\" href=\"structrect.html#o7\">rect</a><li>values\n: <a class=\"el\" href=\"structntuple__list__s.html#o3\">ntuple_list_s</a><li>vx\n: <a class=\"el\" href=\"structrect__iter.html#o0\">rect_iter</a><li>vy\n: <a class=\"el\" href=\"structrect__iter.html#o1\">rect_iter</a><li>width\n: <a class=\"el\" href=\"structrect.html#o4\">rect</a><li>x\n: <a class=\"el\" href=\"structrect__iter.html#o4\">rect_iter</a>, <a class=\"el\" href=\"structrect.html#o5\">rect</a>, <a class=\"el\" href=\"structpoint.html#o0\">point</a>, <a class=\"el\" href=\"structcoorlist.html#o0\">coorlist</a><li>x1\n: <a class=\"el\" href=\"structrect.html#o0\">rect</a><li>x2\n: <a class=\"el\" href=\"structrect.html#o2\">rect</a><li>xsize\n: <a class=\"el\" href=\"structimage__double__s.html#o1\">image_double_s</a>, <a class=\"el\" href=\"structimage__int__s.html#o1\">image_int_s</a>, <a class=\"el\" href=\"structimage__char__s.html#o1\">image_char_s</a><li>y\n: <a class=\"el\" href=\"structrect__iter.html#o5\">rect_iter</a>, <a class=\"el\" href=\"structrect.html#o6\">rect</a>, <a class=\"el\" href=\"structpoint.html#o1\">point</a>, <a class=\"el\" href=\"structcoorlist.html#o1\">coorlist</a><li>y1\n: <a class=\"el\" href=\"structrect.html#o1\">rect</a><li>y2\n: <a class=\"el\" href=\"structrect.html#o3\">rect</a><li>ye\n: <a class=\"el\" href=\"structrect__iter.html#o3\">rect_iter</a><li>ys\n: <a class=\"el\" href=\"structrect__iter.html#o2\">rect_iter</a><li>ysize\n: <a class=\"el\" href=\"structimage__double__s.html#o2\">image_double_s</a>, <a class=\"el\" href=\"structimage__int__s.html#o2\">image_int_s</a>, <a class=\"el\" href=\"structimage__char__s.html#o2\">image_char_s</a></ul>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:49 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/globals.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: File Member Index</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindexHL\" href=\"globals.html\">Globals</a></div>\n<div class=\"qindex\"><a class=\"qindexHL\" href=\"globals.html\">All</a> | <a class=\"qindex\" href=\"globals_func.html\">Functions</a> | <a class=\"qindex\" href=\"globals_type.html\">Typedefs</a> | <a class=\"qindex\" href=\"globals_defs.html\">Defines</a></div>\n<div class=\"qindex\"><a class=\"qindex\" href=\"#index_a\">a</a> | <a class=\"qindex\" href=\"#index_d\">d</a> | <a class=\"qindex\" href=\"#index_e\">e</a> | <a class=\"qindex\" href=\"#index_f\">f</a> | <a class=\"qindex\" href=\"#index_g\">g</a> | <a class=\"qindex\" href=\"#index_i\">i</a> | <a class=\"qindex\" href=\"#index_l\">l</a> | <a class=\"qindex\" href=\"#index_m\">m</a> | <a class=\"qindex\" href=\"#index_n\">n</a> | <a class=\"qindex\" href=\"#index_r\">r</a> | <a class=\"qindex\" href=\"#index_t\">t</a> | <a class=\"qindex\" href=\"#index_u\">u</a></div>\n\n<p>\n\n<p>\nHere is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:<h3><a class=\"anchor\" name=\"index_a\">- a -</a></h3><ul>\n<li>add_5tuple()\n: <a class=\"el\" href=\"lsd_8c.html#a18\">lsd.c</a><li>angle_diff()\n: <a class=\"el\" href=\"lsd_8c.html#a32\">lsd.c</a><li>angle_diff_signed()\n: <a class=\"el\" href=\"lsd_8c.html#a33\">lsd.c</a></ul>\n<h3><a class=\"anchor\" name=\"index_d\">- d -</a></h3><ul>\n<li>dist()\n: <a class=\"el\" href=\"lsd_8c.html#a14\">lsd.c</a><li>double_equal()\n: <a class=\"el\" href=\"lsd_8c.html#a13\">lsd.c</a></ul>\n<h3><a class=\"anchor\" name=\"index_e\">- e -</a></h3><ul>\n<li>enlarge_ntuple_list()\n: <a class=\"el\" href=\"lsd_8c.html#a17\">lsd.c</a><li>error()\n: <a class=\"el\" href=\"lsd_8c.html#a12\">lsd.c</a></ul>\n<h3><a class=\"anchor\" name=\"index_f\">- f -</a></h3><ul>\n<li>FALSE\n: <a class=\"el\" href=\"lsd_8c.html#a2\">lsd.c</a><li>free_image_char()\n: <a class=\"el\" href=\"lsd_8c.html#a19\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a6\">lsd.h</a><li>free_image_double()\n: <a class=\"el\" href=\"lsd_8c.html#a25\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a12\">lsd.h</a><li>free_image_int()\n: <a class=\"el\" href=\"lsd_8c.html#a22\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a9\">lsd.h</a><li>free_ntuple_list()\n: <a class=\"el\" href=\"lsd_8c.html#a15\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a4\">lsd.h</a></ul>\n<h3><a class=\"anchor\" name=\"index_g\">- g -</a></h3><ul>\n<li>gaussian_kernel()\n: <a class=\"el\" href=\"lsd_8c.html#a28\">lsd.c</a><li>gaussian_sampler()\n: <a class=\"el\" href=\"lsd_8c.html#a29\">lsd.c</a><li>get_theta()\n: <a class=\"el\" href=\"lsd_8c.html#a45\">lsd.c</a></ul>\n<h3><a class=\"anchor\" name=\"index_i\">- i -</a></h3><ul>\n<li>image_char\n: <a class=\"el\" href=\"lsd_8h.html#a1\">lsd.h</a><li>image_double\n: <a class=\"el\" href=\"lsd_8h.html#a3\">lsd.h</a><li>image_int\n: <a class=\"el\" href=\"lsd_8h.html#a2\">lsd.h</a><li>inter_hi()\n: <a class=\"el\" href=\"lsd_8c.html#a39\">lsd.c</a><li>inter_low()\n: <a class=\"el\" href=\"lsd_8c.html#a38\">lsd.c</a><li>isaligned()\n: <a class=\"el\" href=\"lsd_8c.html#a31\">lsd.c</a></ul>\n<h3><a class=\"anchor\" name=\"index_l\">- l -</a></h3><ul>\n<li>LineSegmentDetection()\n: <a class=\"el\" href=\"lsd_8c.html#a51\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a15\">lsd.h</a><li>ll_angle()\n: <a class=\"el\" href=\"lsd_8c.html#a30\">lsd.c</a><li>log_gamma\n: <a class=\"el\" href=\"lsd_8c.html#a10\">lsd.c</a><li>log_gamma_lanczos()\n: <a class=\"el\" href=\"lsd_8c.html#a34\">lsd.c</a><li>log_gamma_windschitl()\n: <a class=\"el\" href=\"lsd_8c.html#a35\">lsd.c</a><li>lsd()\n: <a class=\"el\" href=\"lsd_8c.html#a53\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a17\">lsd.h</a><li>lsd_scale()\n: <a class=\"el\" href=\"lsd_8c.html#a52\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a16\">lsd.h</a></ul>\n<h3><a class=\"anchor\" name=\"index_m\">- m -</a></h3><ul>\n<li>M_2__PI\n: <a class=\"el\" href=\"lsd_8c.html#a6\">lsd.c</a><li>M_3_2_PI\n: <a class=\"el\" href=\"lsd_8c.html#a5\">lsd.c</a><li>M_LN10\n: <a class=\"el\" href=\"lsd_8c.html#a0\">lsd.c</a><li>M_PI\n: <a class=\"el\" href=\"lsd_8c.html#a1\">lsd.c</a></ul>\n<h3><a class=\"anchor\" name=\"index_n\">- n -</a></h3><ul>\n<li>new_image_char()\n: <a class=\"el\" href=\"lsd_8c.html#a20\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a7\">lsd.h</a><li>new_image_char_ini()\n: <a class=\"el\" href=\"lsd_8c.html#a21\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a8\">lsd.h</a><li>new_image_double()\n: <a class=\"el\" href=\"lsd_8c.html#a26\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a13\">lsd.h</a><li>new_image_double_ini()\n: <a class=\"el\" href=\"lsd_8c.html#a27\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a14\">lsd.h</a><li>new_image_int()\n: <a class=\"el\" href=\"lsd_8c.html#a23\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a10\">lsd.h</a><li>new_image_int_ini()\n: <a class=\"el\" href=\"lsd_8c.html#a24\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a11\">lsd.h</a><li>new_ntuple_list()\n: <a class=\"el\" href=\"lsd_8c.html#a16\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a5\">lsd.h</a><li>nfa()\n: <a class=\"el\" href=\"lsd_8c.html#a36\">lsd.c</a><li>NOTDEF\n: <a class=\"el\" href=\"lsd_8c.html#a4\">lsd.c</a><li>NOTUSED\n: <a class=\"el\" href=\"lsd_8c.html#a7\">lsd.c</a><li>ntuple_list\n: <a class=\"el\" href=\"lsd_8h.html#a0\">lsd.h</a></ul>\n<h3><a class=\"anchor\" name=\"index_r\">- r -</a></h3><ul>\n<li>rect_copy()\n: <a class=\"el\" href=\"lsd_8c.html#a37\">lsd.c</a><li>rect_improve()\n: <a class=\"el\" href=\"lsd_8c.html#a48\">lsd.c</a><li>rect_nfa()\n: <a class=\"el\" href=\"lsd_8c.html#a44\">lsd.c</a><li>reduce_region_radius()\n: <a class=\"el\" href=\"lsd_8c.html#a49\">lsd.c</a><li>refine()\n: <a class=\"el\" href=\"lsd_8c.html#a50\">lsd.c</a><li>region2rect()\n: <a class=\"el\" href=\"lsd_8c.html#a46\">lsd.c</a><li>region_grow()\n: <a class=\"el\" href=\"lsd_8c.html#a47\">lsd.c</a><li>RELATIVE_ERROR_FACTOR\n: <a class=\"el\" href=\"lsd_8c.html#a9\">lsd.c</a><li>ri_del()\n: <a class=\"el\" href=\"lsd_8c.html#a40\">lsd.c</a><li>ri_end()\n: <a class=\"el\" href=\"lsd_8c.html#a41\">lsd.c</a><li>ri_inc()\n: <a class=\"el\" href=\"lsd_8c.html#a42\">lsd.c</a><li>ri_ini()\n: <a class=\"el\" href=\"lsd_8c.html#a43\">lsd.c</a></ul>\n<h3><a class=\"anchor\" name=\"index_t\">- t -</a></h3><ul>\n<li>TABSIZE\n: <a class=\"el\" href=\"lsd_8c.html#a11\">lsd.c</a><li>TRUE\n: <a class=\"el\" href=\"lsd_8c.html#a3\">lsd.c</a></ul>\n<h3><a class=\"anchor\" name=\"index_u\">- u -</a></h3><ul>\n<li>USED\n: <a class=\"el\" href=\"lsd_8c.html#a8\">lsd.c</a></ul>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:49 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/globals_defs.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: File Member Index</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindexHL\" href=\"globals.html\">Globals</a></div>\n<div class=\"qindex\"><a class=\"qindex\" href=\"globals.html\">All</a> | <a class=\"qindex\" href=\"globals_func.html\">Functions</a> | <a class=\"qindex\" href=\"globals_type.html\">Typedefs</a> | <a class=\"qindexHL\" href=\"globals_defs.html\">Defines</a></div>\n\n<p>\n<ul>\n<li>FALSE\n: <a class=\"el\" href=\"lsd_8c.html#a2\">lsd.c</a><li>log_gamma\n: <a class=\"el\" href=\"lsd_8c.html#a10\">lsd.c</a><li>M_2__PI\n: <a class=\"el\" href=\"lsd_8c.html#a6\">lsd.c</a><li>M_3_2_PI\n: <a class=\"el\" href=\"lsd_8c.html#a5\">lsd.c</a><li>M_LN10\n: <a class=\"el\" href=\"lsd_8c.html#a0\">lsd.c</a><li>M_PI\n: <a class=\"el\" href=\"lsd_8c.html#a1\">lsd.c</a><li>NOTDEF\n: <a class=\"el\" href=\"lsd_8c.html#a4\">lsd.c</a><li>NOTUSED\n: <a class=\"el\" href=\"lsd_8c.html#a7\">lsd.c</a><li>RELATIVE_ERROR_FACTOR\n: <a class=\"el\" href=\"lsd_8c.html#a9\">lsd.c</a><li>TABSIZE\n: <a class=\"el\" href=\"lsd_8c.html#a11\">lsd.c</a><li>TRUE\n: <a class=\"el\" href=\"lsd_8c.html#a3\">lsd.c</a><li>USED\n: <a class=\"el\" href=\"lsd_8c.html#a8\">lsd.c</a></ul>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:49 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/globals_func.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: File Member Index</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindexHL\" href=\"globals.html\">Globals</a></div>\n<div class=\"qindex\"><a class=\"qindex\" href=\"globals.html\">All</a> | <a class=\"qindexHL\" href=\"globals_func.html\">Functions</a> | <a class=\"qindex\" href=\"globals_type.html\">Typedefs</a> | <a class=\"qindex\" href=\"globals_defs.html\">Defines</a></div>\n<div class=\"qindex\"><a class=\"qindex\" href=\"#index_a\">a</a> | <a class=\"qindex\" href=\"#index_d\">d</a> | <a class=\"qindex\" href=\"#index_e\">e</a> | <a class=\"qindex\" href=\"#index_f\">f</a> | <a class=\"qindex\" href=\"#index_g\">g</a> | <a class=\"qindex\" href=\"#index_i\">i</a> | <a class=\"qindex\" href=\"#index_l\">l</a> | <a class=\"qindex\" href=\"#index_n\">n</a> | <a class=\"qindex\" href=\"#index_r\">r</a></div>\n\n<p>\n\n<p>\n<h3><a class=\"anchor\" name=\"index_a\">- a -</a></h3><ul>\n<li>add_5tuple()\n: <a class=\"el\" href=\"lsd_8c.html#a18\">lsd.c</a><li>angle_diff()\n: <a class=\"el\" href=\"lsd_8c.html#a32\">lsd.c</a><li>angle_diff_signed()\n: <a class=\"el\" href=\"lsd_8c.html#a33\">lsd.c</a></ul>\n<h3><a class=\"anchor\" name=\"index_d\">- d -</a></h3><ul>\n<li>dist()\n: <a class=\"el\" href=\"lsd_8c.html#a14\">lsd.c</a><li>double_equal()\n: <a class=\"el\" href=\"lsd_8c.html#a13\">lsd.c</a></ul>\n<h3><a class=\"anchor\" name=\"index_e\">- e -</a></h3><ul>\n<li>enlarge_ntuple_list()\n: <a class=\"el\" href=\"lsd_8c.html#a17\">lsd.c</a><li>error()\n: <a class=\"el\" href=\"lsd_8c.html#a12\">lsd.c</a></ul>\n<h3><a class=\"anchor\" name=\"index_f\">- f -</a></h3><ul>\n<li>free_image_char()\n: <a class=\"el\" href=\"lsd_8c.html#a19\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a6\">lsd.h</a><li>free_image_double()\n: <a class=\"el\" href=\"lsd_8c.html#a25\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a12\">lsd.h</a><li>free_image_int()\n: <a class=\"el\" href=\"lsd_8c.html#a22\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a9\">lsd.h</a><li>free_ntuple_list()\n: <a class=\"el\" href=\"lsd_8c.html#a15\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a4\">lsd.h</a></ul>\n<h3><a class=\"anchor\" name=\"index_g\">- g -</a></h3><ul>\n<li>gaussian_kernel()\n: <a class=\"el\" href=\"lsd_8c.html#a28\">lsd.c</a><li>gaussian_sampler()\n: <a class=\"el\" href=\"lsd_8c.html#a29\">lsd.c</a><li>get_theta()\n: <a class=\"el\" href=\"lsd_8c.html#a45\">lsd.c</a></ul>\n<h3><a class=\"anchor\" name=\"index_i\">- i -</a></h3><ul>\n<li>inter_hi()\n: <a class=\"el\" href=\"lsd_8c.html#a39\">lsd.c</a><li>inter_low()\n: <a class=\"el\" href=\"lsd_8c.html#a38\">lsd.c</a><li>isaligned()\n: <a class=\"el\" href=\"lsd_8c.html#a31\">lsd.c</a></ul>\n<h3><a class=\"anchor\" name=\"index_l\">- l -</a></h3><ul>\n<li>LineSegmentDetection()\n: <a class=\"el\" href=\"lsd_8c.html#a51\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a15\">lsd.h</a><li>ll_angle()\n: <a class=\"el\" href=\"lsd_8c.html#a30\">lsd.c</a><li>log_gamma_lanczos()\n: <a class=\"el\" href=\"lsd_8c.html#a34\">lsd.c</a><li>log_gamma_windschitl()\n: <a class=\"el\" href=\"lsd_8c.html#a35\">lsd.c</a><li>lsd()\n: <a class=\"el\" href=\"lsd_8c.html#a53\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a17\">lsd.h</a><li>lsd_scale()\n: <a class=\"el\" href=\"lsd_8c.html#a52\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a16\">lsd.h</a></ul>\n<h3><a class=\"anchor\" name=\"index_n\">- n -</a></h3><ul>\n<li>new_image_char()\n: <a class=\"el\" href=\"lsd_8c.html#a20\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a7\">lsd.h</a><li>new_image_char_ini()\n: <a class=\"el\" href=\"lsd_8c.html#a21\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a8\">lsd.h</a><li>new_image_double()\n: <a class=\"el\" href=\"lsd_8c.html#a26\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a13\">lsd.h</a><li>new_image_double_ini()\n: <a class=\"el\" href=\"lsd_8c.html#a27\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a14\">lsd.h</a><li>new_image_int()\n: <a class=\"el\" href=\"lsd_8c.html#a23\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a10\">lsd.h</a><li>new_image_int_ini()\n: <a class=\"el\" href=\"lsd_8c.html#a24\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a11\">lsd.h</a><li>new_ntuple_list()\n: <a class=\"el\" href=\"lsd_8c.html#a16\">lsd.c</a>, <a class=\"el\" href=\"lsd_8h.html#a5\">lsd.h</a><li>nfa()\n: <a class=\"el\" href=\"lsd_8c.html#a36\">lsd.c</a></ul>\n<h3><a class=\"anchor\" name=\"index_r\">- r -</a></h3><ul>\n<li>rect_copy()\n: <a class=\"el\" href=\"lsd_8c.html#a37\">lsd.c</a><li>rect_improve()\n: <a class=\"el\" href=\"lsd_8c.html#a48\">lsd.c</a><li>rect_nfa()\n: <a class=\"el\" href=\"lsd_8c.html#a44\">lsd.c</a><li>reduce_region_radius()\n: <a class=\"el\" href=\"lsd_8c.html#a49\">lsd.c</a><li>refine()\n: <a class=\"el\" href=\"lsd_8c.html#a50\">lsd.c</a><li>region2rect()\n: <a class=\"el\" href=\"lsd_8c.html#a46\">lsd.c</a><li>region_grow()\n: <a class=\"el\" href=\"lsd_8c.html#a47\">lsd.c</a><li>ri_del()\n: <a class=\"el\" href=\"lsd_8c.html#a40\">lsd.c</a><li>ri_end()\n: <a class=\"el\" href=\"lsd_8c.html#a41\">lsd.c</a><li>ri_inc()\n: <a class=\"el\" href=\"lsd_8c.html#a42\">lsd.c</a><li>ri_ini()\n: <a class=\"el\" href=\"lsd_8c.html#a43\">lsd.c</a></ul>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:49 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/globals_type.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: File Member Index</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindexHL\" href=\"globals.html\">Globals</a></div>\n<div class=\"qindex\"><a class=\"qindex\" href=\"globals.html\">All</a> | <a class=\"qindex\" href=\"globals_func.html\">Functions</a> | <a class=\"qindexHL\" href=\"globals_type.html\">Typedefs</a> | <a class=\"qindex\" href=\"globals_defs.html\">Defines</a></div>\n\n<p>\n<ul>\n<li>image_char\n: <a class=\"el\" href=\"lsd_8h.html#a1\">lsd.h</a><li>image_double\n: <a class=\"el\" href=\"lsd_8h.html#a3\">lsd.h</a><li>image_int\n: <a class=\"el\" href=\"lsd_8h.html#a2\">lsd.h</a><li>ntuple_list\n: <a class=\"el\" href=\"lsd_8h.html#a0\">lsd.h</a></ul>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:49 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/graph_legend.dot",
    "content": "digraph G\n{\n  edge [fontname=\"Helvetica\",fontsize=10,labelfontname=\"Helvetica\",labelfontsize=10];\n  node [fontname=\"Helvetica\",fontsize=10,shape=record];\n  Node9 [shape=\"box\",label=\"Inherited\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",style=\"filled\" fontcolor=\"white\"];\n  Node10 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"Helvetica\"];\n  Node10 [shape=\"box\",label=\"PublicBase\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",URL=\"$classPublicBase.html\"];\n  Node11 -> Node10 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"Helvetica\"];\n  Node11 [shape=\"box\",label=\"Truncated\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"red\",URL=\"$classTruncated.html\"];\n  Node13 -> Node9 [dir=back,color=\"darkgreen\",fontsize=10,style=\"solid\",fontname=\"Helvetica\"];\n  Node13 [shape=\"box\",label=\"ProtectedBase\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",URL=\"$classProtectedBase.html\"];\n  Node14 -> Node9 [dir=back,color=\"firebrick4\",fontsize=10,style=\"solid\",fontname=\"Helvetica\"];\n  Node14 [shape=\"box\",label=\"PrivateBase\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",URL=\"$classPrivateBase.html\"];\n  Node15 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"Helvetica\"];\n  Node15 [shape=\"box\",label=\"Undocumented\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"grey75\"];\n  Node16 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"Helvetica\"];\n  Node16 [shape=\"box\",label=\"Templ< int >\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",URL=\"$classTempl.html\"];\n  Node17 -> Node16 [dir=back,color=\"orange\",fontsize=10,style=\"dashed\",label=\"< int >\",fontname=\"Helvetica\"];\n  Node17 [shape=\"box\",label=\"Templ< T >\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",URL=\"$classTempl.html\"];\n  Node18 -> Node9 [dir=back,color=\"darkorchid3\",fontsize=10,style=\"dashed\",label=\"m_usedClass\",fontname=\"Helvetica\"];\n  Node18 [shape=\"box\",label=\"Used\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",URL=\"$classUsed.html\"];\n}\n"
  },
  {
    "path": "thirdparty/LSD/doc/graph_legend.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: Graph Legend</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindex\" href=\"globals.html\">Globals</a></div>\n<h1>Graph Legend</h1>This page explains how to interpret the graphs that are generated by doxygen.<p>\nConsider the following example: <div class=\"fragment\"><pre><span class=\"comment\">/*! Invisible class because of truncation */</span>\n<span class=\"keyword\">class </span>Invisible { };\n<span class=\"comment\"></span>\n<span class=\"comment\">/*! Truncated class, inheritance relation is hidden */</span>\n<span class=\"keyword\">class </span>Truncated : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classInvisible.html\">Invisible</a> { };\n\n<span class=\"comment\">/* Class not documented with doxygen comments */</span>\n<span class=\"keyword\">class </span>Undocumented { };\n<span class=\"comment\"></span>\n<span class=\"comment\">/*! Class that is inherited using public inheritance */</span>\n<span class=\"keyword\">class </span>PublicBase : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classTruncated.html\">Truncated</a> { };\n<span class=\"comment\"></span>\n<span class=\"comment\">/*! A template class */</span>\n<span class=\"keyword\">template</span>&lt;<span class=\"keyword\">class</span> T&gt; <span class=\"keyword\">class </span>Templ { };\n<span class=\"comment\"></span>\n<span class=\"comment\">/*! Class that is inherited using protected inheritance */</span>\n<span class=\"keyword\">class </span>ProtectedBase { };\n<span class=\"comment\"></span>\n<span class=\"comment\">/*! Class that is inherited using private inheritance */</span>\n<span class=\"keyword\">class </span>PrivateBase { };\n<span class=\"comment\"></span>\n<span class=\"comment\">/*! Class that is used by the Inherited class */</span>\n<span class=\"keyword\">class </span>Used { };\n<span class=\"comment\"></span>\n<span class=\"comment\">/*! Super class that inherits a number of other classes */</span>\n<span class=\"keyword\">class </span>Inherited : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classPublicBase.html\">PublicBase</a>,\n                  <span class=\"keyword\">protected</span> <a class=\"code\" href=\"classProtectedBase.html\">ProtectedBase</a>,\n                  <span class=\"keyword\">private</span> <a class=\"code\" href=\"classPrivateBase.html\">PrivateBase</a>,\n                  <span class=\"keyword\">public</span> <a class=\"code\" href=\"classUndocumented.html\">Undocumented</a>\n                  <span class=\"keyword\">public</span> <a class=\"code\" href=\"classTempl.html\">Templ</a>&lt;int&gt;\n{\n  <span class=\"keyword\">private</span>:\n    <a class=\"code\" href=\"classUsed.html\">Used</a> *m_usedClass;\n};\n</pre></div>If the <code>MAX_DOT_GRAPH_HEIGHT</code> tag in the configuration file is set to 240 this will result in the following graph:<p>\n<center><div align=\"center\">\n<img src=\"graph_legend.png\" alt=\"graph_legend.png\">\n</div>\n</center> <p>\nThe boxes in the above graph have the following meaning: <ul>\n<li>\nA filled black box represents the struct or class for which the graph is generated. </li>\n<li>\nA box with a black border denotes a documented struct or class. </li>\n<li>\nA box with a grey border denotes an undocumented struct or class. </li>\n<li>\nA box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries. </li>\n</ul>\nThe arrows have the following meaning: <ul>\n<li>\nA dark blue arrow is used to visualize a public inheritance relation between two classes. </li>\n<li>\nA dark green arrow is used for protected inheritance. </li>\n<li>\nA dark red arrow is used for private inheritance. </li>\n<li>\nA purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible. </li>\n<li>\nA yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance. </li>\n</ul>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:49 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/index.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: LSD code documentation</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindexHL\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindex\" href=\"globals.html\">Globals</a></div>\n<h1>LSD code documentation </h1>\n<p>\nThis is an implementation of the Line Segment Detector described in the paper:<p>\n\"LSD: A Fast Line Segment Detector with a False Detection Control\" by Rafael Grompone von Gioi, Jeremie Jakubowicz, Jean-Michel Morel, and Gregory Randall, IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 32, no. 4, pp. 722-732, April, 2010.<p>\nand in more details in the CMLA Technical Report:<p>\n\"LSD: A Line Segment Detector, Technical Report\", by Rafael Grompone von Gioi, Jeremie Jakubowicz, Jean-Michel Morel, Gregory Randall, CMLA, ENS Cachan, 2010.<p>\nThe version implemented here includes some further improvements described on the LSD page at www.ipol.im. That same page includes more information, including this code and an online demo version:<p>\n<a href=\"http://www.ipol.im/pub/algo/gjmr_line_segment_detector\">http://www.ipol.im/pub/algo/gjmr_line_segment_detector</a><p>\nThe module's main function is <a class=\"el\" href=\"lsd_8h.html#a17\">lsd()</a>.<p>\nThe source code is contained in two files: <a class=\"el\" href=\"lsd_8h.html\">lsd.h</a> and <a class=\"el\" href=\"lsd_8c.html\">lsd.c</a>.<p>\nHISTORY:<ul>\n<li>version 1.5 - dic 2010: Changes in 'refine', -W option added, and more comments added.</li><li>version 1.4 - jul 2010: lsd_scale interface added and doxygen doc.</li><li>version 1.3 - feb 2010: Multiple bug correction and improved code.</li><li>version 1.2 - dic 2009: First full Ansi C Language version.</li><li>version 1.1 - sep 2009: Systematic subsampling to scale 0.8 and correction to partially handle\"angle problem\".</li><li>version 1.0 - jan 2009: First complete Megawave2 and Ansi C Language version.</li></ul>\n<p>\n<dl compact><dt><b>Author:</b></dt><dd>rafael grompone von gioi (<a href=\"mailto:grompone@gmail.com\">grompone@gmail.com</a>) </dd></dl>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:17 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/lsd_8c-source.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: lsd.c Source File</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindex\" href=\"globals.html\">Globals</a></div>\n<h1>lsd.c</h1><a href=\"lsd_8c.html\">Go to the documentation of this file.</a><div class=\"fragment\"><pre>00001 <span class=\"comment\">/*----------------------------------------------------------------------------</span>\n00002 <span class=\"comment\"></span>\n00003 <span class=\"comment\">  LSD - Line Segment Detector on digital images</span>\n00004 <span class=\"comment\"></span>\n00005 <span class=\"comment\">  Copyright 2007-2010 rafael grompone von gioi (grompone@gmail.com)</span>\n00006 <span class=\"comment\"></span>\n00007 <span class=\"comment\">  This program is free software: you can redistribute it and/or modify</span>\n00008 <span class=\"comment\">  it under the terms of the GNU Affero General Public License as</span>\n00009 <span class=\"comment\">  published by the Free Software Foundation, either version 3 of the</span>\n00010 <span class=\"comment\">  License, or (at your option) any later version.</span>\n00011 <span class=\"comment\"></span>\n00012 <span class=\"comment\">  This program is distributed in the hope that it will be useful,</span>\n00013 <span class=\"comment\">  but WITHOUT ANY WARRANTY; without even the implied warranty of</span>\n00014 <span class=\"comment\">  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>\n00015 <span class=\"comment\">  GNU Affero General Public License for more details.</span>\n00016 <span class=\"comment\"></span>\n00017 <span class=\"comment\">  You should have received a copy of the GNU Affero General Public License</span>\n00018 <span class=\"comment\">  along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>\n00019 <span class=\"comment\"></span>\n00020 <span class=\"comment\">  ----------------------------------------------------------------------------*/</span>\n00021 \n00022 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00023 <span class=\"comment\">/** @file lsd.c</span>\n00024 <span class=\"comment\">    LSD module code</span>\n00025 <span class=\"comment\">    @author rafael grompone von gioi (grompone@gmail.com)</span>\n00026 <span class=\"comment\"> */</span>\n00027 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00028 \n00029 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00030 <span class=\"comment\">/** @mainpage LSD code documentation</span>\n00031 <span class=\"comment\"></span>\n00032 <span class=\"comment\">    This is an implementation of the Line Segment Detector described</span>\n00033 <span class=\"comment\">    in the paper:</span>\n00034 <span class=\"comment\"></span>\n00035 <span class=\"comment\">      \"LSD: A Fast Line Segment Detector with a False Detection Control\"</span>\n00036 <span class=\"comment\">      by Rafael Grompone von Gioi, Jeremie Jakubowicz, Jean-Michel Morel,</span>\n00037 <span class=\"comment\">      and Gregory Randall, IEEE Transactions on Pattern Analysis and</span>\n00038 <span class=\"comment\">      Machine Intelligence, vol. 32, no. 4, pp. 722-732, April, 2010.</span>\n00039 <span class=\"comment\"></span>\n00040 <span class=\"comment\">    and in more details in the CMLA Technical Report:</span>\n00041 <span class=\"comment\"></span>\n00042 <span class=\"comment\">      \"LSD: A Line Segment Detector, Technical Report\",</span>\n00043 <span class=\"comment\">      by Rafael Grompone von Gioi, Jeremie Jakubowicz, Jean-Michel Morel,</span>\n00044 <span class=\"comment\">      Gregory Randall, CMLA, ENS Cachan, 2010.</span>\n00045 <span class=\"comment\"></span>\n00046 <span class=\"comment\">    The version implemented here includes some further improvements</span>\n00047 <span class=\"comment\">    described on the LSD page at www.ipol.im. That same page includes</span>\n00048 <span class=\"comment\">    more information, including this code and an online demo version:</span>\n00049 <span class=\"comment\"></span>\n00050 <span class=\"comment\">      http://www.ipol.im/pub/algo/gjmr_line_segment_detector</span>\n00051 <span class=\"comment\"></span>\n00052 <span class=\"comment\">    The module's main function is lsd().</span>\n00053 <span class=\"comment\"></span>\n00054 <span class=\"comment\">    The source code is contained in two files: lsd.h and lsd.c.</span>\n00055 <span class=\"comment\"></span>\n00056 <span class=\"comment\">    HISTORY:</span>\n00057 <span class=\"comment\">    - version 1.5 - dic 2010: Changes in 'refine', -W option added,</span>\n00058 <span class=\"comment\">                              and more comments added.</span>\n00059 <span class=\"comment\">    - version 1.4 - jul 2010: lsd_scale interface added and doxygen doc.</span>\n00060 <span class=\"comment\">    - version 1.3 - feb 2010: Multiple bug correction and improved code.</span>\n00061 <span class=\"comment\">    - version 1.2 - dic 2009: First full Ansi C Language version.</span>\n00062 <span class=\"comment\">    - version 1.1 - sep 2009: Systematic subsampling to scale 0.8 and</span>\n00063 <span class=\"comment\">                              correction to partially handle\"angle problem\".</span>\n00064 <span class=\"comment\">    - version 1.0 - jan 2009: First complete Megawave2 and Ansi C Language</span>\n00065 <span class=\"comment\">                              version.</span>\n00066 <span class=\"comment\"></span>\n00067 <span class=\"comment\">    @author rafael grompone von gioi (grompone@gmail.com)</span>\n00068 <span class=\"comment\"> */</span>\n00069 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00070 \n00071 <span class=\"preprocessor\">#include &lt;stdio.h&gt;</span>\n00072 <span class=\"preprocessor\">#include &lt;stdlib.h&gt;</span>\n00073 <span class=\"preprocessor\">#include &lt;math.h&gt;</span>\n00074 <span class=\"preprocessor\">#include &lt;limits.h&gt;</span>\n00075 <span class=\"preprocessor\">#include &lt;float.h&gt;</span>\n00076 <span class=\"preprocessor\">#include \"<a class=\"code\" href=\"lsd_8h.html\">lsd.h</a>\"</span>\n00077 <span class=\"comment\"></span>\n00078 <span class=\"comment\">/** ln(10) */</span>\n00079 <span class=\"preprocessor\">#ifndef M_LN10</span>\n<a name=\"l00080\"></a><a class=\"code\" href=\"lsd_8c.html#a0\">00080</a> <span class=\"preprocessor\"></span><span class=\"preprocessor\">#define M_LN10 2.30258509299404568402</span>\n00081 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif </span><span class=\"comment\">/* !M_LN10 */</span>\n00082 <span class=\"comment\"></span>\n00083 <span class=\"comment\">/** PI */</span>\n00084 <span class=\"preprocessor\">#ifndef M_PI</span>\n<a name=\"l00085\"></a><a class=\"code\" href=\"lsd_8c.html#a1\">00085</a> <span class=\"preprocessor\"></span><span class=\"preprocessor\">#define M_PI   3.14159265358979323846</span>\n00086 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif </span><span class=\"comment\">/* !M_PI */</span>\n00087 \n00088 <span class=\"preprocessor\">#ifndef FALSE</span>\n<a name=\"l00089\"></a><a class=\"code\" href=\"lsd_8c.html#a2\">00089</a> <span class=\"preprocessor\"></span><span class=\"preprocessor\">#define FALSE 0</span>\n00090 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif </span><span class=\"comment\">/* !FALSE */</span>\n00091 \n00092 <span class=\"preprocessor\">#ifndef TRUE</span>\n<a name=\"l00093\"></a><a class=\"code\" href=\"lsd_8c.html#a3\">00093</a> <span class=\"preprocessor\"></span><span class=\"preprocessor\">#define TRUE 1</span>\n00094 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#endif </span><span class=\"comment\">/* !TRUE */</span>\n00095 <span class=\"comment\"></span>\n00096 <span class=\"comment\">/** Label for pixels with undefined gradient. */</span>\n<a name=\"l00097\"></a><a class=\"code\" href=\"lsd_8c.html#a4\">00097</a> <span class=\"preprocessor\">#define NOTDEF -1024.0</span>\n00098 <span class=\"preprocessor\"></span><span class=\"comment\"></span>\n00099 <span class=\"comment\">/** 3/2 pi */</span>\n<a name=\"l00100\"></a><a class=\"code\" href=\"lsd_8c.html#a5\">00100</a> <span class=\"preprocessor\">#define M_3_2_PI 4.71238898038</span>\n00101 <span class=\"preprocessor\"></span><span class=\"comment\"></span>\n00102 <span class=\"comment\">/** 2 pi */</span>\n<a name=\"l00103\"></a><a class=\"code\" href=\"lsd_8c.html#a6\">00103</a> <span class=\"preprocessor\">#define M_2__PI  6.28318530718</span>\n00104 <span class=\"preprocessor\"></span><span class=\"comment\"></span>\n00105 <span class=\"comment\">/** Label for pixels not used in yet. */</span>\n<a name=\"l00106\"></a><a class=\"code\" href=\"lsd_8c.html#a7\">00106</a> <span class=\"preprocessor\">#define NOTUSED 0</span>\n00107 <span class=\"preprocessor\"></span><span class=\"comment\"></span>\n00108 <span class=\"comment\">/** Label for pixels already used in detection. */</span>\n<a name=\"l00109\"></a><a class=\"code\" href=\"lsd_8c.html#a8\">00109</a> <span class=\"preprocessor\">#define USED    1</span>\n00110 <span class=\"preprocessor\"></span>\n00111 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00112 <span class=\"comment\">/** Chained list of coordinates.</span>\n00113 <span class=\"comment\"> */</span>\n<a name=\"l00114\"></a><a class=\"code\" href=\"structcoorlist.html\">00114</a> <span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a>\n00115 {\n<a name=\"l00116\"></a><a class=\"code\" href=\"structcoorlist.html#o1\">00116</a>   <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"structcoorlist.html#o0\">x</a>,<a class=\"code\" href=\"structcoorlist.html#o1\">y</a>;\n<a name=\"l00117\"></a><a class=\"code\" href=\"structcoorlist.html#o2\">00117</a>   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> * <a class=\"code\" href=\"structcoorlist.html#o2\">next</a>;\n00118 };\n00119 \n00120 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00121 <span class=\"comment\">/** A point (or pixel).</span>\n00122 <span class=\"comment\"> */</span>\n<a name=\"l00123\"></a><a class=\"code\" href=\"structpoint.html#o1\">00123</a> <span class=\"keyword\">struct </span><a class=\"code\" href=\"structpoint.html\">point</a> {<span class=\"keywordtype\">int</span> <a class=\"code\" href=\"structpoint.html#o0\">x</a>,<a class=\"code\" href=\"structpoint.html#o1\">y</a>;};\n00124 \n00125 \n00126 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00127 <span class=\"comment\">/*------------------------- Miscellaneous functions --------------------------*/</span>\n00128 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00129 \n00130 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00131 <span class=\"comment\">/** Fatal error, print a message to standard-error output and exit.</span>\n00132 <span class=\"comment\"> */</span>\n<a name=\"l00133\"></a><a class=\"code\" href=\"lsd_8c.html#a12\">00133</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"keywordtype\">char</span> * msg)\n00134 {\n00135   fprintf(stderr,<span class=\"stringliteral\">\"LSD Error: %s\\n\"</span>,msg);\n00136   exit(EXIT_FAILURE);\n00137 }\n00138 \n00139 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00140 <span class=\"comment\">/** Doubles relative error factor</span>\n00141 <span class=\"comment\"> */</span>\n<a name=\"l00142\"></a><a class=\"code\" href=\"lsd_8c.html#a9\">00142</a> <span class=\"preprocessor\">#define RELATIVE_ERROR_FACTOR 100.0</span>\n00143 <span class=\"preprocessor\"></span>\n00144 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00145 <span class=\"comment\">/** Compare doubles by relative error.</span>\n00146 <span class=\"comment\"></span>\n00147 <span class=\"comment\">    The resulting rounding error after floating point computations</span>\n00148 <span class=\"comment\">    depend on the specific operations done. The same number computed by</span>\n00149 <span class=\"comment\">    different algorithms could present different rounding errors. For a</span>\n00150 <span class=\"comment\">    useful comparison, an estimation of the relative rounding error</span>\n00151 <span class=\"comment\">    should be considered and compared to a factor times EPS. The factor</span>\n00152 <span class=\"comment\">    should be related to the cumulated rounding error in the chain of</span>\n00153 <span class=\"comment\">    computation. Here, as a simplification, a fixed factor is used.</span>\n00154 <span class=\"comment\"> */</span>\n<a name=\"l00155\"></a><a class=\"code\" href=\"lsd_8c.html#a13\">00155</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"lsd_8c.html#a13\">double_equal</a>(<span class=\"keywordtype\">double</span> a, <span class=\"keywordtype\">double</span> b)\n00156 {\n00157   <span class=\"keywordtype\">double</span> abs_diff,aa,bb,abs_max;\n00158 \n00159   <span class=\"comment\">/* trivial case */</span>\n00160   <span class=\"keywordflow\">if</span>( a == b ) <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a3\">TRUE</a>;\n00161 \n00162   abs_diff = fabs(a-b);\n00163   aa = fabs(a);\n00164   bb = fabs(b);\n00165   abs_max = aa &gt; bb ? aa : bb;\n00166 \n00167   <span class=\"comment\">/* DBL_MIN is the smallest normalized number, thus, the smallest</span>\n00168 <span class=\"comment\">     number whose relative error is bounded by DBL_EPSILON. For</span>\n00169 <span class=\"comment\">     smaller numbers, the same quantization steps as for DBL_MIN</span>\n00170 <span class=\"comment\">     are used. Then, for smaller numbers, a meaningful \"relative\"</span>\n00171 <span class=\"comment\">     error should be computed by dividing the difference by DBL_MIN. */</span>\n00172   <span class=\"keywordflow\">if</span>( abs_max &lt; DBL_MIN ) abs_max = DBL_MIN;\n00173 \n00174   <span class=\"comment\">/* equal if relative error &lt;= factor x eps */</span>\n00175   <span class=\"keywordflow\">return</span> (abs_diff / abs_max) &lt;= (<a class=\"code\" href=\"lsd_8c.html#a9\">RELATIVE_ERROR_FACTOR</a> * DBL_EPSILON);\n00176 }\n00177 \n00178 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00179 <span class=\"comment\">/** Computes Euclidean distance between point (x1,y1) and point (x2,y2).</span>\n00180 <span class=\"comment\"> */</span>\n<a name=\"l00181\"></a><a class=\"code\" href=\"lsd_8c.html#a14\">00181</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"lsd_8c.html#a14\">dist</a>(<span class=\"keywordtype\">double</span> x1, <span class=\"keywordtype\">double</span> y1, <span class=\"keywordtype\">double</span> x2, <span class=\"keywordtype\">double</span> y2)\n00182 {\n00183   <span class=\"keywordflow\">return</span> sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) );\n00184 }\n00185 \n00186 \n00187 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00188 <span class=\"comment\">/*----------------------- 'list of n-tuple' data type ------------------------*/</span>\n00189 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00190 \n00191 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00192 <span class=\"comment\">/** Free memory used in n-tuple 'in'.</span>\n00193 <span class=\"comment\"> */</span>\n<a name=\"l00194\"></a><a class=\"code\" href=\"lsd_8c.html#a15\">00194</a> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"lsd_8c.html#a15\">free_ntuple_list</a>(<a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> in)\n00195 {\n00196   <span class=\"keywordflow\">if</span>( in == NULL || in-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> == NULL )\n00197     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"free_ntuple_list: invalid n-tuple input.\"</span>);\n00198   free( (<span class=\"keywordtype\">void</span> *) in-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> );\n00199   free( (<span class=\"keywordtype\">void</span> *) in );\n00200 }\n00201 \n00202 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00203 <span class=\"comment\">/** Create an n-tuple list and allocate memory for one element.</span>\n00204 <span class=\"comment\">    @param dim the dimension (n) of the n-tuple.</span>\n00205 <span class=\"comment\"> */</span>\n<a name=\"l00206\"></a><a class=\"code\" href=\"lsd_8c.html#a16\">00206</a> <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> <a class=\"code\" href=\"lsd_8c.html#a16\">new_ntuple_list</a>(<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> dim)\n00207 {\n00208   <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> n_tuple;\n00209 \n00210   <span class=\"comment\">/* check parameters */</span>\n00211   <span class=\"keywordflow\">if</span>( dim == 0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"new_ntuple_list: 'dim' must be positive.\"</span>);\n00212 \n00213   <span class=\"comment\">/* get memory for list structure */</span>\n00214   n_tuple = (<a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a>) malloc( <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list_s</a>) );\n00215   <span class=\"keywordflow\">if</span>( n_tuple == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00216 \n00217   <span class=\"comment\">/* initialize list */</span>\n00218   n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a> = 0;\n00219   n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o1\">max_size</a> = 1;\n00220   n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a> = dim;\n00221 \n00222   <span class=\"comment\">/* get memory for tuples */</span>\n00223   n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> = (<span class=\"keywordtype\">double</span> *) malloc( dim*n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o1\">max_size</a> * <span class=\"keyword\">sizeof</span>(<span class=\"keywordtype\">double</span>) );\n00224   <span class=\"keywordflow\">if</span>( n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00225 \n00226   <span class=\"keywordflow\">return</span> n_tuple;\n00227 }\n00228 \n00229 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00230 <span class=\"comment\">/** Enlarge the allocated memory of an n-tuple list.</span>\n00231 <span class=\"comment\"> */</span>\n<a name=\"l00232\"></a><a class=\"code\" href=\"lsd_8c.html#a17\">00232</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"lsd_8c.html#a17\">enlarge_ntuple_list</a>(<a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> n_tuple)\n00233 {\n00234   <span class=\"comment\">/* check parameters */</span>\n00235   <span class=\"keywordflow\">if</span>( n_tuple == NULL || n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> == NULL || n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o1\">max_size</a> == 0 )\n00236     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"enlarge_ntuple_list: invalid n-tuple.\"</span>);\n00237 \n00238   <span class=\"comment\">/* duplicate number of tuples */</span>\n00239   n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o1\">max_size</a> *= 2;\n00240 \n00241   <span class=\"comment\">/* realloc memory */</span>\n00242   n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> = (<span class=\"keywordtype\">double</span> *) realloc( (<span class=\"keywordtype\">void</span> *) n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>,\n00243                       n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a> * n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o1\">max_size</a> * <span class=\"keyword\">sizeof</span>(<span class=\"keywordtype\">double</span>) );\n00244   <span class=\"keywordflow\">if</span>( n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00245 }\n00246 \n00247 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00248 <span class=\"comment\">/** Add a 5-tuple to an n-tuple list.</span>\n00249 <span class=\"comment\"> */</span>\n<a name=\"l00250\"></a><a class=\"code\" href=\"lsd_8c.html#a18\">00250</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"lsd_8c.html#a18\">add_5tuple</a>( <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> out, <span class=\"keywordtype\">double</span> v1, <span class=\"keywordtype\">double</span> v2,\n00251                         <span class=\"keywordtype\">double</span> v3, <span class=\"keywordtype\">double</span> v4, <span class=\"keywordtype\">double</span> v5 )\n00252 {\n00253   <span class=\"comment\">/* check parameters */</span>\n00254   <span class=\"keywordflow\">if</span>( out == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"add_5tuple: invalid n-tuple input.\"</span>);\n00255   <span class=\"keywordflow\">if</span>( out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a> != 5 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"add_5tuple: the n-tuple must be a 5-tuple.\"</span>);\n00256 \n00257   <span class=\"comment\">/* if needed, alloc more tuples to 'out' */</span>\n00258   <span class=\"keywordflow\">if</span>( out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a> == out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o1\">max_size</a> ) <a class=\"code\" href=\"lsd_8c.html#a17\">enlarge_ntuple_list</a>(out);\n00259   <span class=\"keywordflow\">if</span>( out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"add_5tuple: invalid n-tuple input.\"</span>);\n00260 \n00261   <span class=\"comment\">/* add new 5-tuple */</span>\n00262   out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[ out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a> * out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a> + 0 ] = v1;\n00263   out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[ out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a> * out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a> + 1 ] = v2;\n00264   out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[ out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a> * out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a> + 2 ] = v3;\n00265   out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[ out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a> * out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a> + 3 ] = v4;\n00266   out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[ out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a> * out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a> + 4 ] = v5;\n00267 \n00268   <span class=\"comment\">/* update number of tuples counter */</span>\n00269   out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a>++;\n00270 }\n00271 \n00272 \n00273 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00274 <span class=\"comment\">/*----------------------------- Image Data Types -----------------------------*/</span>\n00275 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00276 \n00277 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00278 <span class=\"comment\">/** Free memory used in image_char 'i'.</span>\n00279 <span class=\"comment\"> */</span>\n<a name=\"l00280\"></a><a class=\"code\" href=\"lsd_8c.html#a19\">00280</a> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"lsd_8c.html#a19\">free_image_char</a>(<a class=\"code\" href=\"structimage__char__s.html\">image_char</a> i)\n00281 {\n00282   <span class=\"keywordflow\">if</span>( i == NULL || i-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> == NULL )\n00283     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"free_image_char: invalid input image.\"</span>);\n00284   free( (<span class=\"keywordtype\">void</span> *) i-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> );\n00285   free( (<span class=\"keywordtype\">void</span> *) i );\n00286 }\n00287 \n00288 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00289 <span class=\"comment\">/** Create a new image_char of size 'xsize' times 'ysize'.</span>\n00290 <span class=\"comment\"> */</span>\n<a name=\"l00291\"></a><a class=\"code\" href=\"lsd_8c.html#a20\">00291</a> <a class=\"code\" href=\"structimage__char__s.html\">image_char</a> <a class=\"code\" href=\"lsd_8c.html#a20\">new_image_char</a>(<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> xsize, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> ysize)\n00292 {\n00293   <a class=\"code\" href=\"structimage__char__s.html\">image_char</a> image;\n00294 \n00295   <span class=\"comment\">/* check parameters */</span>\n00296   <span class=\"keywordflow\">if</span>( xsize == 0 || ysize == 0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"new_image_char: invalid image size.\"</span>);\n00297 \n00298   <span class=\"comment\">/* get memory */</span>\n00299   image = (<a class=\"code\" href=\"structimage__char__s.html\">image_char</a>) malloc( <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structimage__char__s.html\">image_char_s</a>) );\n00300   <span class=\"keywordflow\">if</span>( image == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00301   image-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> = (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span> *) calloc( (size_t) (xsize*ysize),\n00302                                           <span class=\"keyword\">sizeof</span>(<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span>) );\n00303   <span class=\"keywordflow\">if</span>( image-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00304 \n00305   <span class=\"comment\">/* set image size */</span>\n00306   image-&gt;<a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a> = xsize;\n00307   image-&gt;<a class=\"code\" href=\"structimage__char__s.html#o2\">ysize</a> = ysize;\n00308 \n00309   <span class=\"keywordflow\">return</span> image;\n00310 }\n00311 \n00312 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00313 <span class=\"comment\">/** Create a new image_char of size 'xsize' times 'ysize',</span>\n00314 <span class=\"comment\">    initialized to the value 'fill_value'.</span>\n00315 <span class=\"comment\"> */</span>\n<a name=\"l00316\"></a><a class=\"code\" href=\"lsd_8c.html#a21\">00316</a> <a class=\"code\" href=\"structimage__char__s.html\">image_char</a> <a class=\"code\" href=\"lsd_8c.html#a21\">new_image_char_ini</a>( <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> xsize, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> ysize,\n00317                                <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span> fill_value )\n00318 {\n00319   <a class=\"code\" href=\"structimage__char__s.html\">image_char</a> image = <a class=\"code\" href=\"lsd_8c.html#a20\">new_image_char</a>(xsize,ysize); <span class=\"comment\">/* create image */</span>\n00320   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> N = xsize*ysize;\n00321   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> i;\n00322 \n00323   <span class=\"comment\">/* check parameters */</span>\n00324   <span class=\"keywordflow\">if</span>( image == NULL || image-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> == NULL )\n00325     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"new_image_char_ini: invalid image.\"</span>);\n00326 \n00327   <span class=\"comment\">/* initialize */</span>\n00328   <span class=\"keywordflow\">for</span>(i=0; i&lt;N; i++) image-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a>[i] = fill_value;\n00329 \n00330   <span class=\"keywordflow\">return</span> image;\n00331 }\n00332 \n00333 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00334 <span class=\"comment\">/** Free memory used in image_int 'i'.</span>\n00335 <span class=\"comment\"> */</span>\n<a name=\"l00336\"></a><a class=\"code\" href=\"lsd_8c.html#a22\">00336</a> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"lsd_8c.html#a22\">free_image_int</a>(<a class=\"code\" href=\"structimage__int__s.html\">image_int</a> i)\n00337 {\n00338   <span class=\"keywordflow\">if</span>( i == NULL || i-&gt;<a class=\"code\" href=\"structimage__int__s.html#o0\">data</a> == NULL )\n00339     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"free_image_int: invalid input image.\"</span>);\n00340   free( (<span class=\"keywordtype\">void</span> *) i-&gt;<a class=\"code\" href=\"structimage__int__s.html#o0\">data</a> );\n00341   free( (<span class=\"keywordtype\">void</span> *) i );\n00342 }\n00343 \n00344 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00345 <span class=\"comment\">/** Create a new image_int of size 'xsize' times 'ysize'.</span>\n00346 <span class=\"comment\"> */</span>\n<a name=\"l00347\"></a><a class=\"code\" href=\"lsd_8c.html#a23\">00347</a> <a class=\"code\" href=\"structimage__int__s.html\">image_int</a> <a class=\"code\" href=\"lsd_8c.html#a23\">new_image_int</a>(<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> xsize, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> ysize)\n00348 {\n00349   <a class=\"code\" href=\"structimage__int__s.html\">image_int</a> image;\n00350 \n00351   <span class=\"comment\">/* check parameters */</span>\n00352   <span class=\"keywordflow\">if</span>( xsize == 0 || ysize == 0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"new_image_int: invalid image size.\"</span>);\n00353 \n00354   <span class=\"comment\">/* get memory */</span>\n00355   image = (<a class=\"code\" href=\"structimage__int__s.html\">image_int</a>) malloc( <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structimage__int__s.html\">image_int_s</a>) );\n00356   <span class=\"keywordflow\">if</span>( image == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00357   image-&gt;<a class=\"code\" href=\"structimage__int__s.html#o0\">data</a> = (<span class=\"keywordtype\">int</span> *) calloc( (size_t) (xsize*ysize), <span class=\"keyword\">sizeof</span>(<span class=\"keywordtype\">int</span>) );\n00358   <span class=\"keywordflow\">if</span>( image-&gt;<a class=\"code\" href=\"structimage__int__s.html#o0\">data</a> == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00359 \n00360   <span class=\"comment\">/* set image size */</span>\n00361   image-&gt;<a class=\"code\" href=\"structimage__int__s.html#o1\">xsize</a> = xsize;\n00362   image-&gt;<a class=\"code\" href=\"structimage__int__s.html#o2\">ysize</a> = ysize;\n00363 \n00364   <span class=\"keywordflow\">return</span> image;\n00365 }\n00366 \n00367 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00368 <span class=\"comment\">/** Create a new image_int of size 'xsize' times 'ysize',</span>\n00369 <span class=\"comment\">    initialized to the value 'fill_value'.</span>\n00370 <span class=\"comment\"> */</span>\n<a name=\"l00371\"></a><a class=\"code\" href=\"lsd_8c.html#a24\">00371</a> <a class=\"code\" href=\"structimage__int__s.html\">image_int</a> <a class=\"code\" href=\"lsd_8c.html#a24\">new_image_int_ini</a>( <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> xsize, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> ysize,\n00372                              <span class=\"keywordtype\">int</span> fill_value )\n00373 {\n00374   <a class=\"code\" href=\"structimage__int__s.html\">image_int</a> image = <a class=\"code\" href=\"lsd_8c.html#a23\">new_image_int</a>(xsize,ysize); <span class=\"comment\">/* create image */</span>\n00375   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> N = xsize*ysize;\n00376   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> i;\n00377 \n00378   <span class=\"comment\">/* initialize */</span>\n00379   <span class=\"keywordflow\">for</span>(i=0; i&lt;N; i++) image-&gt;<a class=\"code\" href=\"structimage__int__s.html#o0\">data</a>[i] = fill_value;\n00380 \n00381   <span class=\"keywordflow\">return</span> image;\n00382 }\n00383 \n00384 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00385 <span class=\"comment\">/** Free memory used in image_double 'i'.</span>\n00386 <span class=\"comment\"> */</span>\n<a name=\"l00387\"></a><a class=\"code\" href=\"lsd_8c.html#a25\">00387</a> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"lsd_8c.html#a25\">free_image_double</a>(<a class=\"code\" href=\"structimage__double__s.html\">image_double</a> i)\n00388 {\n00389   <span class=\"keywordflow\">if</span>( i == NULL || i-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL )\n00390     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"free_image_double: invalid input image.\"</span>);\n00391   free( (<span class=\"keywordtype\">void</span> *) i-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> );\n00392   free( (<span class=\"keywordtype\">void</span> *) i );\n00393 }\n00394 \n00395 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00396 <span class=\"comment\">/** Create a new image_double of size 'xsize' times 'ysize'.</span>\n00397 <span class=\"comment\"> */</span>\n<a name=\"l00398\"></a><a class=\"code\" href=\"lsd_8c.html#a26\">00398</a> <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> <a class=\"code\" href=\"lsd_8c.html#a26\">new_image_double</a>(<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> xsize, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> ysize)\n00399 {\n00400   <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> image;\n00401 \n00402   <span class=\"comment\">/* check parameters */</span>\n00403   <span class=\"keywordflow\">if</span>( xsize == 0 || ysize == 0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"new_image_double: invalid image size.\"</span>);\n00404 \n00405   <span class=\"comment\">/* get memory */</span>\n00406   image = (<a class=\"code\" href=\"structimage__double__s.html\">image_double</a>) malloc( <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structimage__double__s.html\">image_double_s</a>) );\n00407   <span class=\"keywordflow\">if</span>( image == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00408   image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> = (<span class=\"keywordtype\">double</span> *) calloc( (size_t) (xsize*ysize), <span class=\"keyword\">sizeof</span>(<span class=\"keywordtype\">double</span>) );\n00409   <span class=\"keywordflow\">if</span>( image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00410 \n00411   <span class=\"comment\">/* set image size */</span>\n00412   image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> = xsize;\n00413   image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> = ysize;\n00414 \n00415   <span class=\"keywordflow\">return</span> image;\n00416 }\n00417 \n00418 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00419 <span class=\"comment\">/** Create a new image_double of size 'xsize' times 'ysize',</span>\n00420 <span class=\"comment\">    initialized to the value 'fill_value'.</span>\n00421 <span class=\"comment\"> */</span>\n<a name=\"l00422\"></a><a class=\"code\" href=\"lsd_8c.html#a27\">00422</a> <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> <a class=\"code\" href=\"lsd_8c.html#a27\">new_image_double_ini</a>( <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> xsize, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> ysize,\n00423                                    <span class=\"keywordtype\">double</span> fill_value )\n00424 {\n00425   <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> image = <a class=\"code\" href=\"lsd_8c.html#a26\">new_image_double</a>(xsize,ysize); <span class=\"comment\">/* create image */</span>\n00426   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> N = xsize*ysize;\n00427   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> i;\n00428 \n00429   <span class=\"comment\">/* initialize */</span>\n00430   <span class=\"keywordflow\">for</span>(i=0; i&lt;N; i++) image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[i] = fill_value;\n00431 \n00432   <span class=\"keywordflow\">return</span> image;\n00433 }\n00434 \n00435 \n00436 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00437 <span class=\"comment\">/*----------------------------- Gaussian filter ------------------------------*/</span>\n00438 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00439 \n00440 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00441 <span class=\"comment\">/** Compute a Gaussian kernel of length 'kernel-&gt;dim',</span>\n00442 <span class=\"comment\">    standard deviation 'sigma', and centered at value 'mean'.</span>\n00443 <span class=\"comment\"></span>\n00444 <span class=\"comment\">    For example, if mean=0.5, the Gaussian will be centered</span>\n00445 <span class=\"comment\">    in the middle point between values 'kernel-&gt;values[0]'</span>\n00446 <span class=\"comment\">    and 'kernel-&gt;values[1]'.</span>\n00447 <span class=\"comment\"> */</span>\n<a name=\"l00448\"></a><a class=\"code\" href=\"lsd_8c.html#a28\">00448</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"lsd_8c.html#a28\">gaussian_kernel</a>(<a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> kernel, <span class=\"keywordtype\">double</span> sigma, <span class=\"keywordtype\">double</span> mean)\n00449 {\n00450   <span class=\"keywordtype\">double</span> sum = 0.0;\n00451   <span class=\"keywordtype\">double</span> val;\n00452   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> i;\n00453 \n00454   <span class=\"comment\">/* check parameters */</span>\n00455   <span class=\"keywordflow\">if</span>( kernel == NULL || kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> == NULL )\n00456     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"gaussian_kernel: invalid n-tuple 'kernel'.\"</span>);\n00457   <span class=\"keywordflow\">if</span>( sigma &lt;= 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"gaussian_kernel: 'sigma' must be positive.\"</span>);\n00458 \n00459   <span class=\"comment\">/* compute Gaussian kernel */</span>\n00460   <span class=\"keywordflow\">if</span>( kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o1\">max_size</a> &lt; 1 ) <a class=\"code\" href=\"lsd_8c.html#a17\">enlarge_ntuple_list</a>(kernel);\n00461   kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a> = 1;\n00462   <span class=\"keywordflow\">for</span>(i=0;i&lt;kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a>;i++)\n00463     {\n00464       val = ( (<span class=\"keywordtype\">double</span>) i - mean ) / sigma;\n00465       kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[i] = exp( -0.5 * val * val );\n00466       sum += kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[i];\n00467     }\n00468 \n00469   <span class=\"comment\">/* normalization */</span>\n00470   <span class=\"keywordflow\">if</span>( sum &gt;= 0.0 ) <span class=\"keywordflow\">for</span>(i=0;i&lt;kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a>;i++) kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[i] /= sum;\n00471 }\n00472 \n00473 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00474 <span class=\"comment\">/** Scale the input image 'in' by a factor 'scale' by Gaussian sub-sampling.</span>\n00475 <span class=\"comment\"></span>\n00476 <span class=\"comment\">    For example, scale=0.8 will give a result at 80% of the original size.</span>\n00477 <span class=\"comment\"></span>\n00478 <span class=\"comment\">    The image is convolved with a Gaussian kernel</span>\n00479 <span class=\"comment\">    @f[</span>\n00480 <span class=\"comment\">        G(x,y) = \\frac{1}{2\\pi\\sigma^2} e^{-\\frac{x^2+y^2}{2\\sigma^2}}</span>\n00481 <span class=\"comment\">    @f]</span>\n00482 <span class=\"comment\">    before the sub-sampling to prevent aliasing.</span>\n00483 <span class=\"comment\"></span>\n00484 <span class=\"comment\">    The standard deviation sigma given by:</span>\n00485 <span class=\"comment\">    -  sigma = sigma_scale / scale,   if scale &lt;  1.0</span>\n00486 <span class=\"comment\">    -  sigma = sigma_scale,           if scale &gt;= 1.0</span>\n00487 <span class=\"comment\"></span>\n00488 <span class=\"comment\">    To be able to sub-sample at non-integer steps, some interpolation</span>\n00489 <span class=\"comment\">    is needed. In this implementation, the interpolation is done by</span>\n00490 <span class=\"comment\">    the Gaussian kernel, so both operations (filtering and sampling)</span>\n00491 <span class=\"comment\">    are done at the same time. The Gaussian kernel is computed</span>\n00492 <span class=\"comment\">    centered on the coordinates of the required sample. In this way,</span>\n00493 <span class=\"comment\">    when applied, it gives directly the result of convolving the image</span>\n00494 <span class=\"comment\">    with the kernel and interpolated to that particular position.</span>\n00495 <span class=\"comment\"></span>\n00496 <span class=\"comment\">    A fast algorithm is done using the separability of the Gaussian</span>\n00497 <span class=\"comment\">    kernel. Applying the 2D Gaussian kernel is equivalent to applying</span>\n00498 <span class=\"comment\">    first a horizontal 1D Gaussian kernel and then a vertical 1D</span>\n00499 <span class=\"comment\">    Gaussian kernel (or the other way round). The reason is that</span>\n00500 <span class=\"comment\">    @f[</span>\n00501 <span class=\"comment\">        G(x,y) = G(x) * G(y)</span>\n00502 <span class=\"comment\">    @f]</span>\n00503 <span class=\"comment\">    where</span>\n00504 <span class=\"comment\">    @f[</span>\n00505 <span class=\"comment\">        G(x) = \\frac{1}{\\sqrt{2\\pi}\\sigma} e^{-\\frac{x^2}{2\\sigma^2}}.</span>\n00506 <span class=\"comment\">    @f]</span>\n00507 <span class=\"comment\">    The algorithm first apply a combined Gaussian kernel and sampling</span>\n00508 <span class=\"comment\">    in the x axis, and then the combined Gaussian kernel and sampling</span>\n00509 <span class=\"comment\">    in the y axis.</span>\n00510 <span class=\"comment\"> */</span>\n<a name=\"l00511\"></a><a class=\"code\" href=\"lsd_8c.html#a29\">00511</a> <span class=\"keyword\">static</span> <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> <a class=\"code\" href=\"lsd_8c.html#a29\">gaussian_sampler</a>( <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> in, <span class=\"keywordtype\">double</span> scale,\n00512                                       <span class=\"keywordtype\">double</span> sigma_scale )\n00513 {\n00514   <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> aux,out;\n00515   <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> kernel;\n00516   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> N,M,h,n,x,y,i;\n00517   <span class=\"keywordtype\">int</span> xc,yc,j,double_x_size,double_y_size;\n00518   <span class=\"keywordtype\">double</span> sigma,xx,yy,sum,prec;\n00519 \n00520   <span class=\"comment\">/* check parameters */</span>\n00521   <span class=\"keywordflow\">if</span>( in == NULL || in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL || in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> == 0 || in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> == 0 )\n00522     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"gaussian_sampler: invalid image.\"</span>);\n00523   <span class=\"keywordflow\">if</span>( scale &lt;= 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"gaussian_sampler: 'scale' must be positive.\"</span>);\n00524   <span class=\"keywordflow\">if</span>( sigma_scale &lt;= 0.0 )\n00525     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"gaussian_sampler: 'sigma_scale' must be positive.\"</span>);\n00526 \n00527   <span class=\"comment\">/* get memory for images */</span>\n00528   <span class=\"keywordflow\">if</span>( in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> * scale &gt; (<span class=\"keywordtype\">double</span>) UINT_MAX ||\n00529       in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> * scale &gt; (<span class=\"keywordtype\">double</span>) UINT_MAX )\n00530     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"gaussian_sampler: the output image size exceeds the handled size.\"</span>);\n00531   N = (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>) floor( in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> * scale );\n00532   M = (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>) floor( in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> * scale );\n00533   aux = <a class=\"code\" href=\"lsd_8c.html#a26\">new_image_double</a>(N,in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>);\n00534   out = <a class=\"code\" href=\"lsd_8c.html#a26\">new_image_double</a>(N,M);\n00535 \n00536   <span class=\"comment\">/* sigma, kernel size and memory for the kernel */</span>\n00537   sigma = scale &lt; 1.0 ? sigma_scale / scale : sigma_scale;\n00538   <span class=\"comment\">/*</span>\n00539 <span class=\"comment\">     The size of the kernel is selected to guarantee that the</span>\n00540 <span class=\"comment\">     the first discarded term is at least 10^prec times smaller</span>\n00541 <span class=\"comment\">     than the central value. For that, h should be larger than x, with</span>\n00542 <span class=\"comment\">       e^(-x^2/2sigma^2) = 1/10^prec.</span>\n00543 <span class=\"comment\">     Then,</span>\n00544 <span class=\"comment\">       x = sigma * sqrt( 2 * prec * ln(10) ).</span>\n00545 <span class=\"comment\">   */</span>\n00546   prec = 3.0;\n00547   h = (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>) ceil( sigma * sqrt( 2.0 * prec * log(10.0) ) );\n00548   n = 1+2*h; <span class=\"comment\">/* kernel size */</span>\n00549   kernel = <a class=\"code\" href=\"lsd_8c.html#a16\">new_ntuple_list</a>(n);\n00550 \n00551   <span class=\"comment\">/* auxiliary double image size variables */</span>\n00552   double_x_size = (<span class=\"keywordtype\">int</span>) (2 * in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>);\n00553   double_y_size = (<span class=\"keywordtype\">int</span>) (2 * in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>);\n00554 \n00555   <span class=\"comment\">/* First subsampling: x axis */</span>\n00556   <span class=\"keywordflow\">for</span>(x=0;x&lt;aux-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>;x++)\n00557     {\n00558       <span class=\"comment\">/*</span>\n00559 <span class=\"comment\">         x   is the coordinate in the new image.</span>\n00560 <span class=\"comment\">         xx  is the corresponding x-value in the original size image.</span>\n00561 <span class=\"comment\">         xc  is the integer value, the pixel coordinate of xx.</span>\n00562 <span class=\"comment\">       */</span>\n00563       xx = (<span class=\"keywordtype\">double</span>) x / scale;\n00564       <span class=\"comment\">/* coordinate (0.0,0.0) is in the center of pixel (0,0),</span>\n00565 <span class=\"comment\">         so the pixel with xc=0 get the values of xx from -0.5 to 0.5 */</span>\n00566       xc = (<span class=\"keywordtype\">int</span>) floor( xx + 0.5 );\n00567       <a class=\"code\" href=\"lsd_8c.html#a28\">gaussian_kernel</a>( kernel, sigma, (<span class=\"keywordtype\">double</span>) h + xx - (<span class=\"keywordtype\">double</span>) xc );\n00568       <span class=\"comment\">/* the kernel must be computed for each x because the fine</span>\n00569 <span class=\"comment\">         offset xx-xc is different in each case */</span>\n00570 \n00571       <span class=\"keywordflow\">for</span>(y=0;y&lt;aux-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>;y++)\n00572         {\n00573           sum = 0.0;\n00574           <span class=\"keywordflow\">for</span>(i=0;i&lt;kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a>;i++)\n00575             {\n00576               j = xc - h + i;\n00577 \n00578               <span class=\"comment\">/* symmetry boundary condition */</span>\n00579               <span class=\"keywordflow\">while</span>( j &lt; 0 ) j += double_x_size;\n00580               <span class=\"keywordflow\">while</span>( j &gt;= double_x_size ) j -= double_x_size;\n00581               <span class=\"keywordflow\">if</span>( j &gt;= (<span class=\"keywordtype\">int</span>) in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ) j = double_x_size-1-j;\n00582 \n00583               sum += in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ j + y * in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ] * kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[i];\n00584             }\n00585           aux-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ x + y * aux-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ] = sum;\n00586         }\n00587     }\n00588 \n00589   <span class=\"comment\">/* Second subsampling: y axis */</span>\n00590   <span class=\"keywordflow\">for</span>(y=0;y&lt;out-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>;y++)\n00591     {\n00592       <span class=\"comment\">/*</span>\n00593 <span class=\"comment\">         y   is the coordinate in the new image.</span>\n00594 <span class=\"comment\">         yy  is the corresponding x-value in the original size image.</span>\n00595 <span class=\"comment\">         yc  is the integer value, the pixel coordinate of xx.</span>\n00596 <span class=\"comment\">       */</span>\n00597       yy = (<span class=\"keywordtype\">double</span>) y / scale;\n00598       <span class=\"comment\">/* coordinate (0.0,0.0) is in the center of pixel (0,0),</span>\n00599 <span class=\"comment\">         so the pixel with yc=0 get the values of yy from -0.5 to 0.5 */</span>\n00600       yc = (<span class=\"keywordtype\">int</span>) floor( yy + 0.5 );\n00601       <a class=\"code\" href=\"lsd_8c.html#a28\">gaussian_kernel</a>( kernel, sigma, (<span class=\"keywordtype\">double</span>) h + yy - (<span class=\"keywordtype\">double</span>) yc );\n00602       <span class=\"comment\">/* the kernel must be computed for each y because the fine</span>\n00603 <span class=\"comment\">         offset yy-yc is different in each case */</span>\n00604 \n00605       <span class=\"keywordflow\">for</span>(x=0;x&lt;out-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>;x++)\n00606         {\n00607           sum = 0.0;\n00608           <span class=\"keywordflow\">for</span>(i=0;i&lt;kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a>;i++)\n00609             {\n00610               j = yc - h + i;\n00611 \n00612               <span class=\"comment\">/* symmetry boundary condition */</span>\n00613               <span class=\"keywordflow\">while</span>( j &lt; 0 ) j += double_y_size;\n00614               <span class=\"keywordflow\">while</span>( j &gt;= double_y_size ) j -= double_y_size;\n00615               <span class=\"keywordflow\">if</span>( j &gt;= (<span class=\"keywordtype\">int</span>) in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> ) j = double_y_size-1-j;\n00616 \n00617               sum += aux-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ x + j * aux-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ] * kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[i];\n00618             }\n00619           out-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ x + y * out-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ] = sum;\n00620         }\n00621     }\n00622 \n00623   <span class=\"comment\">/* free memory */</span>\n00624   <a class=\"code\" href=\"lsd_8c.html#a15\">free_ntuple_list</a>(kernel);\n00625   <a class=\"code\" href=\"lsd_8c.html#a25\">free_image_double</a>(aux);\n00626 \n00627   <span class=\"keywordflow\">return</span> out;\n00628 }\n00629 \n00630 \n00631 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00632 <span class=\"comment\">/*--------------------------------- Gradient ---------------------------------*/</span>\n00633 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00634 \n00635 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00636 <span class=\"comment\">/** Computes the direction of the level line of 'in' at each point.</span>\n00637 <span class=\"comment\"></span>\n00638 <span class=\"comment\">    The result is:</span>\n00639 <span class=\"comment\">    - an image_double with the angle at each pixel, or NOTDEF if not defined.</span>\n00640 <span class=\"comment\">    - the image_double 'modgrad' (a pointer is passed as argument)</span>\n00641 <span class=\"comment\">      with the gradient magnitude at each point.</span>\n00642 <span class=\"comment\">    - a list of pixels 'list_p' roughly ordered by decreasing</span>\n00643 <span class=\"comment\">      gradient magnitude. (The order is made by classifying points</span>\n00644 <span class=\"comment\">      into bins by gradient magnitude. The parameters 'n_bins' and</span>\n00645 <span class=\"comment\">      'max_grad' specify the number of bins and the gradient modulus</span>\n00646 <span class=\"comment\">      at the highest bin. The pixels in the list would be in</span>\n00647 <span class=\"comment\">      decreasing gradient magnitude, up to a precision of the size of</span>\n00648 <span class=\"comment\">      the bins.)</span>\n00649 <span class=\"comment\">    - a pointer 'mem_p' to the memory used by 'list_p' to be able to</span>\n00650 <span class=\"comment\">      free the memory when it is not used anymore.</span>\n00651 <span class=\"comment\"> */</span>\n<a name=\"l00652\"></a><a class=\"code\" href=\"lsd_8c.html#a30\">00652</a> <span class=\"keyword\">static</span> <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> <a class=\"code\" href=\"lsd_8c.html#a30\">ll_angle</a>( <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> in, <span class=\"keywordtype\">double</span> threshold,\n00653                               <span class=\"keyword\">struct</span> <a class=\"code\" href=\"structcoorlist.html\">coorlist</a> ** list_p, <span class=\"keywordtype\">void</span> ** mem_p,\n00654                               <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> * modgrad, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> n_bins,\n00655                               <span class=\"keywordtype\">double</span> max_grad )\n00656 {\n00657   <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> g;\n00658   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> n,p,x,y,adr,i;\n00659   <span class=\"keywordtype\">double</span> com1,com2,gx,gy,norm,norm2;\n00660   <span class=\"comment\">/* the rest of the variables are used for pseudo-ordering</span>\n00661 <span class=\"comment\">     the gradient magnitude values */</span>\n00662   <span class=\"keywordtype\">int</span> list_count = 0;\n00663   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> * list;\n00664   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> ** range_l_s; <span class=\"comment\">/* array of pointers to start of bin list */</span>\n00665   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> ** range_l_e; <span class=\"comment\">/* array of pointers to end of bin list */</span>\n00666   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> * start;\n00667   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> * end;\n00668 \n00669   <span class=\"comment\">/* check parameters */</span>\n00670   <span class=\"keywordflow\">if</span>( in == NULL || in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL || in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> == 0 || in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> == 0 )\n00671     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ll_angle: invalid image.\"</span>);\n00672   <span class=\"keywordflow\">if</span>( threshold &lt; 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ll_angle: 'threshold' must be positive.\"</span>);\n00673   <span class=\"keywordflow\">if</span>( list_p == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ll_angle: NULL pointer 'list_p'.\"</span>);\n00674   <span class=\"keywordflow\">if</span>( mem_p == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ll_angle: NULL pointer 'mem_p'.\"</span>);\n00675   <span class=\"keywordflow\">if</span>( modgrad == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ll_angle: NULL pointer 'modgrad'.\"</span>);\n00676   <span class=\"keywordflow\">if</span>( n_bins == 0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ll_angle: 'n_bins' must be positive.\"</span>);\n00677   <span class=\"keywordflow\">if</span>( max_grad &lt;= 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ll_angle: 'max_grad' must be positive.\"</span>);\n00678 \n00679   <span class=\"comment\">/* image size shortcuts */</span>\n00680   n = in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>;\n00681   p = in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>;\n00682 \n00683   <span class=\"comment\">/* allocate output image */</span>\n00684   g = <a class=\"code\" href=\"lsd_8c.html#a26\">new_image_double</a>(in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>,in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>);\n00685 \n00686   <span class=\"comment\">/* get memory for the image of gradient modulus */</span>\n00687   *modgrad = <a class=\"code\" href=\"lsd_8c.html#a26\">new_image_double</a>(in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>,in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>);\n00688 \n00689   <span class=\"comment\">/* get memory for \"ordered\" list of pixels */</span>\n00690   list = (<span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> *) calloc( (size_t) (n*p), <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structcoorlist.html\">coorlist</a>) );\n00691   *mem_p = (<span class=\"keywordtype\">void</span> *) list;\n00692   range_l_s = (<span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> **) calloc( (size_t) n_bins,\n00693                                            <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structcoorlist.html\">coorlist</a> *) );\n00694   range_l_e = (<span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> **) calloc( (size_t) n_bins,\n00695                                            <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structcoorlist.html\">coorlist</a> *) );\n00696   <span class=\"keywordflow\">if</span>( list == NULL || range_l_s == NULL || range_l_e == NULL )\n00697     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00698   <span class=\"keywordflow\">for</span>(i=0;i&lt;n_bins;i++) range_l_s[i] = range_l_e[i] = NULL;\n00699 \n00700   <span class=\"comment\">/* 'undefined' on the down and right boundaries */</span>\n00701   <span class=\"keywordflow\">for</span>(x=0;x&lt;p;x++) g-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[(n-1)*p+x] = <a class=\"code\" href=\"lsd_8c.html#a4\">NOTDEF</a>;\n00702   <span class=\"keywordflow\">for</span>(y=0;y&lt;n;y++) g-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[p*y+p-1]   = <a class=\"code\" href=\"lsd_8c.html#a4\">NOTDEF</a>;\n00703 \n00704   <span class=\"comment\">/* compute gradient on the remaining pixels */</span>\n00705   <span class=\"keywordflow\">for</span>(x=0;x&lt;p-1;x++)\n00706     <span class=\"keywordflow\">for</span>(y=0;y&lt;n-1;y++)\n00707       {\n00708         adr = y*p+x;\n00709 \n00710         <span class=\"comment\">/*</span>\n00711 <span class=\"comment\">           Norm 2 computation using 2x2 pixel window:</span>\n00712 <span class=\"comment\">             A B</span>\n00713 <span class=\"comment\">             C D</span>\n00714 <span class=\"comment\">           and</span>\n00715 <span class=\"comment\">             com1 = D-A,  com2 = B-C.</span>\n00716 <span class=\"comment\">           Then</span>\n00717 <span class=\"comment\">             gx = B+D - (A+C)   horizontal difference</span>\n00718 <span class=\"comment\">             gy = C+D - (A+B)   vertical difference</span>\n00719 <span class=\"comment\">           com1 and com2 are just to avoid 2 additions.</span>\n00720 <span class=\"comment\">         */</span>\n00721         com1 = in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[adr+p+1] - in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[adr];\n00722         com2 = in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[adr+1]   - in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[adr+p];\n00723 \n00724         gx = com1+com2; <span class=\"comment\">/* gradient x component */</span>\n00725         gy = com1-com2; <span class=\"comment\">/* gradient y component */</span>\n00726         norm2 = gx*gx+gy*gy;\n00727         norm = sqrt( norm2 / 4.0 ); <span class=\"comment\">/* gradient norm */</span>\n00728 \n00729         (*modgrad)-&gt;data[adr] = norm; <span class=\"comment\">/* store gradient norm */</span>\n00730 \n00731         <span class=\"keywordflow\">if</span>( norm &lt;= threshold ) <span class=\"comment\">/* norm too small, gradient no defined */</span>\n00732           g-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[adr] = <a class=\"code\" href=\"lsd_8c.html#a4\">NOTDEF</a>; <span class=\"comment\">/* gradient angle not defined */</span>\n00733         <span class=\"keywordflow\">else</span>\n00734           {\n00735             <span class=\"comment\">/* gradient angle computation */</span>\n00736             g-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[adr] = atan2(gx,-gy);\n00737 \n00738             <span class=\"comment\">/* store the point in the right bin according to its norm */</span>\n00739             i = (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>) (norm * (<span class=\"keywordtype\">double</span>) n_bins / max_grad);\n00740             <span class=\"keywordflow\">if</span>( i &gt;= n_bins ) i = n_bins-1;\n00741             <span class=\"keywordflow\">if</span>( range_l_e[i] == NULL )\n00742               range_l_s[i] = range_l_e[i] = list+list_count++;\n00743             <span class=\"keywordflow\">else</span>\n00744               {\n00745                 range_l_e[i]-&gt;next = list+list_count;\n00746                 range_l_e[i] = list+list_count++;\n00747               }\n00748             range_l_e[i]-&gt;x = (<span class=\"keywordtype\">int</span>) x;\n00749             range_l_e[i]-&gt;y = (<span class=\"keywordtype\">int</span>) y;\n00750             range_l_e[i]-&gt;next = NULL;\n00751           }\n00752       }\n00753 \n00754   <span class=\"comment\">/* Make the list of pixels (almost) ordered by norm value.</span>\n00755 <span class=\"comment\">     It starts by the larger bin, so the list starts by the</span>\n00756 <span class=\"comment\">     pixels with higher gradient value. Pixels would be ordered</span>\n00757 <span class=\"comment\">     by norm value, up to a precision given by max_grad/n_bins.</span>\n00758 <span class=\"comment\">   */</span>\n00759   <span class=\"keywordflow\">for</span>(i=n_bins-1; i&gt;0 &amp;&amp; range_l_s[i]==NULL; i--);\n00760   start = range_l_s[i];\n00761   end = range_l_e[i];\n00762   <span class=\"keywordflow\">if</span>( start != NULL )\n00763     <span class=\"keywordflow\">for</span>(i--;i&gt;0; i--)\n00764       <span class=\"keywordflow\">if</span>( range_l_s[i] != NULL )\n00765         {\n00766           end-&gt;next = range_l_s[i];\n00767           end = range_l_e[i];\n00768         }\n00769   *list_p = start;\n00770 \n00771   <span class=\"comment\">/* free memory */</span>\n00772   free( (<span class=\"keywordtype\">void</span> *) range_l_s );\n00773   free( (<span class=\"keywordtype\">void</span> *) range_l_e );\n00774 \n00775   <span class=\"keywordflow\">return</span> g;\n00776 }\n00777 \n00778 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00779 <span class=\"comment\">/** Is point (x,y) aligned to angle theta, up to precision 'prec'?</span>\n00780 <span class=\"comment\"> */</span>\n<a name=\"l00781\"></a><a class=\"code\" href=\"lsd_8c.html#a31\">00781</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"lsd_8c.html#a31\">isaligned</a>( <span class=\"keywordtype\">int</span> x, <span class=\"keywordtype\">int</span> y, <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> angles, <span class=\"keywordtype\">double</span> theta,\n00782                       <span class=\"keywordtype\">double</span> prec )\n00783 {\n00784   <span class=\"keywordtype\">double</span> a;\n00785 \n00786   <span class=\"comment\">/* check parameters */</span>\n00787   <span class=\"keywordflow\">if</span>( angles == NULL || angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL )\n00788     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"isaligned: invalid image 'angles'.\"</span>);\n00789   <span class=\"keywordflow\">if</span>( x &lt; 0 || y &lt; 0 || x &gt;= (<span class=\"keywordtype\">int</span>) angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> || y &gt;= (<span class=\"keywordtype\">int</span>) angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> )\n00790     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"isaligned: (x,y) out of the image.\"</span>);\n00791   <span class=\"keywordflow\">if</span>( prec &lt; 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"isaligned: 'prec' must be positive.\"</span>);\n00792 \n00793   <span class=\"comment\">/* angle at pixel (x,y) */</span>\n00794   a = angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ x + y * angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ];\n00795 \n00796   <span class=\"comment\">/* pixels whose level-line angle is not defined</span>\n00797 <span class=\"comment\">     are considered as NON-aligned */</span>\n00798   <span class=\"keywordflow\">if</span>( a == <a class=\"code\" href=\"lsd_8c.html#a4\">NOTDEF</a> ) <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a2\">FALSE</a>;  <span class=\"comment\">/* there is no need to call the function</span>\n00799 <span class=\"comment\">                                      'double_equal' here because there is</span>\n00800 <span class=\"comment\">                                      no risk of problems related to the</span>\n00801 <span class=\"comment\">                                      comparison doubles, we are only</span>\n00802 <span class=\"comment\">                                      interested in the exact NOTDEF value */</span>\n00803 \n00804   <span class=\"comment\">/* it is assumed that 'theta' and 'a' are in the range [-pi,pi] */</span>\n00805   theta -= a;\n00806   <span class=\"keywordflow\">if</span>( theta &lt; 0.0 ) theta = -theta;\n00807   <span class=\"keywordflow\">if</span>( theta &gt; <a class=\"code\" href=\"lsd_8c.html#a5\">M_3_2_PI</a> )\n00808     {\n00809       theta -= <a class=\"code\" href=\"lsd_8c.html#a6\">M_2__PI</a>;\n00810       <span class=\"keywordflow\">if</span>( theta &lt; 0.0 ) theta = -theta;\n00811     }\n00812 \n00813   <span class=\"keywordflow\">return</span> theta &lt; prec;\n00814 }\n00815 \n00816 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00817 <span class=\"comment\">/** Absolute value angle difference.</span>\n00818 <span class=\"comment\"> */</span>\n<a name=\"l00819\"></a><a class=\"code\" href=\"lsd_8c.html#a32\">00819</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"lsd_8c.html#a32\">angle_diff</a>(<span class=\"keywordtype\">double</span> a, <span class=\"keywordtype\">double</span> b)\n00820 {\n00821   a -= b;\n00822   <span class=\"keywordflow\">while</span>( a &lt;= -<a class=\"code\" href=\"lsd_8c.html#a1\">M_PI</a> ) a += <a class=\"code\" href=\"lsd_8c.html#a6\">M_2__PI</a>;\n00823   <span class=\"keywordflow\">while</span>( a &gt;   <a class=\"code\" href=\"lsd_8c.html#a1\">M_PI</a> ) a -= <a class=\"code\" href=\"lsd_8c.html#a6\">M_2__PI</a>;\n00824   <span class=\"keywordflow\">if</span>( a &lt; 0.0 ) a = -a;\n00825   <span class=\"keywordflow\">return</span> a;\n00826 }\n00827 \n00828 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00829 <span class=\"comment\">/** Signed angle difference.</span>\n00830 <span class=\"comment\"> */</span>\n<a name=\"l00831\"></a><a class=\"code\" href=\"lsd_8c.html#a33\">00831</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"lsd_8c.html#a33\">angle_diff_signed</a>(<span class=\"keywordtype\">double</span> a, <span class=\"keywordtype\">double</span> b)\n00832 {\n00833   a -= b;\n00834   <span class=\"keywordflow\">while</span>( a &lt;= -<a class=\"code\" href=\"lsd_8c.html#a1\">M_PI</a> ) a += <a class=\"code\" href=\"lsd_8c.html#a6\">M_2__PI</a>;\n00835   <span class=\"keywordflow\">while</span>( a &gt;   <a class=\"code\" href=\"lsd_8c.html#a1\">M_PI</a> ) a -= <a class=\"code\" href=\"lsd_8c.html#a6\">M_2__PI</a>;\n00836   <span class=\"keywordflow\">return</span> a;\n00837 }\n00838 \n00839 \n00840 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00841 <span class=\"comment\">/*----------------------------- NFA computation ------------------------------*/</span>\n00842 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00843 \n00844 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00845 <span class=\"comment\">/** Computes the natural logarithm of the absolute value of</span>\n00846 <span class=\"comment\">    the gamma function of x using the Lanczos approximation.</span>\n00847 <span class=\"comment\">    See http://www.rskey.org/gamma.htm</span>\n00848 <span class=\"comment\"></span>\n00849 <span class=\"comment\">    The formula used is</span>\n00850 <span class=\"comment\">    @f[</span>\n00851 <span class=\"comment\">      \\Gamma(x) = \\frac{ \\sum_{n=0}^{N} q_n x^n }{ \\Pi_{n=0}^{N} (x+n) }</span>\n00852 <span class=\"comment\">                  (x+5.5)^{x+0.5} e^{-(x+5.5)}</span>\n00853 <span class=\"comment\">    @f]</span>\n00854 <span class=\"comment\">    so</span>\n00855 <span class=\"comment\">    @f[</span>\n00856 <span class=\"comment\">      \\log\\Gamma(x) = \\log\\left( \\sum_{n=0}^{N} q_n x^n \\right)</span>\n00857 <span class=\"comment\">                      + (x+0.5) \\log(x+5.5) - (x+5.5) - \\sum_{n=0}^{N} \\log(x+n)</span>\n00858 <span class=\"comment\">    @f]</span>\n00859 <span class=\"comment\">    and</span>\n00860 <span class=\"comment\">      q0 = 75122.6331530,</span>\n00861 <span class=\"comment\">      q1 = 80916.6278952,</span>\n00862 <span class=\"comment\">      q2 = 36308.2951477,</span>\n00863 <span class=\"comment\">      q3 = 8687.24529705,</span>\n00864 <span class=\"comment\">      q4 = 1168.92649479,</span>\n00865 <span class=\"comment\">      q5 = 83.8676043424,</span>\n00866 <span class=\"comment\">      q6 = 2.50662827511.</span>\n00867 <span class=\"comment\"> */</span>\n<a name=\"l00868\"></a><a class=\"code\" href=\"lsd_8c.html#a34\">00868</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"lsd_8c.html#a34\">log_gamma_lanczos</a>(<span class=\"keywordtype\">double</span> x)\n00869 {\n00870   <span class=\"keyword\">static</span> <span class=\"keywordtype\">double</span> q[7] = { 75122.6331530, 80916.6278952, 36308.2951477,\n00871                          8687.24529705, 1168.92649479, 83.8676043424,\n00872                          2.50662827511 };\n00873   <span class=\"keywordtype\">double</span> a = (x+0.5) * log(x+5.5) - (x+5.5);\n00874   <span class=\"keywordtype\">double</span> b = 0.0;\n00875   <span class=\"keywordtype\">int</span> n;\n00876 \n00877   <span class=\"keywordflow\">for</span>(n=0;n&lt;7;n++)\n00878     {\n00879       a -= log( x + (<span class=\"keywordtype\">double</span>) n );\n00880       b += q[n] * pow( x, (<span class=\"keywordtype\">double</span>) n );\n00881     }\n00882   <span class=\"keywordflow\">return</span> a + log(b);\n00883 }\n00884 \n00885 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00886 <span class=\"comment\">/** Computes the natural logarithm of the absolute value of</span>\n00887 <span class=\"comment\">    the gamma function of x using Windschitl method.</span>\n00888 <span class=\"comment\">    See http://www.rskey.org/gamma.htm</span>\n00889 <span class=\"comment\"></span>\n00890 <span class=\"comment\">    The formula used is</span>\n00891 <span class=\"comment\">    @f[</span>\n00892 <span class=\"comment\">        \\Gamma(x) = \\sqrt{\\frac{2\\pi}{x}} \\left( \\frac{x}{e}</span>\n00893 <span class=\"comment\">                    \\sqrt{ x\\sinh(1/x) + \\frac{1}{810x^6} } \\right)^x</span>\n00894 <span class=\"comment\">    @f]</span>\n00895 <span class=\"comment\">    so</span>\n00896 <span class=\"comment\">    @f[</span>\n00897 <span class=\"comment\">        \\log\\Gamma(x) = 0.5\\log(2\\pi) + (x-0.5)\\log(x) - x</span>\n00898 <span class=\"comment\">                      + 0.5x\\log\\left( x\\sinh(1/x) + \\frac{1}{810x^6} \\right).</span>\n00899 <span class=\"comment\">    @f]</span>\n00900 <span class=\"comment\">    This formula is a good approximation when x &gt; 15.</span>\n00901 <span class=\"comment\"> */</span>\n<a name=\"l00902\"></a><a class=\"code\" href=\"lsd_8c.html#a35\">00902</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"lsd_8c.html#a35\">log_gamma_windschitl</a>(<span class=\"keywordtype\">double</span> x)\n00903 {\n00904   <span class=\"keywordflow\">return</span> 0.918938533204673 + (x-0.5)*log(x) - x\n00905          + 0.5*x*log( x*sinh(1/x) + 1/(810.0*pow(x,6.0)) );\n00906 }\n00907 \n00908 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00909 <span class=\"comment\">/** Computes the natural logarithm of the absolute value of</span>\n00910 <span class=\"comment\">    the gamma function of x. When x&gt;15 use log_gamma_windschitl(),</span>\n00911 <span class=\"comment\">    otherwise use log_gamma_lanczos().</span>\n00912 <span class=\"comment\"> */</span>\n<a name=\"l00913\"></a><a class=\"code\" href=\"lsd_8c.html#a10\">00913</a> <span class=\"preprocessor\">#define log_gamma(x) ((x)&gt;15.0?log_gamma_windschitl(x):log_gamma_lanczos(x))</span>\n00914 <span class=\"preprocessor\"></span>\n00915 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00916 <span class=\"comment\">/** Size of the table to store already computed inverse values.</span>\n00917 <span class=\"comment\"> */</span>\n<a name=\"l00918\"></a><a class=\"code\" href=\"lsd_8c.html#a11\">00918</a> <span class=\"preprocessor\">#define TABSIZE 100000</span>\n00919 <span class=\"preprocessor\"></span>\n00920 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00921 <span class=\"comment\">/** Computes -log10(NFA).</span>\n00922 <span class=\"comment\"></span>\n00923 <span class=\"comment\">    NFA stands for Number of False Alarms:</span>\n00924 <span class=\"comment\">    @f[</span>\n00925 <span class=\"comment\">        \\mathrm{NFA} = NT \\cdot B(n,k,p)</span>\n00926 <span class=\"comment\">    @f]</span>\n00927 <span class=\"comment\"></span>\n00928 <span class=\"comment\">    - NT       - number of tests</span>\n00929 <span class=\"comment\">    - B(n,k,p) - tail of binomial distribution with parameters n,k and p:</span>\n00930 <span class=\"comment\">    @f[</span>\n00931 <span class=\"comment\">        B(n,k,p) = \\sum_{j=k}^n</span>\n00932 <span class=\"comment\">                   \\left(\\begin{array}{c}n\\\\j\\end{array}\\right)</span>\n00933 <span class=\"comment\">                   p^{j} (1-p)^{n-j}</span>\n00934 <span class=\"comment\">    @f]</span>\n00935 <span class=\"comment\"></span>\n00936 <span class=\"comment\">    The value -log10(NFA) is equivalent but more intuitive than NFA:</span>\n00937 <span class=\"comment\">    - -1 corresponds to 10 mean false alarms</span>\n00938 <span class=\"comment\">    -  0 corresponds to 1 mean false alarm</span>\n00939 <span class=\"comment\">    -  1 corresponds to 0.1 mean false alarms</span>\n00940 <span class=\"comment\">    -  2 corresponds to 0.01 mean false alarms</span>\n00941 <span class=\"comment\">    -  ...</span>\n00942 <span class=\"comment\"></span>\n00943 <span class=\"comment\">    Used this way, the bigger the value, better the detection,</span>\n00944 <span class=\"comment\">    and a logarithmic scale is used.</span>\n00945 <span class=\"comment\"></span>\n00946 <span class=\"comment\">    @param n,k,p binomial parameters.</span>\n00947 <span class=\"comment\">    @param logNT logarithm of Number of Tests</span>\n00948 <span class=\"comment\"></span>\n00949 <span class=\"comment\">    The computation is based in the gamma function by the following</span>\n00950 <span class=\"comment\">    relation:</span>\n00951 <span class=\"comment\">    @f[</span>\n00952 <span class=\"comment\">        \\left(\\begin{array}{c}n\\\\k\\end{array}\\right)</span>\n00953 <span class=\"comment\">        = \\frac{ \\Gamma(n+1) }{ \\Gamma(k+1) \\cdot \\Gamma(n-k+1) }.</span>\n00954 <span class=\"comment\">    @f]</span>\n00955 <span class=\"comment\">    We use efficient algorithms to compute the logarithm of</span>\n00956 <span class=\"comment\">    the gamma function.</span>\n00957 <span class=\"comment\"></span>\n00958 <span class=\"comment\">    To make the computation faster, not all the sum is computed, part</span>\n00959 <span class=\"comment\">    of the terms are neglected based on a bound to the error obtained</span>\n00960 <span class=\"comment\">    (an error of 10% in the result is accepted).</span>\n00961 <span class=\"comment\"> */</span>\n<a name=\"l00962\"></a><a class=\"code\" href=\"lsd_8c.html#a36\">00962</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"lsd_8c.html#a36\">nfa</a>(<span class=\"keywordtype\">int</span> n, <span class=\"keywordtype\">int</span> k, <span class=\"keywordtype\">double</span> p, <span class=\"keywordtype\">double</span> logNT)\n00963 {\n00964   <span class=\"keyword\">static</span> <span class=\"keywordtype\">double</span> inv[<a class=\"code\" href=\"lsd_8c.html#a11\">TABSIZE</a>];   <span class=\"comment\">/* table to keep computed inverse values */</span>\n00965   <span class=\"keywordtype\">double</span> tolerance = 0.1;       <span class=\"comment\">/* an error of 10% in the result is accepted */</span>\n00966   <span class=\"keywordtype\">double</span> log1term,term,bin_term,mult_term,bin_tail,err,p_term;\n00967   <span class=\"keywordtype\">int</span> i;\n00968 \n00969   <span class=\"comment\">/* check parameters */</span>\n00970   <span class=\"keywordflow\">if</span>( n&lt;0 || k&lt;0 || k&gt;n || p&lt;=0.0 || p&gt;=1.0 )\n00971     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"nfa: wrong n, k or p values.\"</span>);\n00972 \n00973   <span class=\"comment\">/* trivial cases */</span>\n00974   <span class=\"keywordflow\">if</span>( n==0 || k==0 ) <span class=\"keywordflow\">return</span> -logNT;\n00975   <span class=\"keywordflow\">if</span>( n==k ) <span class=\"keywordflow\">return</span> -logNT - (<span class=\"keywordtype\">double</span>) n * log10(p);\n00976 \n00977   <span class=\"comment\">/* probability term */</span>\n00978   p_term = p / (1.0-p);\n00979 \n00980   <span class=\"comment\">/* compute the first term of the series */</span>\n00981   <span class=\"comment\">/*</span>\n00982 <span class=\"comment\">     binomial_tail(n,k,p) = sum_{i=k}^n bincoef(n,i) * p^i * (1-p)^{n-i}</span>\n00983 <span class=\"comment\">     where bincoef(n,i) are the binomial coefficients.</span>\n00984 <span class=\"comment\">     But</span>\n00985 <span class=\"comment\">       bincoef(n,k) = gamma(n+1) / ( gamma(k+1) * gamma(n-k+1) ).</span>\n00986 <span class=\"comment\">     We use this to compute the first term. Actually the log of it.</span>\n00987 <span class=\"comment\">   */</span>\n00988   log1term = <a class=\"code\" href=\"lsd_8c.html#a10\">log_gamma</a>( (<span class=\"keywordtype\">double</span>) n + 1.0 ) - <a class=\"code\" href=\"lsd_8c.html#a10\">log_gamma</a>( (<span class=\"keywordtype\">double</span>) k + 1.0 )\n00989            - <a class=\"code\" href=\"lsd_8c.html#a10\">log_gamma</a>( (<span class=\"keywordtype\">double</span>) (n-k) + 1.0 )\n00990            + (<span class=\"keywordtype\">double</span>) k * log(p) + (<span class=\"keywordtype\">double</span>) (n-k) * log(1.0-p);\n00991   term = exp(log1term);\n00992 \n00993   <span class=\"comment\">/* in some cases no more computations are needed */</span>\n00994   <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a13\">double_equal</a>(term,0.0) )              <span class=\"comment\">/* the first term is almost zero */</span>\n00995     {\n00996       <span class=\"keywordflow\">if</span>( (<span class=\"keywordtype\">double</span>) k &gt; (<span class=\"keywordtype\">double</span>) n * p )     <span class=\"comment\">/* at begin or end of the tail?  */</span>\n00997         <span class=\"keywordflow\">return</span> -log1term / <a class=\"code\" href=\"lsd_8c.html#a0\">M_LN10</a> - logNT;  <span class=\"comment\">/* end: use just the first term  */</span>\n00998       <span class=\"keywordflow\">else</span>\n00999         <span class=\"keywordflow\">return</span> -logNT;                      <span class=\"comment\">/* begin: the tail is roughly 1  */</span>\n01000     }\n01001 \n01002   <span class=\"comment\">/* compute more terms if needed */</span>\n01003   bin_tail = term;\n01004   <span class=\"keywordflow\">for</span>(i=k+1;i&lt;=n;i++)\n01005     {\n01006       <span class=\"comment\">/*</span>\n01007 <span class=\"comment\">         As</span>\n01008 <span class=\"comment\">           term_i = bincoef(n,i) * p^i * (1-p)^(n-i)</span>\n01009 <span class=\"comment\">         and</span>\n01010 <span class=\"comment\">           bincoef(n,i)/bincoef(n,i-1) = n-1+1 / i,</span>\n01011 <span class=\"comment\">         then,</span>\n01012 <span class=\"comment\">           term_i / term_i-1 = (n-i+1)/i * p/(1-p)</span>\n01013 <span class=\"comment\">         and</span>\n01014 <span class=\"comment\">           term_i = term_i-1 * (n-i+1)/i * p/(1-p).</span>\n01015 <span class=\"comment\">         1/i is stored in a table as they are computed,</span>\n01016 <span class=\"comment\">         because divisions are expensive.</span>\n01017 <span class=\"comment\">         p/(1-p) is computed only once and stored in 'p_term'.</span>\n01018 <span class=\"comment\">       */</span>\n01019       bin_term = (<span class=\"keywordtype\">double</span>) (n-i+1) * ( i&lt;<a class=\"code\" href=\"lsd_8c.html#a11\">TABSIZE</a> ?\n01020                    ( inv[i]!=0.0 ? inv[i] : ( inv[i] = 1.0 / (<span class=\"keywordtype\">double</span>) i ) ) :\n01021                    1.0 / (<span class=\"keywordtype\">double</span>) i );\n01022 \n01023       mult_term = bin_term * p_term;\n01024       term *= mult_term;\n01025       bin_tail += term;\n01026       <span class=\"keywordflow\">if</span>(bin_term&lt;1.0)\n01027         {\n01028           <span class=\"comment\">/* When bin_term&lt;1 then mult_term_j&lt;mult_term_i for j&gt;i.</span>\n01029 <span class=\"comment\">             Then, the error on the binomial tail when truncated at</span>\n01030 <span class=\"comment\">             the i term can be bounded by a geometric series of form</span>\n01031 <span class=\"comment\">             term_i * sum mult_term_i^j.                            */</span>\n01032           err = term * ( ( 1.0 - pow( mult_term, (<span class=\"keywordtype\">double</span>) (n-i+1) ) ) /\n01033                          (1.0-mult_term) - 1.0 );\n01034 \n01035           <span class=\"comment\">/* One wants an error at most of tolerance*final_result, or:</span>\n01036 <span class=\"comment\">             tolerance * abs(-log10(bin_tail)-logNT).</span>\n01037 <span class=\"comment\">             Now, the error that can be accepted on bin_tail is</span>\n01038 <span class=\"comment\">             given by tolerance*final_result divided by the derivative</span>\n01039 <span class=\"comment\">             of -log10(x) when x=bin_tail. that is:</span>\n01040 <span class=\"comment\">             tolerance * abs(-log10(bin_tail)-logNT) / (1/bin_tail)</span>\n01041 <span class=\"comment\">             Finally, we truncate the tail if the error is less than:</span>\n01042 <span class=\"comment\">             tolerance * abs(-log10(bin_tail)-logNT) * bin_tail        */</span>\n01043           <span class=\"keywordflow\">if</span>( err &lt; tolerance * fabs(-log10(bin_tail)-logNT) * bin_tail ) <span class=\"keywordflow\">break</span>;\n01044         }\n01045     }\n01046   <span class=\"keywordflow\">return</span> -log10(bin_tail) - logNT;\n01047 }\n01048 \n01049 \n01050 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n01051 <span class=\"comment\">/*--------------------------- Rectangle structure ----------------------------*/</span>\n01052 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n01053 \n01054 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n01055 <span class=\"comment\">/** Rectangle structure: line segment with width.</span>\n01056 <span class=\"comment\"> */</span>\n<a name=\"l01057\"></a><a class=\"code\" href=\"structrect.html\">01057</a> <span class=\"keyword\">struct </span><a class=\"code\" href=\"structrect.html\">rect</a>\n01058 {\n<a name=\"l01059\"></a><a class=\"code\" href=\"structrect.html#o3\">01059</a>   <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"structrect.html#o0\">x1</a>,<a class=\"code\" href=\"structrect.html#o1\">y1</a>,<a class=\"code\" href=\"structrect.html#o2\">x2</a>,<a class=\"code\" href=\"structrect.html#o3\">y2</a>;  <span class=\"comment\">/* first and second point of the line segment */</span>\n<a name=\"l01060\"></a><a class=\"code\" href=\"structrect.html#o4\">01060</a>   <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"structrect.html#o4\">width</a>;        <span class=\"comment\">/* rectangle width */</span>\n<a name=\"l01061\"></a><a class=\"code\" href=\"structrect.html#o6\">01061</a>   <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"structrect.html#o5\">x</a>,<a class=\"code\" href=\"structrect.html#o6\">y</a>;          <span class=\"comment\">/* center of the rectangle */</span>\n<a name=\"l01062\"></a><a class=\"code\" href=\"structrect.html#o7\">01062</a>   <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"structrect.html#o7\">theta</a>;        <span class=\"comment\">/* angle */</span>\n<a name=\"l01063\"></a><a class=\"code\" href=\"structrect.html#o9\">01063</a>   <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"structrect.html#o8\">dx</a>,<a class=\"code\" href=\"structrect.html#o9\">dy</a>;        <span class=\"comment\">/* vector with the line segment angle */</span>\n<a name=\"l01064\"></a><a class=\"code\" href=\"structrect.html#o10\">01064</a>   <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"structrect.html#o10\">prec</a>;         <span class=\"comment\">/* tolerance angle */</span>\n<a name=\"l01065\"></a><a class=\"code\" href=\"structrect.html#o11\">01065</a>   <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"structrect.html#o11\">p</a>;            <span class=\"comment\">/* probability of a point with angle within 'prec' */</span>\n01066 };\n01067 \n01068 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n01069 <span class=\"comment\">/** Copy one rectangle structure to another.</span>\n01070 <span class=\"comment\"> */</span>\n<a name=\"l01071\"></a><a class=\"code\" href=\"lsd_8c.html#a37\">01071</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structrect.html\">rect</a> * in, <span class=\"keyword\">struct</span> <a class=\"code\" href=\"structrect.html\">rect</a> * out)\n01072 {\n01073   <span class=\"comment\">/* check parameters */</span>\n01074   <span class=\"keywordflow\">if</span>( in == NULL || out == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"rect_copy: invalid 'in' or 'out'.\"</span>);\n01075 \n01076   <span class=\"comment\">/* copy values */</span>\n01077   out-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a>;\n01078   out-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a>;\n01079   out-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a>;\n01080   out-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a>;\n01081   out-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a>;\n01082   out-&gt;<a class=\"code\" href=\"structrect.html#o5\">x</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o5\">x</a>;\n01083   out-&gt;<a class=\"code\" href=\"structrect.html#o6\">y</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o6\">y</a>;\n01084   out-&gt;<a class=\"code\" href=\"structrect.html#o7\">theta</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o7\">theta</a>;\n01085   out-&gt;<a class=\"code\" href=\"structrect.html#o8\">dx</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o8\">dx</a>;\n01086   out-&gt;<a class=\"code\" href=\"structrect.html#o9\">dy</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o9\">dy</a>;\n01087   out-&gt;<a class=\"code\" href=\"structrect.html#o10\">prec</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o10\">prec</a>;\n01088   out-&gt;<a class=\"code\" href=\"structrect.html#o11\">p</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o11\">p</a>;\n01089 }\n01090 \n01091 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n01092 <span class=\"comment\">/** Rectangle points iterator.</span>\n01093 <span class=\"comment\"></span>\n01094 <span class=\"comment\">    The integer coordinates of pixels inside a rectangle are</span>\n01095 <span class=\"comment\">    iteratively explored. This structure keep track of the process and</span>\n01096 <span class=\"comment\">    functions ri_ini(), ri_inc(), ri_end(), and ri_del() are used in</span>\n01097 <span class=\"comment\">    the process. An example of how to use the iterator is as follows:</span>\n01098 <span class=\"comment\">    \\code</span>\n01099 <span class=\"comment\"></span>\n01100 <span class=\"comment\">      struct rect * rec = XXX; // some rectangle</span>\n01101 <span class=\"comment\">      rect_iter * i;</span>\n01102 <span class=\"comment\">      for( i=ri_ini(rec); !ri_end(i); ri_inc(i) )</span>\n01103 <span class=\"comment\">        {</span>\n01104 <span class=\"comment\">          // your code, using 'i-&gt;x' and 'i-&gt;y' as coordinates</span>\n01105 <span class=\"comment\">        }</span>\n01106 <span class=\"comment\">      ri_del(i); // delete iterator</span>\n01107 <span class=\"comment\"></span>\n01108 <span class=\"comment\">    \\endcode</span>\n01109 <span class=\"comment\">    The pixels are explored 'column' by 'column', where we call</span>\n01110 <span class=\"comment\">    'column' a set of pixels with the same x value that are inside the</span>\n01111 <span class=\"comment\">    rectangle. The following is an schematic representation of a</span>\n01112 <span class=\"comment\">    rectangle, the 'column' being explored is marked by colons, and</span>\n01113 <span class=\"comment\">    the current pixel being explored is 'x,y'.</span>\n01114 <span class=\"comment\">    \\verbatim</span>\n01115 <span class=\"comment\"></span>\n01116 <span class=\"comment\">              vx[1],vy[1]</span>\n01117 <span class=\"comment\">                 *   *</span>\n01118 <span class=\"comment\">                *       *</span>\n01119 <span class=\"comment\">               *           *</span>\n01120 <span class=\"comment\">              *               ye</span>\n01121 <span class=\"comment\">             *                :  *</span>\n01122 <span class=\"comment\">        vx[0],vy[0]           :     *</span>\n01123 <span class=\"comment\">               *              :        *</span>\n01124 <span class=\"comment\">                  *          x,y          *</span>\n01125 <span class=\"comment\">                     *        :              *</span>\n01126 <span class=\"comment\">                        *     :            vx[2],vy[2]</span>\n01127 <span class=\"comment\">                           *  :                *</span>\n01128 <span class=\"comment\">        y                     ys              *</span>\n01129 <span class=\"comment\">        ^                        *           *</span>\n01130 <span class=\"comment\">        |                           *       *</span>\n01131 <span class=\"comment\">        |                              *   *</span>\n01132 <span class=\"comment\">        +---&gt; x                      vx[3],vy[3]</span>\n01133 <span class=\"comment\"></span>\n01134 <span class=\"comment\">    \\endverbatim</span>\n01135 <span class=\"comment\">    The first 'column' to be explored is the one with the smaller x</span>\n01136 <span class=\"comment\">    value. Each 'column' is explored starting from the pixel of the</span>\n01137 <span class=\"comment\">    'column' (inside the rectangle) with the smaller y value.</span>\n01138 <span class=\"comment\"></span>\n01139 <span class=\"comment\">    The four corners of the rectangle are stored in order that rotates</span>\n01140 <span class=\"comment\">    around the corners at the arrays 'vx[]' and 'vy[]'. The first</span>\n01141 <span class=\"comment\">    point is always the one with smaller x value.</span>\n01142 <span class=\"comment\"></span>\n01143 <span class=\"comment\">    'x' and 'y' are the coordinates of the pixel being explored. 'ys'</span>\n01144 <span class=\"comment\">    and 'ye' are the start and end values of the current column being</span>\n01145 <span class=\"comment\">    explored. So, 'ys' &lt; 'ye'.</span>\n01146 <span class=\"comment\"> */</span>\n<a name=\"l01147\"></a><a class=\"code\" href=\"structrect__iter.html\">01147</a> <span class=\"keyword\">typedef</span> <span class=\"keyword\">struct</span>\n01148 <span class=\"keyword\"></span>{\n<a name=\"l01149\"></a><a class=\"code\" href=\"structrect__iter.html#o0\">01149</a>   <span class=\"keywordtype\">double</span> vx[4];  <span class=\"comment\">/* rectangle's corner X coordinates in circular order */</span>\n<a name=\"l01150\"></a><a class=\"code\" href=\"structrect__iter.html#o1\">01150</a>   <span class=\"keywordtype\">double</span> vy[4];  <span class=\"comment\">/* rectangle's corner Y coordinates in circular order */</span>\n<a name=\"l01151\"></a><a class=\"code\" href=\"structrect__iter.html#o2\">01151</a>   <span class=\"keywordtype\">double</span> ys,ye;  <span class=\"comment\">/* start and end Y values of current 'column' */</span>\n<a name=\"l01152\"></a><a class=\"code\" href=\"structrect__iter.html#o5\">01152</a>   <span class=\"keywordtype\">int</span> x,y;       <span class=\"comment\">/* coordinates of currently explored pixel */</span>\n01153 } <a class=\"code\" href=\"structrect__iter.html\">rect_iter</a>;\n01154 \n01155 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n01156 <span class=\"comment\">/** Interpolate y value corresponding to 'x' value given, in</span>\n01157 <span class=\"comment\">    the line 'x1,y1' to 'x2,y2'; if 'x1=x2' return the smaller</span>\n01158 <span class=\"comment\">    of 'y1' and 'y2'.</span>\n01159 <span class=\"comment\"></span>\n01160 <span class=\"comment\">    The following restrictions are required:</span>\n01161 <span class=\"comment\">    - x1 &lt;= x2</span>\n01162 <span class=\"comment\">    - x1 &lt;= x</span>\n01163 <span class=\"comment\">    - x  &lt;= x2</span>\n01164 <span class=\"comment\"> */</span>\n<a name=\"l01165\"></a><a class=\"code\" href=\"lsd_8c.html#a38\">01165</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"lsd_8c.html#a38\">inter_low</a>(<span class=\"keywordtype\">double</span> x, <span class=\"keywordtype\">double</span> x1, <span class=\"keywordtype\">double</span> y1, <span class=\"keywordtype\">double</span> x2, <span class=\"keywordtype\">double</span> y2)\n01166 {\n01167   <span class=\"comment\">/* check parameters */</span>\n01168   <span class=\"keywordflow\">if</span>( x1 &gt; x2 || x &lt; x1 || x &gt; x2 )\n01169     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"inter_low: unsuitable input, 'x1&gt;x2' or 'x&lt;x1' or 'x&gt;x2'.\"</span>);\n01170 \n01171   <span class=\"comment\">/* interpolation */</span>\n01172   <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a13\">double_equal</a>(x1,x2) &amp;&amp; y1&lt;y2 ) <span class=\"keywordflow\">return</span> y1;\n01173   <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a13\">double_equal</a>(x1,x2) &amp;&amp; y1&gt;y2 ) <span class=\"keywordflow\">return</span> y2;\n01174   <span class=\"keywordflow\">return</span> y1 + (x-x1) * (y2-y1) / (x2-x1);\n01175 }\n01176 \n01177 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n01178 <span class=\"comment\">/** Interpolate y value corresponding to 'x' value given, in</span>\n01179 <span class=\"comment\">    the line 'x1,y1' to 'x2,y2'; if 'x1=x2' return the larger</span>\n01180 <span class=\"comment\">    of 'y1' and 'y2'.</span>\n01181 <span class=\"comment\"></span>\n01182 <span class=\"comment\">    The following restrictions are required:</span>\n01183 <span class=\"comment\">    - x1 &lt;= x2</span>\n01184 <span class=\"comment\">    - x1 &lt;= x</span>\n01185 <span class=\"comment\">    - x  &lt;= x2</span>\n01186 <span class=\"comment\"> */</span>\n<a name=\"l01187\"></a><a class=\"code\" href=\"lsd_8c.html#a39\">01187</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"lsd_8c.html#a39\">inter_hi</a>(<span class=\"keywordtype\">double</span> x, <span class=\"keywordtype\">double</span> x1, <span class=\"keywordtype\">double</span> y1, <span class=\"keywordtype\">double</span> x2, <span class=\"keywordtype\">double</span> y2)\n01188 {\n01189   <span class=\"comment\">/* check parameters */</span>\n01190   <span class=\"keywordflow\">if</span>( x1 &gt; x2 || x &lt; x1 || x &gt; x2 )\n01191     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"inter_hi: unsuitable input, 'x1&gt;x2' or 'x&lt;x1' or 'x&gt;x2'.\"</span>);\n01192 \n01193   <span class=\"comment\">/* interpolation */</span>\n01194   <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a13\">double_equal</a>(x1,x2) &amp;&amp; y1&lt;y2 ) <span class=\"keywordflow\">return</span> y2;\n01195   <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a13\">double_equal</a>(x1,x2) &amp;&amp; y1&gt;y2 ) <span class=\"keywordflow\">return</span> y1;\n01196   <span class=\"keywordflow\">return</span> y1 + (x-x1) * (y2-y1) / (x2-x1);\n01197 }\n01198 \n01199 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n01200 <span class=\"comment\">/** Free memory used by a rectangle iterator.</span>\n01201 <span class=\"comment\"> */</span>\n<a name=\"l01202\"></a><a class=\"code\" href=\"lsd_8c.html#a40\">01202</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"lsd_8c.html#a40\">ri_del</a>(<a class=\"code\" href=\"structrect__iter.html\">rect_iter</a> * iter)\n01203 {\n01204   <span class=\"keywordflow\">if</span>( iter == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ri_del: NULL iterator.\"</span>);\n01205   free( (<span class=\"keywordtype\">void</span> *) iter );\n01206 }\n01207 \n01208 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n01209 <span class=\"comment\">/** Check if the iterator finished the full iteration.</span>\n01210 <span class=\"comment\"></span>\n01211 <span class=\"comment\">    See details in \\ref rect_iter</span>\n01212 <span class=\"comment\"> */</span>\n<a name=\"l01213\"></a><a class=\"code\" href=\"lsd_8c.html#a41\">01213</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"lsd_8c.html#a41\">ri_end</a>(<a class=\"code\" href=\"structrect__iter.html\">rect_iter</a> * i)\n01214 {\n01215   <span class=\"comment\">/* check input */</span>\n01216   <span class=\"keywordflow\">if</span>( i == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ri_end: NULL iterator.\"</span>);\n01217 \n01218   <span class=\"comment\">/* if the current x value is larger than the larger</span>\n01219 <span class=\"comment\">     x value in the rectangle (vx[2]), we know the full</span>\n01220 <span class=\"comment\">     exploration of the rectangle is finished. */</span>\n01221   <span class=\"keywordflow\">return</span> (<span class=\"keywordtype\">double</span>)(i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a>) &gt; i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[2];\n01222 }\n01223 \n01224 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n01225 <span class=\"comment\">/** Increment a rectangle iterator.</span>\n01226 <span class=\"comment\"></span>\n01227 <span class=\"comment\">    See details in \\ref rect_iter</span>\n01228 <span class=\"comment\"> */</span>\n<a name=\"l01229\"></a><a class=\"code\" href=\"lsd_8c.html#a42\">01229</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"lsd_8c.html#a42\">ri_inc</a>(<a class=\"code\" href=\"structrect__iter.html\">rect_iter</a> * i)\n01230 {\n01231   <span class=\"comment\">/* check input */</span>\n01232   <span class=\"keywordflow\">if</span>( i == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ri_inc: NULL iterator.\"</span>);\n01233 \n01234   <span class=\"comment\">/* if not at end of exploration,</span>\n01235 <span class=\"comment\">     increase y value for next pixel in the 'column' */</span>\n01236   <span class=\"keywordflow\">if</span>( !<a class=\"code\" href=\"lsd_8c.html#a41\">ri_end</a>(i) ) i-&gt;<a class=\"code\" href=\"structrect__iter.html#o5\">y</a>++;\n01237 \n01238   <span class=\"comment\">/* if the end of the current 'column' is reached,</span>\n01239 <span class=\"comment\">     and it is not the end of exploration,</span>\n01240 <span class=\"comment\">     advance to the next 'column' */</span>\n01241   <span class=\"keywordflow\">while</span>( (<span class=\"keywordtype\">double</span>) (i-&gt;<a class=\"code\" href=\"structrect__iter.html#o5\">y</a>) &gt; i-&gt;<a class=\"code\" href=\"structrect__iter.html#o3\">ye</a> &amp;&amp; !<a class=\"code\" href=\"lsd_8c.html#a41\">ri_end</a>(i) )\n01242     {\n01243       <span class=\"comment\">/* increase x, next 'column' */</span>\n01244       i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a>++;\n01245 \n01246       <span class=\"comment\">/* if end of exploration, return */</span>\n01247       <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a41\">ri_end</a>(i) ) <span class=\"keywordflow\">return</span>;\n01248 \n01249       <span class=\"comment\">/* update lower y limit (start) for the new 'column'.</span>\n01250 <span class=\"comment\"></span>\n01251 <span class=\"comment\">         We need to interpolate the y value that corresponds to the</span>\n01252 <span class=\"comment\">         lower side of the rectangle. The first thing is to decide if</span>\n01253 <span class=\"comment\">         the corresponding side is</span>\n01254 <span class=\"comment\"></span>\n01255 <span class=\"comment\">           vx[0],vy[0] to vx[3],vy[3] or</span>\n01256 <span class=\"comment\">           vx[3],vy[3] to vx[2],vy[2]</span>\n01257 <span class=\"comment\"></span>\n01258 <span class=\"comment\">         Then, the side is interpolated for the x value of the</span>\n01259 <span class=\"comment\">         'column'. But, if the side is vertical (as it could happen if</span>\n01260 <span class=\"comment\">         the rectangle is vertical and we are dealing with the first</span>\n01261 <span class=\"comment\">         or last 'columns') then we pick the lower value of the side</span>\n01262 <span class=\"comment\">         by using 'inter_low'.</span>\n01263 <span class=\"comment\">       */</span>\n01264       <span class=\"keywordflow\">if</span>( (<span class=\"keywordtype\">double</span>) i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a> &lt; i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[3] )\n01265         i-&gt;<a class=\"code\" href=\"structrect__iter.html#o2\">ys</a> = <a class=\"code\" href=\"lsd_8c.html#a38\">inter_low</a>((<span class=\"keywordtype\">double</span>)i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a>,i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[0],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[0],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[3],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[3]);\n01266       <span class=\"keywordflow\">else</span>\n01267         i-&gt;<a class=\"code\" href=\"structrect__iter.html#o2\">ys</a> = <a class=\"code\" href=\"lsd_8c.html#a38\">inter_low</a>((<span class=\"keywordtype\">double</span>)i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a>,i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[3],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[3],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[2],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[2]);\n01268 \n01269       <span class=\"comment\">/* update upper y limit (end) for the new 'column'.</span>\n01270 <span class=\"comment\"></span>\n01271 <span class=\"comment\">         We need to interpolate the y value that corresponds to the</span>\n01272 <span class=\"comment\">         upper side of the rectangle. The first thing is to decide if</span>\n01273 <span class=\"comment\">         the corresponding side is</span>\n01274 <span class=\"comment\"></span>\n01275 <span class=\"comment\">           vx[0],vy[0] to vx[1],vy[1] or</span>\n01276 <span class=\"comment\">           vx[1],vy[1] to vx[2],vy[2]</span>\n01277 <span class=\"comment\"></span>\n01278 <span class=\"comment\">         Then, the side is interpolated for the x value of the</span>\n01279 <span class=\"comment\">         'column'. But, if the side is vertical (as it could happen if</span>\n01280 <span class=\"comment\">         the rectangle is vertical and we are dealing with the first</span>\n01281 <span class=\"comment\">         or last 'columns') then we pick the lower value of the side</span>\n01282 <span class=\"comment\">         by using 'inter_low'.</span>\n01283 <span class=\"comment\">       */</span>\n01284       <span class=\"keywordflow\">if</span>( (<span class=\"keywordtype\">double</span>)i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a> &lt; i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[1] )\n01285         i-&gt;<a class=\"code\" href=\"structrect__iter.html#o3\">ye</a> = <a class=\"code\" href=\"lsd_8c.html#a39\">inter_hi</a>((<span class=\"keywordtype\">double</span>)i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a>,i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[0],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[0],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[1],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[1]);\n01286       <span class=\"keywordflow\">else</span>\n01287         i-&gt;<a class=\"code\" href=\"structrect__iter.html#o3\">ye</a> = <a class=\"code\" href=\"lsd_8c.html#a39\">inter_hi</a>((<span class=\"keywordtype\">double</span>)i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a>,i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[1],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[1],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[2],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[2]);\n01288 \n01289       <span class=\"comment\">/* new y */</span>\n01290       i-&gt;<a class=\"code\" href=\"structrect__iter.html#o5\">y</a> = (<span class=\"keywordtype\">int</span>) ceil(i-&gt;<a class=\"code\" href=\"structrect__iter.html#o2\">ys</a>);\n01291     }\n01292 }\n01293 \n01294 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n01295 <span class=\"comment\">/** Create and initialize a rectangle iterator.</span>\n01296 <span class=\"comment\"></span>\n01297 <span class=\"comment\">    See details in \\ref rect_iter</span>\n01298 <span class=\"comment\"> */</span>\n<a name=\"l01299\"></a><a class=\"code\" href=\"lsd_8c.html#a43\">01299</a> <span class=\"keyword\">static</span> <a class=\"code\" href=\"structrect__iter.html\">rect_iter</a> * <a class=\"code\" href=\"lsd_8c.html#a43\">ri_ini</a>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structrect.html\">rect</a> * r)\n01300 {\n01301   <span class=\"keywordtype\">double</span> vx[4],vy[4];\n01302   <span class=\"keywordtype\">int</span> n,offset;\n01303   <a class=\"code\" href=\"structrect__iter.html\">rect_iter</a> * i;\n01304 \n01305   <span class=\"comment\">/* check parameters */</span>\n01306   <span class=\"keywordflow\">if</span>( r == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ri_ini: invalid rectangle.\"</span>);\n01307 \n01308   <span class=\"comment\">/* get memory */</span>\n01309   i = (<a class=\"code\" href=\"structrect__iter.html\">rect_iter</a> *) malloc(<span class=\"keyword\">sizeof</span>(<a class=\"code\" href=\"structrect__iter.html\">rect_iter</a>));\n01310   <span class=\"keywordflow\">if</span>( i == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ri_ini: Not enough memory.\"</span>);\n01311 \n01312   <span class=\"comment\">/* build list of rectangle corners ordered</span>\n01313 <span class=\"comment\">     in a circular way around the rectangle */</span>\n01314   vx[0] = r-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a> - r-&gt;<a class=\"code\" href=\"structrect.html#o9\">dy</a> * r-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> / 2.0;\n01315   vy[0] = r-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a> + r-&gt;<a class=\"code\" href=\"structrect.html#o8\">dx</a> * r-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> / 2.0;\n01316   vx[1] = r-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a> - r-&gt;<a class=\"code\" href=\"structrect.html#o9\">dy</a> * r-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> / 2.0;\n01317   vy[1] = r-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a> + r-&gt;<a class=\"code\" href=\"structrect.html#o8\">dx</a> * r-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> / 2.0;\n01318   vx[2] = r-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a> + r-&gt;<a class=\"code\" href=\"structrect.html#o9\">dy</a> * r-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> / 2.0;\n01319   vy[2] = r-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a> - r-&gt;<a class=\"code\" href=\"structrect.html#o8\">dx</a> * r-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> / 2.0;\n01320   vx[3] = r-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a> + r-&gt;<a class=\"code\" href=\"structrect.html#o9\">dy</a> * r-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> / 2.0;\n01321   vy[3] = r-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a> - r-&gt;<a class=\"code\" href=\"structrect.html#o8\">dx</a> * r-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> / 2.0;\n01322 \n01323   <span class=\"comment\">/* compute rotation of index of corners needed so that the first</span>\n01324 <span class=\"comment\">     point has the smaller x.</span>\n01325 <span class=\"comment\"></span>\n01326 <span class=\"comment\">     if one side is vertical, thus two corners have the same smaller x</span>\n01327 <span class=\"comment\">     value, the one with the largest y value is selected as the first.</span>\n01328 <span class=\"comment\">   */</span>\n01329   <span class=\"keywordflow\">if</span>( r-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a> &lt; r-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a> &amp;&amp; r-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a> &lt;= r-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a> ) offset = 0;\n01330   <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span>( r-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a> &gt;= r-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a> &amp;&amp; r-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a> &lt; r-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a> ) offset = 1;\n01331   <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span>( r-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a> &gt; r-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a> &amp;&amp; r-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a> &gt;= r-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a> ) offset = 2;\n01332   <span class=\"keywordflow\">else</span> offset = 3;\n01333 \n01334   <span class=\"comment\">/* apply rotation of index. */</span>\n01335   <span class=\"keywordflow\">for</span>(n=0; n&lt;4; n++)\n01336     {\n01337       i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[n] = vx[(offset+n)%4];\n01338       i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[n] = vy[(offset+n)%4];\n01339     }\n01340 \n01341   <span class=\"comment\">/* Set a initial condition.</span>\n01342 <span class=\"comment\"></span>\n01343 <span class=\"comment\">     The values are set to values that will cause 'ri_inc' (that will</span>\n01344 <span class=\"comment\">     be called immediately) to initialize correctly the first 'column'</span>\n01345 <span class=\"comment\">     and compute the limits 'ys' and 'ye'.</span>\n01346 <span class=\"comment\"></span>\n01347 <span class=\"comment\">     'y' is set to the integer value of vy[0], the starting corner.</span>\n01348 <span class=\"comment\"></span>\n01349 <span class=\"comment\">     'ys' and 'ye' are set to very small values, so 'ri_inc' will</span>\n01350 <span class=\"comment\">     notice that it needs to start a new 'column'.</span>\n01351 <span class=\"comment\"></span>\n01352 <span class=\"comment\">     The smaller integer coordinate inside of the rectangle is</span>\n01353 <span class=\"comment\">     'ceil(vx[0])'. The current 'x' value is set to that value minus</span>\n01354 <span class=\"comment\">     one, so 'ri_inc' (that will increase x by one) will advance to</span>\n01355 <span class=\"comment\">     the first 'column'.</span>\n01356 <span class=\"comment\">   */</span>\n01357   i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a> = (<span class=\"keywordtype\">int</span>) ceil(i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[0]) - 1;\n01358   i-&gt;<a class=\"code\" href=\"structrect__iter.html#o5\">y</a> = (<span class=\"keywordtype\">int</span>) ceil(i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[0]);\n01359   i-&gt;<a class=\"code\" href=\"structrect__iter.html#o2\">ys</a> = i-&gt;<a class=\"code\" href=\"structrect__iter.html#o3\">ye</a> = -DBL_MAX;\n01360 \n01361   <span class=\"comment\">/* advance to the first pixel */</span>\n01362   <a class=\"code\" href=\"lsd_8c.html#a42\">ri_inc</a>(i);\n01363 \n01364   <span class=\"keywordflow\">return</span> i;\n01365 }\n01366 \n01367 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n01368 <span class=\"comment\">/** Compute a rectangle's NFA value.</span>\n01369 <span class=\"comment\"> */</span>\n<a name=\"l01370\"></a><a class=\"code\" href=\"lsd_8c.html#a44\">01370</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"lsd_8c.html#a44\">rect_nfa</a>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structrect.html\">rect</a> * rec, <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> angles, <span class=\"keywordtype\">double</span> logNT)\n01371 {\n01372   <a class=\"code\" href=\"structrect__iter.html\">rect_iter</a> * i;\n01373   <span class=\"keywordtype\">int</span> pts = 0;\n01374   <span class=\"keywordtype\">int</span> alg = 0;\n01375 \n01376   <span class=\"comment\">/* check parameters */</span>\n01377   <span class=\"keywordflow\">if</span>( rec == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"rect_nfa: invalid rectangle.\"</span>);\n01378   <span class=\"keywordflow\">if</span>( angles == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"rect_nfa: invalid 'angles'.\"</span>);\n01379 \n01380   <span class=\"comment\">/* compute the total number of pixels and of aligned points in 'rec' */</span>\n01381   <span class=\"keywordflow\">for</span>(i=<a class=\"code\" href=\"lsd_8c.html#a43\">ri_ini</a>(rec); !<a class=\"code\" href=\"lsd_8c.html#a41\">ri_end</a>(i); <a class=\"code\" href=\"lsd_8c.html#a42\">ri_inc</a>(i)) <span class=\"comment\">/* rectangle iterator */</span>\n01382     <span class=\"keywordflow\">if</span>( i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a> &gt;= 0 &amp;&amp; i-&gt;<a class=\"code\" href=\"structrect__iter.html#o5\">y</a> &gt;= 0 &amp;&amp;\n01383         i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a> &lt; (<span class=\"keywordtype\">int</span>) angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> &amp;&amp; i-&gt;<a class=\"code\" href=\"structrect__iter.html#o5\">y</a> &lt; (<span class=\"keywordtype\">int</span>) angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> )\n01384       {\n01385         ++pts; <span class=\"comment\">/* total number of pixels counter */</span>\n01386         <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a31\">isaligned</a>(i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a>, i-&gt;<a class=\"code\" href=\"structrect__iter.html#o5\">y</a>, angles, rec-&gt;<a class=\"code\" href=\"structrect.html#o7\">theta</a>, rec-&gt;<a class=\"code\" href=\"structrect.html#o10\">prec</a>) )\n01387           ++alg; <span class=\"comment\">/* aligned points counter */</span>\n01388       }\n01389   <a class=\"code\" href=\"lsd_8c.html#a40\">ri_del</a>(i); <span class=\"comment\">/* delete iterator */</span>\n01390 \n01391   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a36\">nfa</a>(pts,alg,rec-&gt;<a class=\"code\" href=\"structrect.html#o11\">p</a>,logNT); <span class=\"comment\">/* compute NFA value */</span>\n01392 }\n01393 \n01394 \n01395 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n01396 <span class=\"comment\">/*---------------------------------- Regions ---------------------------------*/</span>\n01397 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n01398 \n01399 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n01400 <span class=\"comment\">/** Compute region's angle as the principal inertia axis of the region.</span>\n01401 <span class=\"comment\"></span>\n01402 <span class=\"comment\">    The following is the region inertia matrix A:</span>\n01403 <span class=\"comment\">    @f[</span>\n01404 <span class=\"comment\"></span>\n01405 <span class=\"comment\">        A = \\left(\\begin{array}{cc}</span>\n01406 <span class=\"comment\">                                    Ixx &amp; Ixy \\\\</span>\n01407 <span class=\"comment\">                                    Ixy &amp; Iyy \\\\</span>\n01408 <span class=\"comment\">             \\end{array}\\right)</span>\n01409 <span class=\"comment\"></span>\n01410 <span class=\"comment\">    @f]</span>\n01411 <span class=\"comment\">    where</span>\n01412 <span class=\"comment\"></span>\n01413 <span class=\"comment\">      Ixx =   sum_i G(i).(y_i - cx)^2</span>\n01414 <span class=\"comment\"></span>\n01415 <span class=\"comment\">      Iyy =   sum_i G(i).(x_i - cy)^2</span>\n01416 <span class=\"comment\"></span>\n01417 <span class=\"comment\">      Ixy = - sum_i G(i).(x_i - cx).(y_i - cy)</span>\n01418 <span class=\"comment\"></span>\n01419 <span class=\"comment\">    and</span>\n01420 <span class=\"comment\">    - G(i) is the gradient norm at pixel i, used as pixel's weight.</span>\n01421 <span class=\"comment\">    - x_i and y_i are the coordinates of pixel i.</span>\n01422 <span class=\"comment\">    - cx and cy are the coordinates of the center of th region.</span>\n01423 <span class=\"comment\"></span>\n01424 <span class=\"comment\">    lambda1 and lambda2 are the eigenvalues of matrix A,</span>\n01425 <span class=\"comment\">    with lambda1 &gt;= lambda2. They are found by solving the</span>\n01426 <span class=\"comment\">    characteristic polynomial:</span>\n01427 <span class=\"comment\"></span>\n01428 <span class=\"comment\">      det( lambda I - A) = 0</span>\n01429 <span class=\"comment\"></span>\n01430 <span class=\"comment\">    that gives:</span>\n01431 <span class=\"comment\"></span>\n01432 <span class=\"comment\">      lambda1 = ( Ixx + Iyy + sqrt( (Ixx-Iyy)^2 + 4.0*Ixy*Ixy) ) / 2</span>\n01433 <span class=\"comment\"></span>\n01434 <span class=\"comment\">      lambda2 = ( Ixx + Iyy - sqrt( (Ixx-Iyy)^2 + 4.0*Ixy*Ixy) ) / 2</span>\n01435 <span class=\"comment\"></span>\n01436 <span class=\"comment\">    To get the line segment direction we want to get the angle the</span>\n01437 <span class=\"comment\">    eigenvector assotiated to the smaller eigenvalue. We have to solve</span>\n01438 <span class=\"comment\">    a,b in:</span>\n01439 <span class=\"comment\"></span>\n01440 <span class=\"comment\">      a.Ixx + b.Ixy = a.lambda2</span>\n01441 <span class=\"comment\"></span>\n01442 <span class=\"comment\">      a.Ixy + b.Iyy = b.lambda2</span>\n01443 <span class=\"comment\"></span>\n01444 <span class=\"comment\">    We want the angle theta = atan(b/a). It can be computed with</span>\n01445 <span class=\"comment\">    any of the two equations:</span>\n01446 <span class=\"comment\"></span>\n01447 <span class=\"comment\">      theta = atan( (lambda2-Ixx) / Ixy )</span>\n01448 <span class=\"comment\"></span>\n01449 <span class=\"comment\">    or</span>\n01450 <span class=\"comment\"></span>\n01451 <span class=\"comment\">      theta = atan( Ixy / (lambda2-Iyy) )</span>\n01452 <span class=\"comment\"></span>\n01453 <span class=\"comment\">    When |Ixx| &gt; |Iyy| we use the first, otherwise the second (just to</span>\n01454 <span class=\"comment\">    get better numeric precision).</span>\n01455 <span class=\"comment\"> */</span>\n<a name=\"l01456\"></a><a class=\"code\" href=\"lsd_8c.html#a45\">01456</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"lsd_8c.html#a45\">get_theta</a>( <span class=\"keyword\">struct</span> <a class=\"code\" href=\"structpoint.html\">point</a> * reg, <span class=\"keywordtype\">int</span> reg_size, <span class=\"keywordtype\">double</span> x, <span class=\"keywordtype\">double</span> y,\n01457                          <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> modgrad, <span class=\"keywordtype\">double</span> reg_angle, <span class=\"keywordtype\">double</span> prec )\n01458 {\n01459   <span class=\"keywordtype\">double</span> lambda,theta,weight;\n01460   <span class=\"keywordtype\">double</span> Ixx = 0.0;\n01461   <span class=\"keywordtype\">double</span> Iyy = 0.0;\n01462   <span class=\"keywordtype\">double</span> Ixy = 0.0;\n01463   <span class=\"keywordtype\">int</span> i;\n01464 \n01465   <span class=\"comment\">/* check parameters */</span>\n01466   <span class=\"keywordflow\">if</span>( reg == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"get_theta: invalid region.\"</span>);\n01467   <span class=\"keywordflow\">if</span>( reg_size &lt;= 1 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"get_theta: region size &lt;= 1.\"</span>);\n01468   <span class=\"keywordflow\">if</span>( modgrad == NULL || modgrad-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL )\n01469     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"get_theta: invalid 'modgrad'.\"</span>);\n01470   <span class=\"keywordflow\">if</span>( prec &lt; 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"get_theta: 'prec' must be positive.\"</span>);\n01471 \n01472   <span class=\"comment\">/* compute inertia matrix */</span>\n01473   <span class=\"keywordflow\">for</span>(i=0; i&lt;reg_size; i++)\n01474     {\n01475       weight = modgrad-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> + reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> * modgrad-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ];\n01476       Ixx += ( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> - y ) * ( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> - y ) * weight;\n01477       Iyy += ( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> - x ) * ( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> - x ) * weight;\n01478       Ixy -= ( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> - x ) * ( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> - y ) * weight;\n01479     }\n01480   <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a13\">double_equal</a>(Ixx,0.0) &amp;&amp; <a class=\"code\" href=\"lsd_8c.html#a13\">double_equal</a>(Iyy,0.0) &amp;&amp; <a class=\"code\" href=\"lsd_8c.html#a13\">double_equal</a>(Ixy,0.0) )\n01481     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"get_theta: null inertia matrix.\"</span>);\n01482 \n01483   <span class=\"comment\">/* compute smallest eigenvalue */</span>\n01484   lambda = 0.5 * ( Ixx + Iyy - sqrt( (Ixx-Iyy)*(Ixx-Iyy) + 4.0*Ixy*Ixy ) );\n01485 \n01486   <span class=\"comment\">/* compute angle */</span>\n01487   theta = fabs(Ixx)&gt;fabs(Iyy) ? atan2(lambda-Ixx,Ixy) : atan2(Ixy,lambda-Iyy);\n01488 \n01489   <span class=\"comment\">/* The previous procedure don't cares about orientation,</span>\n01490 <span class=\"comment\">     so it could be wrong by 180 degrees. Here is corrected if necessary. */</span>\n01491   <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a32\">angle_diff</a>(theta,reg_angle) &gt; prec ) theta += <a class=\"code\" href=\"lsd_8c.html#a1\">M_PI</a>;\n01492 \n01493   <span class=\"keywordflow\">return</span> theta;\n01494 }\n01495 \n01496 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n01497 <span class=\"comment\">/** Computes a rectangle that covers a region of points.</span>\n01498 <span class=\"comment\"> */</span>\n<a name=\"l01499\"></a><a class=\"code\" href=\"lsd_8c.html#a46\">01499</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"lsd_8c.html#a46\">region2rect</a>( <span class=\"keyword\">struct</span> <a class=\"code\" href=\"structpoint.html\">point</a> * reg, <span class=\"keywordtype\">int</span> reg_size,\n01500                          <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> modgrad, <span class=\"keywordtype\">double</span> reg_angle,\n01501                          <span class=\"keywordtype\">double</span> prec, <span class=\"keywordtype\">double</span> p, <span class=\"keyword\">struct</span> <a class=\"code\" href=\"structrect.html\">rect</a> * rec )\n01502 {\n01503   <span class=\"keywordtype\">double</span> x,y,dx,dy,l,w,theta,weight,sum,l_min,l_max,w_min,w_max;\n01504   <span class=\"keywordtype\">int</span> i;\n01505 \n01506   <span class=\"comment\">/* check parameters */</span>\n01507   <span class=\"keywordflow\">if</span>( reg == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region2rect: invalid region.\"</span>);\n01508   <span class=\"keywordflow\">if</span>( reg_size &lt;= 1 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region2rect: region size &lt;= 1.\"</span>);\n01509   <span class=\"keywordflow\">if</span>( modgrad == NULL || modgrad-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL )\n01510     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region2rect: invalid image 'modgrad'.\"</span>);\n01511   <span class=\"keywordflow\">if</span>( rec == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region2rect: invalid 'rec'.\"</span>);\n01512 \n01513   <span class=\"comment\">/* center of the region:</span>\n01514 <span class=\"comment\"></span>\n01515 <span class=\"comment\">     It is computed as the weighted sum of the coordinates</span>\n01516 <span class=\"comment\">     of all the pixels in the region. The norm of the gradient</span>\n01517 <span class=\"comment\">     is used as the weight of a pixel. The sum is as follows:</span>\n01518 <span class=\"comment\">       cx = \\sum_i G(i).x_i</span>\n01519 <span class=\"comment\">       cy = \\sum_i G(i).y_i</span>\n01520 <span class=\"comment\">     where G(i) is the norm of the gradient of pixel i</span>\n01521 <span class=\"comment\">     and x_i,y_i are its coordinates.</span>\n01522 <span class=\"comment\">   */</span>\n01523   x = y = sum = 0.0;\n01524   <span class=\"keywordflow\">for</span>(i=0; i&lt;reg_size; i++)\n01525     {\n01526       weight = modgrad-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> + reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> * modgrad-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ];\n01527       x += (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> * weight;\n01528       y += (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> * weight;\n01529       sum += weight;\n01530     }\n01531   <span class=\"keywordflow\">if</span>( sum &lt;= 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region2rect: weights sum equal to zero.\"</span>);\n01532   x /= sum;\n01533   y /= sum;\n01534 \n01535   <span class=\"comment\">/* theta */</span>\n01536   theta = <a class=\"code\" href=\"lsd_8c.html#a45\">get_theta</a>(reg,reg_size,x,y,modgrad,reg_angle,prec);\n01537 \n01538   <span class=\"comment\">/* length and width:</span>\n01539 <span class=\"comment\"></span>\n01540 <span class=\"comment\">     'l' and 'w' are computed as the distance from the center of the</span>\n01541 <span class=\"comment\">     region to pixel i, projected along the rectangle axis (dx,dy) and</span>\n01542 <span class=\"comment\">     to the orthogonal axis (-dy,dx), respectively.</span>\n01543 <span class=\"comment\"></span>\n01544 <span class=\"comment\">     The length of the rectangle goes from l_min to l_max, where l_min</span>\n01545 <span class=\"comment\">     and l_max are the minimum and maximum values of l in the region.</span>\n01546 <span class=\"comment\">     Analogously, the width is selected from w_min to w_max, where</span>\n01547 <span class=\"comment\">     w_min and w_max are the minimum and maximum of w for the pixels</span>\n01548 <span class=\"comment\">     in the region.</span>\n01549 <span class=\"comment\">   */</span>\n01550   dx = cos(theta);\n01551   dy = sin(theta);\n01552   l_min = l_max = w_min = w_max = 0.0;\n01553   <span class=\"keywordflow\">for</span>(i=0; i&lt;reg_size; i++)\n01554     {\n01555       l =  ( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> - x) * dx + ( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> - y) * dy;\n01556       w = -( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> - x) * dy + ( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> - y) * dx;\n01557 \n01558       <span class=\"keywordflow\">if</span>( l &gt; l_max ) l_max = l;\n01559       <span class=\"keywordflow\">if</span>( l &lt; l_min ) l_min = l;\n01560       <span class=\"keywordflow\">if</span>( w &gt; w_max ) w_max = w;\n01561       <span class=\"keywordflow\">if</span>( w &lt; w_min ) w_min = w;\n01562     }\n01563 \n01564   <span class=\"comment\">/* store values */</span>\n01565   rec-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a> = x + l_min * dx;\n01566   rec-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a> = y + l_min * dy;\n01567   rec-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a> = x + l_max * dx;\n01568   rec-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a> = y + l_max * dy;\n01569   rec-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> = w_max - w_min;\n01570   rec-&gt;<a class=\"code\" href=\"structrect.html#o5\">x</a> = x;\n01571   rec-&gt;<a class=\"code\" href=\"structrect.html#o6\">y</a> = y;\n01572   rec-&gt;<a class=\"code\" href=\"structrect.html#o7\">theta</a> = theta;\n01573   rec-&gt;<a class=\"code\" href=\"structrect.html#o8\">dx</a> = dx;\n01574   rec-&gt;<a class=\"code\" href=\"structrect.html#o9\">dy</a> = dy;\n01575   rec-&gt;<a class=\"code\" href=\"structrect.html#o10\">prec</a> = prec;\n01576   rec-&gt;<a class=\"code\" href=\"structrect.html#o11\">p</a> = p;\n01577 \n01578   <span class=\"comment\">/* we impose a minimal width of one pixel</span>\n01579 <span class=\"comment\"></span>\n01580 <span class=\"comment\">     A sharp horizontal or vertical step would produce a perfectly</span>\n01581 <span class=\"comment\">     horizontal or vertical region. The width computed would be</span>\n01582 <span class=\"comment\">     zero. But that corresponds to a one pixels width transition in</span>\n01583 <span class=\"comment\">     the image.</span>\n01584 <span class=\"comment\">   */</span>\n01585   <span class=\"keywordflow\">if</span>( rec-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> &lt; 1.0 ) rec-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> = 1.0;\n01586 }\n01587 \n01588 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n01589 <span class=\"comment\">/** Build a region of pixels that share the same angle, up to a</span>\n01590 <span class=\"comment\">    tolerance 'prec', starting at point (x,y).</span>\n01591 <span class=\"comment\"> */</span>\n<a name=\"l01592\"></a><a class=\"code\" href=\"lsd_8c.html#a47\">01592</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"lsd_8c.html#a47\">region_grow</a>( <span class=\"keywordtype\">int</span> x, <span class=\"keywordtype\">int</span> y, <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> angles, <span class=\"keyword\">struct</span> <a class=\"code\" href=\"structpoint.html\">point</a> * reg,\n01593                          <span class=\"keywordtype\">int</span> * reg_size, <span class=\"keywordtype\">double</span> * reg_angle, <a class=\"code\" href=\"structimage__char__s.html\">image_char</a> used,\n01594                          <span class=\"keywordtype\">double</span> prec )\n01595 {\n01596   <span class=\"keywordtype\">double</span> sumdx,sumdy;\n01597   <span class=\"keywordtype\">int</span> xx,yy,i;\n01598 \n01599   <span class=\"comment\">/* check parameters */</span>\n01600   <span class=\"keywordflow\">if</span>( x &lt; 0 || y &lt; 0 || x &gt;= (<span class=\"keywordtype\">int</span>) angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> || y &gt;= (<span class=\"keywordtype\">int</span>) angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> )\n01601     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region_grow: (x,y) out of the image.\"</span>);\n01602   <span class=\"keywordflow\">if</span>( angles == NULL || angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL )\n01603     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region_grow: invalid image 'angles'.\"</span>);\n01604   <span class=\"keywordflow\">if</span>( reg == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region_grow: invalid 'reg'.\"</span>);\n01605   <span class=\"keywordflow\">if</span>( reg_size == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region_grow: invalid pointer 'reg_size'.\"</span>);\n01606   <span class=\"keywordflow\">if</span>( reg_angle == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region_grow: invalid pointer 'reg_angle'.\"</span>);\n01607   <span class=\"keywordflow\">if</span>( used == NULL || used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> == NULL )\n01608     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region_grow: invalid image 'used'.\"</span>);\n01609 \n01610   <span class=\"comment\">/* first point of the region */</span>\n01611   *reg_size = 1;\n01612   reg[0].<a class=\"code\" href=\"structpoint.html#o0\">x</a> = x;\n01613   reg[0].<a class=\"code\" href=\"structpoint.html#o1\">y</a> = y;\n01614   *reg_angle = angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[x+y*angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>];  <span class=\"comment\">/* region's angle */</span>\n01615   sumdx = cos(*reg_angle);\n01616   sumdy = sin(*reg_angle);\n01617   used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a>[x+y*used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a>] = <a class=\"code\" href=\"lsd_8c.html#a8\">USED</a>;\n01618 \n01619   <span class=\"comment\">/* try neighbors as new region points */</span>\n01620   <span class=\"keywordflow\">for</span>(i=0; i&lt;*reg_size; i++)\n01621     <span class=\"keywordflow\">for</span>(xx=reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a>-1; xx&lt;=reg[i].x+1; xx++)\n01622       <span class=\"keywordflow\">for</span>(yy=reg[i].y-1; yy&lt;=reg[i].y+1; yy++)\n01623         <span class=\"keywordflow\">if</span>( xx&gt;=0 &amp;&amp; yy&gt;=0 &amp;&amp; xx&lt;(<span class=\"keywordtype\">int</span>)used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a> &amp;&amp; yy&lt;(<span class=\"keywordtype\">int</span>)used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o2\">ysize</a> &amp;&amp;\n01624             used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a>[xx+yy*used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a>] != <a class=\"code\" href=\"lsd_8c.html#a8\">USED</a> &amp;&amp;\n01625             <a class=\"code\" href=\"lsd_8c.html#a31\">isaligned</a>(xx,yy,angles,*reg_angle,prec) )\n01626           {\n01627             <span class=\"comment\">/* add point */</span>\n01628             used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a>[xx+yy*used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a>] = <a class=\"code\" href=\"lsd_8c.html#a8\">USED</a>;\n01629             reg[*reg_size].x = xx;\n01630             reg[*reg_size].y = yy;\n01631             ++(*reg_size);\n01632 \n01633             <span class=\"comment\">/* update region's angle */</span>\n01634             sumdx += cos( angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[xx+yy*angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>] );\n01635             sumdy += sin( angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[xx+yy*angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>] );\n01636             *reg_angle = atan2(sumdy,sumdx);\n01637           }\n01638 }\n01639 \n01640 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n01641 <span class=\"comment\">/** Try some rectangles variations to improve NFA value. Only if the</span>\n01642 <span class=\"comment\">    rectangle is not meaningful (i.e., log_nfa &lt;= eps).</span>\n01643 <span class=\"comment\"> */</span>\n<a name=\"l01644\"></a><a class=\"code\" href=\"lsd_8c.html#a48\">01644</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"lsd_8c.html#a48\">rect_improve</a>( <span class=\"keyword\">struct</span> <a class=\"code\" href=\"structrect.html\">rect</a> * rec, <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> angles,\n01645                             <span class=\"keywordtype\">double</span> logNT, <span class=\"keywordtype\">double</span> eps )\n01646 {\n01647   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structrect.html\">rect</a> r;\n01648   <span class=\"keywordtype\">double</span> log_nfa,log_nfa_new;\n01649   <span class=\"keywordtype\">double</span> delta = 0.5;\n01650   <span class=\"keywordtype\">double</span> delta_2 = delta / 2.0;\n01651   <span class=\"keywordtype\">int</span> n;\n01652 \n01653   log_nfa = <a class=\"code\" href=\"lsd_8c.html#a44\">rect_nfa</a>(rec,angles,logNT);\n01654 \n01655   <span class=\"keywordflow\">if</span>( log_nfa &gt; eps ) <span class=\"keywordflow\">return</span> log_nfa;\n01656 \n01657   <span class=\"comment\">/* try finer precisions */</span>\n01658   <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(rec,&amp;r);\n01659   <span class=\"keywordflow\">for</span>(n=0; n&lt;5; n++)\n01660     {\n01661       r.<a class=\"code\" href=\"structrect.html#o11\">p</a> /= 2.0;\n01662       r.<a class=\"code\" href=\"structrect.html#o10\">prec</a> = r.<a class=\"code\" href=\"structrect.html#o11\">p</a> * <a class=\"code\" href=\"lsd_8c.html#a1\">M_PI</a>;\n01663       log_nfa_new = <a class=\"code\" href=\"lsd_8c.html#a44\">rect_nfa</a>(&amp;r,angles,logNT);\n01664       <span class=\"keywordflow\">if</span>( log_nfa_new &gt; log_nfa )\n01665         {\n01666           log_nfa = log_nfa_new;\n01667           <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(&amp;r,rec);\n01668         }\n01669     }\n01670 \n01671   <span class=\"keywordflow\">if</span>( log_nfa &gt; eps ) <span class=\"keywordflow\">return</span> log_nfa;\n01672 \n01673   <span class=\"comment\">/* try to reduce width */</span>\n01674   <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(rec,&amp;r);\n01675   <span class=\"keywordflow\">for</span>(n=0; n&lt;5; n++)\n01676     {\n01677       <span class=\"keywordflow\">if</span>( (r.<a class=\"code\" href=\"structrect.html#o4\">width</a> - delta) &gt;= 0.5 )\n01678         {\n01679           r.<a class=\"code\" href=\"structrect.html#o4\">width</a> -= delta;\n01680           log_nfa_new = <a class=\"code\" href=\"lsd_8c.html#a44\">rect_nfa</a>(&amp;r,angles,logNT);\n01681           <span class=\"keywordflow\">if</span>( log_nfa_new &gt; log_nfa )\n01682             {\n01683               <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(&amp;r,rec);\n01684               log_nfa = log_nfa_new;\n01685             }\n01686         }\n01687     }\n01688 \n01689   <span class=\"keywordflow\">if</span>( log_nfa &gt; eps ) <span class=\"keywordflow\">return</span> log_nfa;\n01690 \n01691   <span class=\"comment\">/* try to reduce one side of the rectangle */</span>\n01692   <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(rec,&amp;r);\n01693   <span class=\"keywordflow\">for</span>(n=0; n&lt;5; n++)\n01694     {\n01695       <span class=\"keywordflow\">if</span>( (r.<a class=\"code\" href=\"structrect.html#o4\">width</a> - delta) &gt;= 0.5 )\n01696         {\n01697           r.<a class=\"code\" href=\"structrect.html#o0\">x1</a> += -r.<a class=\"code\" href=\"structrect.html#o9\">dy</a> * delta_2;\n01698           r.<a class=\"code\" href=\"structrect.html#o1\">y1</a> +=  r.<a class=\"code\" href=\"structrect.html#o8\">dx</a> * delta_2;\n01699           r.<a class=\"code\" href=\"structrect.html#o2\">x2</a> += -r.<a class=\"code\" href=\"structrect.html#o9\">dy</a> * delta_2;\n01700           r.<a class=\"code\" href=\"structrect.html#o3\">y2</a> +=  r.<a class=\"code\" href=\"structrect.html#o8\">dx</a> * delta_2;\n01701           r.<a class=\"code\" href=\"structrect.html#o4\">width</a> -= delta;\n01702           log_nfa_new = <a class=\"code\" href=\"lsd_8c.html#a44\">rect_nfa</a>(&amp;r,angles,logNT);\n01703           <span class=\"keywordflow\">if</span>( log_nfa_new &gt; log_nfa )\n01704             {\n01705               <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(&amp;r,rec);\n01706               log_nfa = log_nfa_new;\n01707             }\n01708         }\n01709     }\n01710 \n01711   <span class=\"keywordflow\">if</span>( log_nfa &gt; eps ) <span class=\"keywordflow\">return</span> log_nfa;\n01712 \n01713   <span class=\"comment\">/* try to reduce the other side of the rectangle */</span>\n01714   <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(rec,&amp;r);\n01715   <span class=\"keywordflow\">for</span>(n=0; n&lt;5; n++)\n01716     {\n01717       <span class=\"keywordflow\">if</span>( (r.<a class=\"code\" href=\"structrect.html#o4\">width</a> - delta) &gt;= 0.5 )\n01718         {\n01719           r.<a class=\"code\" href=\"structrect.html#o0\">x1</a> -= -r.<a class=\"code\" href=\"structrect.html#o9\">dy</a> * delta_2;\n01720           r.<a class=\"code\" href=\"structrect.html#o1\">y1</a> -=  r.<a class=\"code\" href=\"structrect.html#o8\">dx</a> * delta_2;\n01721           r.<a class=\"code\" href=\"structrect.html#o2\">x2</a> -= -r.<a class=\"code\" href=\"structrect.html#o9\">dy</a> * delta_2;\n01722           r.<a class=\"code\" href=\"structrect.html#o3\">y2</a> -=  r.<a class=\"code\" href=\"structrect.html#o8\">dx</a> * delta_2;\n01723           r.<a class=\"code\" href=\"structrect.html#o4\">width</a> -= delta;\n01724           log_nfa_new = <a class=\"code\" href=\"lsd_8c.html#a44\">rect_nfa</a>(&amp;r,angles,logNT);\n01725           <span class=\"keywordflow\">if</span>( log_nfa_new &gt; log_nfa )\n01726             {\n01727               <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(&amp;r,rec);\n01728               log_nfa = log_nfa_new;\n01729             }\n01730         }\n01731     }\n01732 \n01733   <span class=\"keywordflow\">if</span>( log_nfa &gt; eps ) <span class=\"keywordflow\">return</span> log_nfa;\n01734 \n01735   <span class=\"comment\">/* try even finer precisions */</span>\n01736   <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(rec,&amp;r);\n01737   <span class=\"keywordflow\">for</span>(n=0; n&lt;5; n++)\n01738     {\n01739       r.<a class=\"code\" href=\"structrect.html#o11\">p</a> /= 2.0;\n01740       r.<a class=\"code\" href=\"structrect.html#o10\">prec</a> = r.<a class=\"code\" href=\"structrect.html#o11\">p</a> * <a class=\"code\" href=\"lsd_8c.html#a1\">M_PI</a>;\n01741       log_nfa_new = <a class=\"code\" href=\"lsd_8c.html#a44\">rect_nfa</a>(&amp;r,angles,logNT);\n01742       <span class=\"keywordflow\">if</span>( log_nfa_new &gt; log_nfa )\n01743         {\n01744           log_nfa = log_nfa_new;\n01745           <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(&amp;r,rec);\n01746         }\n01747     }\n01748 \n01749   <span class=\"keywordflow\">return</span> log_nfa;\n01750 }\n01751 \n01752 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n01753 <span class=\"comment\">/** Reduce the region size, by elimination the points far from the</span>\n01754 <span class=\"comment\">    starting point, until that leads to rectangle with the right</span>\n01755 <span class=\"comment\">    density of region points or to discard the region if too small.</span>\n01756 <span class=\"comment\"> */</span>\n<a name=\"l01757\"></a><a class=\"code\" href=\"lsd_8c.html#a49\">01757</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"lsd_8c.html#a49\">reduce_region_radius</a>( <span class=\"keyword\">struct</span> <a class=\"code\" href=\"structpoint.html\">point</a> * reg, <span class=\"keywordtype\">int</span> * reg_size,\n01758                                  <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> modgrad, <span class=\"keywordtype\">double</span> reg_angle,\n01759                                  <span class=\"keywordtype\">double</span> prec, <span class=\"keywordtype\">double</span> p, <span class=\"keyword\">struct</span> <a class=\"code\" href=\"structrect.html\">rect</a> * rec,\n01760                                  <a class=\"code\" href=\"structimage__char__s.html\">image_char</a> used, <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> angles,\n01761                                  <span class=\"keywordtype\">double</span> density_th )\n01762 {\n01763   <span class=\"keywordtype\">double</span> density,rad1,rad2,rad,xc,yc;\n01764   <span class=\"keywordtype\">int</span> i;\n01765 \n01766   <span class=\"comment\">/* check parameters */</span>\n01767   <span class=\"keywordflow\">if</span>( reg == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"reduce_region_radius: invalid pointer 'reg'.\"</span>);\n01768   <span class=\"keywordflow\">if</span>( reg_size == NULL )\n01769     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"reduce_region_radius: invalid pointer 'reg_size'.\"</span>);\n01770   <span class=\"keywordflow\">if</span>( prec &lt; 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"reduce_region_radius: 'prec' must be positive.\"</span>);\n01771   <span class=\"keywordflow\">if</span>( rec == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"reduce_region_radius: invalid pointer 'rec'.\"</span>);\n01772   <span class=\"keywordflow\">if</span>( used == NULL || used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> == NULL )\n01773     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"reduce_region_radius: invalid image 'used'.\"</span>);\n01774   <span class=\"keywordflow\">if</span>( angles == NULL || angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL )\n01775     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"reduce_region_radius: invalid image 'angles'.\"</span>);\n01776 \n01777   <span class=\"comment\">/* compute region points density */</span>\n01778   density = (<span class=\"keywordtype\">double</span>) *reg_size /\n01779                          ( <a class=\"code\" href=\"lsd_8c.html#a14\">dist</a>(rec-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a>) * rec-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> );\n01780 \n01781   <span class=\"comment\">/* if the density criterion is satisfied there is nothing to do */</span>\n01782   <span class=\"keywordflow\">if</span>( density &gt;= density_th ) <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a3\">TRUE</a>;\n01783 \n01784   <span class=\"comment\">/* compute region's radius */</span>\n01785   xc = (<span class=\"keywordtype\">double</span>) reg[0].<a class=\"code\" href=\"structpoint.html#o0\">x</a>;\n01786   yc = (<span class=\"keywordtype\">double</span>) reg[0].<a class=\"code\" href=\"structpoint.html#o1\">y</a>;\n01787   rad1 = <a class=\"code\" href=\"lsd_8c.html#a14\">dist</a>( xc, yc, rec-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a>, rec-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a> );\n01788   rad2 = <a class=\"code\" href=\"lsd_8c.html#a14\">dist</a>( xc, yc, rec-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a>, rec-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a> );\n01789   rad = rad1 &gt; rad2 ? rad1 : rad2;\n01790 \n01791   <span class=\"comment\">/* while the density criterion is not satisfied, remove farther pixels */</span>\n01792   <span class=\"keywordflow\">while</span>( density &lt; density_th )\n01793     {\n01794       rad *= 0.75; <span class=\"comment\">/* reduce region's radius to 75% of its value */</span>\n01795 \n01796       <span class=\"comment\">/* remove points from the region and update 'used' map */</span>\n01797       <span class=\"keywordflow\">for</span>(i=0; i&lt;*reg_size; i++)\n01798         <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a14\">dist</a>( xc, yc, (<span class=\"keywordtype\">double</span>) reg[i].x, (<span class=\"keywordtype\">double</span>) reg[i].y ) &gt; rad )\n01799           {\n01800             <span class=\"comment\">/* point not kept, mark it as NOTUSED */</span>\n01801             used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a>[ reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> + reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> * used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a> ] = <a class=\"code\" href=\"lsd_8c.html#a7\">NOTUSED</a>;\n01802             <span class=\"comment\">/* remove point from the region */</span>\n01803             reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> = reg[*reg_size-1].<a class=\"code\" href=\"structpoint.html#o0\">x</a>; <span class=\"comment\">/* if i==*reg_size-1 copy itself */</span>\n01804             reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> = reg[*reg_size-1].<a class=\"code\" href=\"structpoint.html#o1\">y</a>;\n01805             --(*reg_size);\n01806             --i; <span class=\"comment\">/* to avoid skipping one point */</span>\n01807           }\n01808 \n01809       <span class=\"comment\">/* reject if the region is too small.</span>\n01810 <span class=\"comment\">         2 is the minimal region size for 'region2rect' to work. */</span>\n01811       <span class=\"keywordflow\">if</span>( *reg_size &lt; 2 ) <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a2\">FALSE</a>;\n01812 \n01813       <span class=\"comment\">/* re-compute rectangle */</span>\n01814       <a class=\"code\" href=\"lsd_8c.html#a46\">region2rect</a>(reg,*reg_size,modgrad,reg_angle,prec,p,rec);\n01815 \n01816       <span class=\"comment\">/* re-compute region points density */</span>\n01817       density = (<span class=\"keywordtype\">double</span>) *reg_size /\n01818                          ( <a class=\"code\" href=\"lsd_8c.html#a14\">dist</a>(rec-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a>) * rec-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> );\n01819     }\n01820 \n01821   <span class=\"comment\">/* if this point is reached, the density criterion is satisfied */</span>\n01822   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a3\">TRUE</a>;\n01823 }\n01824 \n01825 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n01826 <span class=\"comment\">/** Refine a rectangle.</span>\n01827 <span class=\"comment\"></span>\n01828 <span class=\"comment\">    For that, an estimation of the angle tolerance is performed by the</span>\n01829 <span class=\"comment\">    standard deviation of the angle at points near the region's</span>\n01830 <span class=\"comment\">    starting point. Then, a new region is grown starting from the same</span>\n01831 <span class=\"comment\">    point, but using the estimated angle tolerance. If this fails to</span>\n01832 <span class=\"comment\">    produce a rectangle with the right density of region points,</span>\n01833 <span class=\"comment\">    'reduce_region_radius' is called to try to satisfy this condition.</span>\n01834 <span class=\"comment\"> */</span>\n<a name=\"l01835\"></a><a class=\"code\" href=\"lsd_8c.html#a50\">01835</a> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"lsd_8c.html#a50\">refine</a>( <span class=\"keyword\">struct</span> <a class=\"code\" href=\"structpoint.html\">point</a> * reg, <span class=\"keywordtype\">int</span> * reg_size, <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> modgrad,\n01836                    <span class=\"keywordtype\">double</span> reg_angle, <span class=\"keywordtype\">double</span> prec, <span class=\"keywordtype\">double</span> p, <span class=\"keyword\">struct</span> <a class=\"code\" href=\"structrect.html\">rect</a> * rec,\n01837                    <a class=\"code\" href=\"structimage__char__s.html\">image_char</a> used, <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> angles, <span class=\"keywordtype\">double</span> density_th )\n01838 {\n01839   <span class=\"keywordtype\">double</span> angle,ang_d,mean_angle,tau,density,xc,yc,ang_c,sum,s_sum;\n01840   <span class=\"keywordtype\">int</span> i,n;\n01841 \n01842   <span class=\"comment\">/* check parameters */</span>\n01843   <span class=\"keywordflow\">if</span>( reg == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"refine: invalid pointer 'reg'.\"</span>);\n01844   <span class=\"keywordflow\">if</span>( reg_size == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"refine: invalid pointer 'reg_size'.\"</span>);\n01845   <span class=\"keywordflow\">if</span>( prec &lt; 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"refine: 'prec' must be positive.\"</span>);\n01846   <span class=\"keywordflow\">if</span>( rec == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"refine: invalid pointer 'rec'.\"</span>);\n01847   <span class=\"keywordflow\">if</span>( used == NULL || used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> == NULL )\n01848     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"refine: invalid image 'used'.\"</span>);\n01849   <span class=\"keywordflow\">if</span>( angles == NULL || angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL )\n01850     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"refine: invalid image 'angles'.\"</span>);\n01851 \n01852   <span class=\"comment\">/* compute region points density */</span>\n01853   density = (<span class=\"keywordtype\">double</span>) *reg_size /\n01854                          ( <a class=\"code\" href=\"lsd_8c.html#a14\">dist</a>(rec-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a>) * rec-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> );\n01855 \n01856   <span class=\"comment\">/* if the density criterion is satisfied there is nothing to do */</span>\n01857   <span class=\"keywordflow\">if</span>( density &gt;= density_th ) <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a3\">TRUE</a>;\n01858 \n01859   <span class=\"comment\">/*------ First try: reduce angle tolerance ------*/</span>\n01860 \n01861   <span class=\"comment\">/* compute the new mean angle and tolerance */</span>\n01862   xc = (<span class=\"keywordtype\">double</span>) reg[0].<a class=\"code\" href=\"structpoint.html#o0\">x</a>;\n01863   yc = (<span class=\"keywordtype\">double</span>) reg[0].<a class=\"code\" href=\"structpoint.html#o1\">y</a>;\n01864   ang_c = angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ reg[0].<a class=\"code\" href=\"structpoint.html#o0\">x</a> + reg[0].<a class=\"code\" href=\"structpoint.html#o1\">y</a> * angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ];\n01865   sum = s_sum = 0.0;\n01866   n = 0;\n01867   <span class=\"keywordflow\">for</span>(i=0; i&lt;*reg_size; i++)\n01868     {\n01869       used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a>[ reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> + reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> * used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a> ] = <a class=\"code\" href=\"lsd_8c.html#a7\">NOTUSED</a>;\n01870       <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a14\">dist</a>( xc, yc, (<span class=\"keywordtype\">double</span>) reg[i].x, (<span class=\"keywordtype\">double</span>) reg[i].y ) &lt; rec-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> )\n01871         {\n01872           angle = angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> + reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> * angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ];\n01873           ang_d = <a class=\"code\" href=\"lsd_8c.html#a33\">angle_diff_signed</a>(angle,ang_c);\n01874           sum += ang_d;\n01875           s_sum += ang_d * ang_d;\n01876           ++n;\n01877         }\n01878     }\n01879   mean_angle = sum / (<span class=\"keywordtype\">double</span>) n;\n01880   tau = 2.0 * sqrt( (s_sum - 2.0 * mean_angle * sum) / (<span class=\"keywordtype\">double</span>) n\n01881                          + mean_angle*mean_angle ); <span class=\"comment\">/* 2 * standard deviation */</span>\n01882 \n01883   <span class=\"comment\">/* find a new region from the same starting point and new angle tolerance */</span>\n01884   <a class=\"code\" href=\"lsd_8c.html#a47\">region_grow</a>(reg[0].x,reg[0].y,angles,reg,reg_size,&amp;reg_angle,used,tau);\n01885 \n01886   <span class=\"comment\">/* if the region is too small, reject */</span>\n01887   <span class=\"keywordflow\">if</span>( *reg_size &lt; 2 ) <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a2\">FALSE</a>;\n01888 \n01889   <span class=\"comment\">/* re-compute rectangle */</span>\n01890   <a class=\"code\" href=\"lsd_8c.html#a46\">region2rect</a>(reg,*reg_size,modgrad,reg_angle,prec,p,rec);\n01891 \n01892   <span class=\"comment\">/* re-compute region points density */</span>\n01893   density = (<span class=\"keywordtype\">double</span>) *reg_size /\n01894                       ( <a class=\"code\" href=\"lsd_8c.html#a14\">dist</a>(rec-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a>) * rec-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> );\n01895 \n01896   <span class=\"comment\">/*------ Second try: reduce region radius ------*/</span>\n01897   <span class=\"keywordflow\">if</span>( density &lt; density_th )\n01898     <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a49\">reduce_region_radius</a>( reg, reg_size, modgrad, reg_angle, prec, p,\n01899                                  rec, used, angles, density_th );\n01900 \n01901   <span class=\"comment\">/* if this point is reached, the density criterion is satisfied */</span>\n01902   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a3\">TRUE</a>;\n01903 }\n01904 \n01905 \n01906 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n01907 <span class=\"comment\">/*-------------------------- Line Segment Detector ---------------------------*/</span>\n01908 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n01909 \n01910 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n01911 <span class=\"comment\">/** LSD full interface.</span>\n01912 <span class=\"comment\"> */</span>\n<a name=\"l01913\"></a><a class=\"code\" href=\"lsd_8c.html#a51\">01913</a> <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> <a class=\"code\" href=\"lsd_8c.html#a51\">LineSegmentDetection</a>( <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> image, <span class=\"keywordtype\">double</span> scale,\n01914                                   <span class=\"keywordtype\">double</span> sigma_scale, <span class=\"keywordtype\">double</span> quant,\n01915                                   <span class=\"keywordtype\">double</span> ang_th, <span class=\"keywordtype\">double</span> eps, <span class=\"keywordtype\">double</span> density_th,\n01916                                   <span class=\"keywordtype\">int</span> n_bins, <span class=\"keywordtype\">double</span> max_grad,\n01917                                   <a class=\"code\" href=\"structimage__int__s.html\">image_int</a> * region )\n01918 {\n01919   <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> out = <a class=\"code\" href=\"lsd_8c.html#a16\">new_ntuple_list</a>(5);\n01920   <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> scaled_image,angles,modgrad;\n01921   <a class=\"code\" href=\"structimage__char__s.html\">image_char</a> used;\n01922   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> * list_p;\n01923   <span class=\"keywordtype\">void</span> * mem_p;\n01924   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structrect.html\">rect</a> rec;\n01925   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structpoint.html\">point</a> * reg;\n01926   <span class=\"keywordtype\">int</span> reg_size,min_reg_size,i;\n01927   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> xsize,ysize;\n01928   <span class=\"keywordtype\">double</span> rho,reg_angle,prec,p,log_nfa,logNT;\n01929   <span class=\"keywordtype\">int</span> ls_count = 0;                   <span class=\"comment\">/* line segments are numbered 1,2,3,... */</span>\n01930 \n01931 \n01932   <span class=\"comment\">/* check parameters */</span>\n01933   <span class=\"keywordflow\">if</span>( image==NULL || image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>==NULL || image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>==0 || image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>==0 )\n01934     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"invalid image input.\"</span>);\n01935   <span class=\"keywordflow\">if</span>( scale &lt;= 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'scale' value must be positive.\"</span>);\n01936   <span class=\"keywordflow\">if</span>( sigma_scale &lt;= 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'sigma_scale' value must be positive.\"</span>);\n01937   <span class=\"keywordflow\">if</span>( quant &lt; 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'quant' value must be positive.\"</span>);\n01938   <span class=\"keywordflow\">if</span>( ang_th &lt;= 0.0 || ang_th &gt;= 180.0 )\n01939     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'ang_th' value must be in the range (0,180).\"</span>);\n01940   <span class=\"keywordflow\">if</span>( density_th &lt; 0.0 || density_th &gt; 1.0 )\n01941     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'density_th' value must be in the range [0,1].\"</span>);\n01942   <span class=\"keywordflow\">if</span>( n_bins &lt;= 0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'n_bins' value must be positive.\"</span>);\n01943   <span class=\"keywordflow\">if</span>( max_grad &lt;= 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'max_grad' value must be positive.\"</span>);\n01944 \n01945 \n01946   <span class=\"comment\">/* angle tolerance */</span>\n01947   prec = <a class=\"code\" href=\"lsd_8c.html#a1\">M_PI</a> * ang_th / 180.0;\n01948   p = ang_th / 180.0;\n01949   rho = quant / sin(prec); <span class=\"comment\">/* gradient magnitude threshold */</span>\n01950 \n01951 \n01952   <span class=\"comment\">/* scale image (if necessary) and compute angle at each pixel */</span>\n01953   <span class=\"keywordflow\">if</span>( scale != 1.0 )\n01954     {\n01955       scaled_image = <a class=\"code\" href=\"lsd_8c.html#a29\">gaussian_sampler</a>( image, scale, sigma_scale );\n01956       angles = <a class=\"code\" href=\"lsd_8c.html#a30\">ll_angle</a>( scaled_image, rho, &amp;list_p, &amp;mem_p,\n01957                          &amp;modgrad, (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>) n_bins, max_grad );\n01958       <a class=\"code\" href=\"lsd_8c.html#a25\">free_image_double</a>(scaled_image);\n01959     }\n01960   <span class=\"keywordflow\">else</span>\n01961     angles = <a class=\"code\" href=\"lsd_8c.html#a30\">ll_angle</a>( image, rho, &amp;list_p, &amp;mem_p, &amp;modgrad,\n01962                        (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>) n_bins, max_grad );\n01963   xsize = angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>;\n01964   ysize = angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>;\n01965   logNT = 5.0 * ( log10( (<span class=\"keywordtype\">double</span>) xsize ) + log10( (<span class=\"keywordtype\">double</span>) ysize ) ) / 2.0;\n01966   min_reg_size = (<span class=\"keywordtype\">int</span>) (-logNT/log10(p)); <span class=\"comment\">/* minimal number of points in region</span>\n01967 <span class=\"comment\">                                             that can give a meaningful event */</span>\n01968 \n01969 \n01970   <span class=\"comment\">/* initialize some structures */</span>\n01971   <span class=\"keywordflow\">if</span>( region != NULL ) <span class=\"comment\">/* image to output pixel region number, if asked */</span>\n01972     *region = <a class=\"code\" href=\"lsd_8c.html#a24\">new_image_int_ini</a>(angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>,angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>,0);\n01973   used = <a class=\"code\" href=\"lsd_8c.html#a21\">new_image_char_ini</a>(xsize,ysize,<a class=\"code\" href=\"lsd_8c.html#a7\">NOTUSED</a>);\n01974   reg = (<span class=\"keyword\">struct </span><a class=\"code\" href=\"structpoint.html\">point</a> *) calloc( (size_t) (xsize*ysize), <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structpoint.html\">point</a>) );\n01975   <span class=\"keywordflow\">if</span>( reg == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory!\"</span>);\n01976 \n01977 \n01978   <span class=\"comment\">/* search for line segments */</span>\n01979   <span class=\"keywordflow\">for</span>(; list_p != NULL; list_p = list_p-&gt;next )\n01980     <span class=\"keywordflow\">if</span>( used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a>[ list_p-&gt;x + list_p-&gt;y * used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a> ] == <a class=\"code\" href=\"lsd_8c.html#a7\">NOTUSED</a> &amp;&amp;\n01981         angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ list_p-&gt;x + list_p-&gt;y * angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ] != <a class=\"code\" href=\"lsd_8c.html#a4\">NOTDEF</a> )\n01982        <span class=\"comment\">/* there is no risk of double comparison problems here</span>\n01983 <span class=\"comment\">          because we are only interested in the exact NOTDEF value */</span>\n01984       {\n01985         <span class=\"comment\">/* find the region of connected point and ~equal angle */</span>\n01986         <a class=\"code\" href=\"lsd_8c.html#a47\">region_grow</a>( list_p-&gt;x, list_p-&gt;y, angles, reg, &amp;reg_size,\n01987                      &amp;reg_angle, used, prec );\n01988 \n01989         <span class=\"comment\">/* reject small regions */</span>\n01990         <span class=\"keywordflow\">if</span>( reg_size &lt; min_reg_size ) <span class=\"keywordflow\">continue</span>;\n01991 \n01992         <span class=\"comment\">/* construct rectangular approximation for the region */</span>\n01993         <a class=\"code\" href=\"lsd_8c.html#a46\">region2rect</a>(reg,reg_size,modgrad,reg_angle,prec,p,&amp;rec);\n01994 \n01995         <span class=\"comment\">/* Check if the rectangle exceeds the minimal density of</span>\n01996 <span class=\"comment\">           region points. If not, try to improve the region.</span>\n01997 <span class=\"comment\">           The rectangle will be rejected if the final one does</span>\n01998 <span class=\"comment\">           not fulfill the minimal density condition.</span>\n01999 <span class=\"comment\">           This is an addition to the original LSD algorithm published in</span>\n02000 <span class=\"comment\">           \"LSD: A Fast Line Segment Detector with a False Detection Control\"</span>\n02001 <span class=\"comment\">           by R. Grompone von Gioi, J. Jakubowicz, J.M. Morel, and G. Randall.</span>\n02002 <span class=\"comment\">           The original algorithm is obtained with density_th = 0.0.</span>\n02003 <span class=\"comment\">         */</span>\n02004         <span class=\"keywordflow\">if</span>( !<a class=\"code\" href=\"lsd_8c.html#a50\">refine</a>( reg, &amp;reg_size, modgrad, reg_angle,\n02005                      prec, p, &amp;rec, used, angles, density_th ) ) <span class=\"keywordflow\">continue</span>;\n02006 \n02007         <span class=\"comment\">/* compute NFA value */</span>\n02008         log_nfa = <a class=\"code\" href=\"lsd_8c.html#a48\">rect_improve</a>(&amp;rec,angles,logNT,eps);\n02009         <span class=\"keywordflow\">if</span>( log_nfa &lt;= eps ) <span class=\"keywordflow\">continue</span>;\n02010 \n02011         <span class=\"comment\">/* A New Line Segment was found! */</span>\n02012         ++ls_count;  <span class=\"comment\">/* increase line segment counter */</span>\n02013 \n02014         <span class=\"comment\">/*</span>\n02015 <span class=\"comment\">           The gradient was computed with a 2x2 mask, its value corresponds to</span>\n02016 <span class=\"comment\">           points with an offset of (0.5,0.5), that should be added to output.</span>\n02017 <span class=\"comment\">           The coordinates origin is at the center of pixel (0,0).</span>\n02018 <span class=\"comment\">         */</span>\n02019         rec.<a class=\"code\" href=\"structrect.html#o0\">x1</a> += 0.5; rec.<a class=\"code\" href=\"structrect.html#o1\">y1</a> += 0.5;\n02020         rec.<a class=\"code\" href=\"structrect.html#o2\">x2</a> += 0.5; rec.<a class=\"code\" href=\"structrect.html#o3\">y2</a> += 0.5;\n02021 \n02022         <span class=\"comment\">/* scale the result values if a subsampling was performed */</span>\n02023         <span class=\"keywordflow\">if</span>( scale != 1.0 )\n02024           {\n02025             rec.<a class=\"code\" href=\"structrect.html#o0\">x1</a> /= scale; rec.<a class=\"code\" href=\"structrect.html#o1\">y1</a> /= scale;\n02026             rec.<a class=\"code\" href=\"structrect.html#o2\">x2</a> /= scale; rec.<a class=\"code\" href=\"structrect.html#o3\">y2</a> /= scale;\n02027             rec.<a class=\"code\" href=\"structrect.html#o4\">width</a> /= scale;\n02028           }\n02029 \n02030         <span class=\"comment\">/* add line segment found to output */</span>\n02031         <a class=\"code\" href=\"lsd_8c.html#a18\">add_5tuple</a>(out, rec.<a class=\"code\" href=\"structrect.html#o0\">x1</a>, rec.<a class=\"code\" href=\"structrect.html#o1\">y1</a>, rec.<a class=\"code\" href=\"structrect.html#o2\">x2</a>, rec.<a class=\"code\" href=\"structrect.html#o3\">y2</a>, rec.<a class=\"code\" href=\"structrect.html#o4\">width</a>);\n02032 \n02033         <span class=\"comment\">/* add region number to 'region' image if needed */</span>\n02034         <span class=\"keywordflow\">if</span>( region != NULL )\n02035           <span class=\"keywordflow\">for</span>(i=0; i&lt;reg_size; i++)\n02036             (*region)-&gt;data[reg[i].x+reg[i].y*(*region)-&gt;xsize] = ls_count;\n02037       }\n02038 \n02039 \n02040   <span class=\"comment\">/* free memory */</span>\n02041   <a class=\"code\" href=\"lsd_8c.html#a25\">free_image_double</a>(angles);\n02042   <a class=\"code\" href=\"lsd_8c.html#a25\">free_image_double</a>(modgrad);\n02043   <a class=\"code\" href=\"lsd_8c.html#a19\">free_image_char</a>(used);\n02044   free( (<span class=\"keywordtype\">void</span> *) reg );\n02045   free( (<span class=\"keywordtype\">void</span> *) mem_p );\n02046 \n02047   <span class=\"keywordflow\">return</span> out;\n02048 }\n02049 \n02050 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n02051 <span class=\"comment\">/** LSD Simple Interface with Scale.</span>\n02052 <span class=\"comment\"> */</span>\n<a name=\"l02053\"></a><a class=\"code\" href=\"lsd_8c.html#a52\">02053</a> <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> <a class=\"code\" href=\"lsd_8c.html#a52\">lsd_scale</a>(<a class=\"code\" href=\"structimage__double__s.html\">image_double</a> image, <span class=\"keywordtype\">double</span> scale)\n02054 {\n02055   <span class=\"comment\">/* LSD parameters */</span>\n02056   <span class=\"keywordtype\">double</span> sigma_scale = 0.6; <span class=\"comment\">/* Sigma for Gaussian filter is computed as</span>\n02057 <span class=\"comment\">                                sigma = sigma_scale/scale.                    */</span>\n02058   <span class=\"keywordtype\">double</span> quant = 2.0;       <span class=\"comment\">/* Bound to the quantization error on the</span>\n02059 <span class=\"comment\">                                gradient norm.                                */</span>\n02060   <span class=\"keywordtype\">double</span> ang_th = 22.5;     <span class=\"comment\">/* Gradient angle tolerance in degrees.           */</span>\n02061   <span class=\"keywordtype\">double</span> eps = 0.0;         <span class=\"comment\">/* Detection threshold, -log10(NFA).              */</span>\n02062   <span class=\"keywordtype\">double</span> density_th = 0.7;  <span class=\"comment\">/* Minimal density of region points in rectangle. */</span>\n02063   <span class=\"keywordtype\">int</span> n_bins = 1024;        <span class=\"comment\">/* Number of bins in pseudo-ordering of gradient</span>\n02064 <span class=\"comment\">                               modulus.                                       */</span>\n02065   <span class=\"keywordtype\">double</span> max_grad = 255.0;  <span class=\"comment\">/* Gradient modulus in the highest bin. The</span>\n02066 <span class=\"comment\">                               default value corresponds to the highest</span>\n02067 <span class=\"comment\">                               gradient modulus on images with gray</span>\n02068 <span class=\"comment\">                               levels in [0,255].                             */</span>\n02069 \n02070   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a51\">LineSegmentDetection</a>( image, scale, sigma_scale, quant, ang_th, eps,\n02071                                density_th, n_bins, max_grad, NULL );\n02072 }\n02073 \n02074 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n02075 <span class=\"comment\">/** LSD Simple Interface.</span>\n02076 <span class=\"comment\"> */</span>\n<a name=\"l02077\"></a><a class=\"code\" href=\"lsd_8c.html#a53\">02077</a> <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> <a class=\"code\" href=\"lsd_8c.html#a53\">lsd</a>(<a class=\"code\" href=\"structimage__double__s.html\">image_double</a> image)\n02078 {\n02079   <span class=\"comment\">/* LSD parameters */</span>\n02080   <span class=\"keywordtype\">double</span> scale = 0.8;       <span class=\"comment\">/* Scale the image by Gaussian filter to 'scale'. */</span>\n02081 \n02082   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a52\">lsd_scale</a>(image,scale);\n02083 }\n02084 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n</pre></div><hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:18 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/lsd_8c.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: lsd.c File Reference</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindex\" href=\"globals.html\">Globals</a></div>\n<h1>lsd.c File Reference</h1><hr><a name=\"_details\"></a><h2>Detailed Description</h2>\nLSD module code. \n<p>\n<dl compact><dt><b>Author:</b></dt><dd>rafael grompone von gioi (<a href=\"mailto:grompone@gmail.com\">grompone@gmail.com</a>)</dd></dl>\n\n<p>\nDefinition in file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\n<code>#include &lt;stdio.h&gt;</code><br>\n<code>#include &lt;stdlib.h&gt;</code><br>\n<code>#include &lt;math.h&gt;</code><br>\n<code>#include &lt;limits.h&gt;</code><br>\n<code>#include &lt;float.h&gt;</code><br>\n<code>#include \"<a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>\"</code><br>\n\n<p>\nInclude dependency graph for lsd.c:<p><center><img src=\"lsd_8c__incl.png\" border=\"0\" usemap=\"#lsd.c_map\" alt=\"Include dependency graph\"></center>\n<map name=\"lsd.c_map\">\n<area href=\"lsd_8h.html\" shape=\"rect\" coords=\"440,7,490,34\" alt=\"\">\n</map>\n\n<p>\n<a href=\"lsd_8c-source.html\">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>\n<tr><td></td></tr>\n<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>struct &nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structcoorlist.html\">coorlist</a></td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Chained list of coordinates. </em> <a href=\"structcoorlist.html#_details\">More...</a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>struct &nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structpoint.html\">point</a></td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">A point (or pixel). </em> <a href=\"structpoint.html#_details\">More...</a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>struct &nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect.html\">rect</a></td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Rectangle structure: line segment with width. </em> <a href=\"structrect.html#_details\">More...</a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>struct &nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect__iter.html\">rect_iter</a></td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Rectangle points iterator. </em> <a href=\"structrect__iter.html#_details\">More...</a><em><br><br></td></tr>\n<tr><td colspan=2><br><h2>Defines</h2></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>#define&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a0\">M_LN10</a>&nbsp;&nbsp;&nbsp;2.30258509299404568402</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">ln(10) </em> <a href=\"#a0\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>#define&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a1\">M_PI</a>&nbsp;&nbsp;&nbsp;3.14159265358979323846</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">PI. </em> <a href=\"#a1\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>#define&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a2\">FALSE</a>&nbsp;&nbsp;&nbsp;0</td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>#define&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a3\">TRUE</a>&nbsp;&nbsp;&nbsp;1</td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>#define&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a4\">NOTDEF</a>&nbsp;&nbsp;&nbsp;-1024.0</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Label for pixels with undefined gradient. </em> <a href=\"#a4\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>#define&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a5\">M_3_2_PI</a>&nbsp;&nbsp;&nbsp;4.71238898038</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">3/2 pi </em> <a href=\"#a5\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>#define&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a6\">M_2__PI</a>&nbsp;&nbsp;&nbsp;6.28318530718</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">2 pi </em> <a href=\"#a6\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>#define&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a7\">NOTUSED</a>&nbsp;&nbsp;&nbsp;0</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Label for pixels not used in yet. </em> <a href=\"#a7\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>#define&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a8\">USED</a>&nbsp;&nbsp;&nbsp;1</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Label for pixels already used in detection. </em> <a href=\"#a8\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>#define&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a9\">RELATIVE_ERROR_FACTOR</a>&nbsp;&nbsp;&nbsp;100.0</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Doubles relative error factor. </em> <a href=\"#a9\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>#define&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a10\">log_gamma</a>(x)&nbsp;&nbsp;&nbsp;((x)&gt;15.0?log_gamma_windschitl(x):log_gamma_lanczos(x))</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Computes the natural logarithm of the absolute value of the gamma function of x. </em> <a href=\"#a10\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>#define&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a11\">TABSIZE</a>&nbsp;&nbsp;&nbsp;100000</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Size of the table to store already computed inverse values. </em> <a href=\"#a11\"></a><em><br><br></td></tr>\n<tr><td colspan=2><br><h2>Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>void&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a12\">error</a> (char *msg)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Fatal error, print a message to standard-error output and exit. </em> <a href=\"#a12\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a13\">double_equal</a> (double a, double b)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Compare doubles by relative error. </em> <a href=\"#a13\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a14\">dist</a> (double x1, double y1, double x2, double y2)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Computes Euclidean distance between point (x1,y1) and point (x2,y2). </em> <a href=\"#a14\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>void&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a15\">free_ntuple_list</a> (<a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a> in)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Free memory used in n-tuple 'in'. </em> <a href=\"#a15\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a16\">new_ntuple_list</a> (unsigned int dim)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create an n-tuple list and allocate memory for one element. </em> <a href=\"#a16\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>void&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a17\">enlarge_ntuple_list</a> (<a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a> n_tuple)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Enlarge the allocated memory of an n-tuple list. </em> <a href=\"#a17\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>void&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a18\">add_5tuple</a> (<a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a> out, double v1, double v2, double v3, double v4, double v5)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Add a 5-tuple to an n-tuple list. </em> <a href=\"#a18\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>void&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a19\">free_image_char</a> (<a class=\"el\" href=\"structimage__char__s.html\">image_char</a> i)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Free memory used in image_char 'i'. </em> <a href=\"#a19\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structimage__char__s.html\">image_char</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a20\">new_image_char</a> (unsigned int xsize, unsigned int ysize)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a new image_char of size 'xsize' times 'ysize'. </em> <a href=\"#a20\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structimage__char__s.html\">image_char</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a21\">new_image_char_ini</a> (unsigned int xsize, unsigned int ysize, unsigned char fill_value)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a new image_char of size 'xsize' times 'ysize', initialized to the value 'fill_value'. </em> <a href=\"#a21\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>void&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a22\">free_image_int</a> (<a class=\"el\" href=\"structimage__int__s.html\">image_int</a> i)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Free memory used in image_int 'i'. </em> <a href=\"#a22\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structimage__int__s.html\">image_int</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a23\">new_image_int</a> (unsigned int xsize, unsigned int ysize)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a new image_int of size 'xsize' times 'ysize'. </em> <a href=\"#a23\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structimage__int__s.html\">image_int</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a24\">new_image_int_ini</a> (unsigned int xsize, unsigned int ysize, int fill_value)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a new image_int of size 'xsize' times 'ysize', initialized to the value 'fill_value'. </em> <a href=\"#a24\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>void&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a25\">free_image_double</a> (<a class=\"el\" href=\"structimage__double__s.html\">image_double</a> i)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Free memory used in image_double 'i'. </em> <a href=\"#a25\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a26\">new_image_double</a> (unsigned int xsize, unsigned int ysize)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a new image_double of size 'xsize' times 'ysize'. </em> <a href=\"#a26\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a27\">new_image_double_ini</a> (unsigned int xsize, unsigned int ysize, double fill_value)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a new image_double of size 'xsize' times 'ysize', initialized to the value 'fill_value'. </em> <a href=\"#a27\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>void&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a28\">gaussian_kernel</a> (<a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a> kernel, double sigma, double mean)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Compute a Gaussian kernel of length 'kernel-&gt;dim', standard deviation 'sigma', and centered at value 'mean'. </em> <a href=\"#a28\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a29\">gaussian_sampler</a> (<a class=\"el\" href=\"structimage__double__s.html\">image_double</a> in, double scale, double sigma_scale)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Scale the input image 'in' by a factor 'scale' by Gaussian sub-sampling. </em> <a href=\"#a29\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a30\">ll_angle</a> (<a class=\"el\" href=\"structimage__double__s.html\">image_double</a> in, double threshold, struct <a class=\"el\" href=\"structcoorlist.html\">coorlist</a> **list_p, void **mem_p, <a class=\"el\" href=\"structimage__double__s.html\">image_double</a> *modgrad, unsigned int n_bins, double max_grad)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Computes the direction of the level line of 'in' at each point. </em> <a href=\"#a30\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a31\">isaligned</a> (int x, int y, <a class=\"el\" href=\"structimage__double__s.html\">image_double</a> angles, double theta, double prec)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Is point (x,y) aligned to angle theta, up to precision 'prec'? </em> <a href=\"#a31\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a32\">angle_diff</a> (double a, double b)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Absolute value angle difference. </em> <a href=\"#a32\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a33\">angle_diff_signed</a> (double a, double b)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Signed angle difference. </em> <a href=\"#a33\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a34\">log_gamma_lanczos</a> (double x)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Computes the natural logarithm of the absolute value of the gamma function of x using the Lanczos approximation. </em> <a href=\"#a34\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a35\">log_gamma_windschitl</a> (double x)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Computes the natural logarithm of the absolute value of the gamma function of x using Windschitl method. </em> <a href=\"#a35\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a36\">nfa</a> (int n, int k, double p, double logNT)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Computes -log10(NFA). </em> <a href=\"#a36\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>void&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a37\">rect_copy</a> (struct <a class=\"el\" href=\"structrect.html\">rect</a> *in, struct <a class=\"el\" href=\"structrect.html\">rect</a> *out)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Copy one rectangle structure to another. </em> <a href=\"#a37\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a38\">inter_low</a> (double x, double x1, double y1, double x2, double y2)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Interpolate y value corresponding to 'x' value given, in the line 'x1,y1' to 'x2,y2'; if 'x1=x2' return the smaller of 'y1' and 'y2'. </em> <a href=\"#a38\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a39\">inter_hi</a> (double x, double x1, double y1, double x2, double y2)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Interpolate y value corresponding to 'x' value given, in the line 'x1,y1' to 'x2,y2'; if 'x1=x2' return the larger of 'y1' and 'y2'. </em> <a href=\"#a39\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>void&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a40\">ri_del</a> (<a class=\"el\" href=\"structrect__iter.html\">rect_iter</a> *iter)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Free memory used by a rectangle iterator. </em> <a href=\"#a40\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a41\">ri_end</a> (<a class=\"el\" href=\"structrect__iter.html\">rect_iter</a> *i)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Check if the iterator finished the full iteration. </em> <a href=\"#a41\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>void&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a42\">ri_inc</a> (<a class=\"el\" href=\"structrect__iter.html\">rect_iter</a> *i)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Increment a rectangle iterator. </em> <a href=\"#a42\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structrect__iter.html\">rect_iter</a> *&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a43\">ri_ini</a> (struct <a class=\"el\" href=\"structrect.html\">rect</a> *r)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create and initialize a rectangle iterator. </em> <a href=\"#a43\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a44\">rect_nfa</a> (struct <a class=\"el\" href=\"structrect.html\">rect</a> *rec, <a class=\"el\" href=\"structimage__double__s.html\">image_double</a> angles, double logNT)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Compute a rectangle's NFA value. </em> <a href=\"#a44\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a45\">get_theta</a> (struct <a class=\"el\" href=\"structpoint.html\">point</a> *reg, int reg_size, double x, double y, <a class=\"el\" href=\"structimage__double__s.html\">image_double</a> modgrad, double reg_angle, double prec)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Compute region's angle as the principal inertia axis of the region. </em> <a href=\"#a45\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>void&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a46\">region2rect</a> (struct <a class=\"el\" href=\"structpoint.html\">point</a> *reg, int reg_size, <a class=\"el\" href=\"structimage__double__s.html\">image_double</a> modgrad, double reg_angle, double prec, double p, struct <a class=\"el\" href=\"structrect.html\">rect</a> *rec)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Computes a rectangle that covers a region of points. </em> <a href=\"#a46\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>void&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a47\">region_grow</a> (int x, int y, <a class=\"el\" href=\"structimage__double__s.html\">image_double</a> angles, struct <a class=\"el\" href=\"structpoint.html\">point</a> *reg, int *reg_size, double *reg_angle, <a class=\"el\" href=\"structimage__char__s.html\">image_char</a> used, double prec)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Build a region of pixels that share the same angle, up to a tolerance 'prec', starting at point (x,y). </em> <a href=\"#a47\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a48\">rect_improve</a> (struct <a class=\"el\" href=\"structrect.html\">rect</a> *rec, <a class=\"el\" href=\"structimage__double__s.html\">image_double</a> angles, double logNT, double eps)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Try some rectangles variations to improve NFA value. </em> <a href=\"#a48\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a49\">reduce_region_radius</a> (struct <a class=\"el\" href=\"structpoint.html\">point</a> *reg, int *reg_size, <a class=\"el\" href=\"structimage__double__s.html\">image_double</a> modgrad, double reg_angle, double prec, double p, struct <a class=\"el\" href=\"structrect.html\">rect</a> *rec, <a class=\"el\" href=\"structimage__char__s.html\">image_char</a> used, <a class=\"el\" href=\"structimage__double__s.html\">image_double</a> angles, double density_th)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Reduce the region size, by elimination the points far from the starting point, until that leads to rectangle with the right density of region points or to discard the region if too small. </em> <a href=\"#a49\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a50\">refine</a> (struct <a class=\"el\" href=\"structpoint.html\">point</a> *reg, int *reg_size, <a class=\"el\" href=\"structimage__double__s.html\">image_double</a> modgrad, double reg_angle, double prec, double p, struct <a class=\"el\" href=\"structrect.html\">rect</a> *rec, <a class=\"el\" href=\"structimage__char__s.html\">image_char</a> used, <a class=\"el\" href=\"structimage__double__s.html\">image_double</a> angles, double density_th)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Refine a rectangle. </em> <a href=\"#a50\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a51\">LineSegmentDetection</a> (<a class=\"el\" href=\"structimage__double__s.html\">image_double</a> image, double scale, double sigma_scale, double quant, double ang_th, double eps, double density_th, int n_bins, double max_grad, <a class=\"el\" href=\"structimage__int__s.html\">image_int</a> *region)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">LSD Full Interface. </em> <a href=\"#a51\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a52\">lsd_scale</a> (<a class=\"el\" href=\"structimage__double__s.html\">image_double</a> image, double scale)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">LSD Simple Interface with Scale. </em> <a href=\"#a52\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8c.html#a53\">lsd</a> (<a class=\"el\" href=\"structimage__double__s.html\">image_double</a> image)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">LSD Simple Interface. </em> <a href=\"#a53\"></a><em><br><br></td></tr>\n</table>\n<hr><h2>Define Documentation</h2>\n<a class=\"anchor\" name=\"a2\" doxytag=\"lsd.c::FALSE\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> #define FALSE&nbsp;&nbsp;&nbsp;0\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00089\">89</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00781\">isaligned()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a10\" doxytag=\"lsd.c::log_gamma\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> #define log_gamma</td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">x&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap>&nbsp;&nbsp;&nbsp;((x)&gt;15.0?log_gamma_windschitl(x):log_gamma_lanczos(x))\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nComputes the natural logarithm of the absolute value of the gamma function of x. \n<p>\nWhen x&gt;15 use <a class=\"el\" href=\"lsd_8c.html#a35\">log_gamma_windschitl()</a>, otherwise use <a class=\"el\" href=\"lsd_8c.html#a34\">log_gamma_lanczos()</a>. \n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00913\">913</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00962\">nfa()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a6\" doxytag=\"lsd.c::M_2__PI\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> #define M_2__PI&nbsp;&nbsp;&nbsp;6.28318530718\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n2 pi \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00103\">103</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00819\">angle_diff()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00831\">angle_diff_signed()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00781\">isaligned()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a5\" doxytag=\"lsd.c::M_3_2_PI\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> #define M_3_2_PI&nbsp;&nbsp;&nbsp;4.71238898038\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n3/2 pi \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00100\">100</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00781\">isaligned()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a0\" doxytag=\"lsd.c::M_LN10\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> #define M_LN10&nbsp;&nbsp;&nbsp;2.30258509299404568402\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nln(10) \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00080\">80</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00962\">nfa()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a1\" doxytag=\"lsd.c::M_PI\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> #define M_PI&nbsp;&nbsp;&nbsp;3.14159265358979323846\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nPI. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00085\">85</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00819\">angle_diff()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00831\">angle_diff_signed()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01456\">get_theta()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01644\">rect_improve()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a4\" doxytag=\"lsd.c::NOTDEF\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> #define NOTDEF&nbsp;&nbsp;&nbsp;-1024.0\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nLabel for pixels with undefined gradient. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00097\">97</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00781\">isaligned()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00652\">ll_angle()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a7\" doxytag=\"lsd.c::NOTUSED\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> #define NOTUSED&nbsp;&nbsp;&nbsp;0\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nLabel for pixels not used in yet. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00106\">106</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a9\" doxytag=\"lsd.c::RELATIVE_ERROR_FACTOR\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> #define RELATIVE_ERROR_FACTOR&nbsp;&nbsp;&nbsp;100.0\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nDoubles relative error factor. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00142\">142</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00155\">double_equal()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a11\" doxytag=\"lsd.c::TABSIZE\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> #define TABSIZE&nbsp;&nbsp;&nbsp;100000\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nSize of the table to store already computed inverse values. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00918\">918</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00962\">nfa()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a3\" doxytag=\"lsd.c::TRUE\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> #define TRUE&nbsp;&nbsp;&nbsp;1\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00093\">93</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00155\">double_equal()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a8\" doxytag=\"lsd.c::USED\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> #define USED&nbsp;&nbsp;&nbsp;1\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nLabel for pixels already used in detection. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00109\">109</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01592\">region_grow()</a>.    </td>\n  </tr>\n</table>\n<hr><h2>Function Documentation</h2>\n<a class=\"anchor\" name=\"a18\" doxytag=\"lsd.c::add_5tuple\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> void add_5tuple </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>out</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>v2</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>v3</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>v4</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>v5</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nAdd a 5-tuple to an n-tuple list. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00250\">250</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00059\">ntuple_list_s::dim</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00232\">enlarge_ntuple_list()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00058\">ntuple_list_s::max_size</a>, <a class=\"el\" href=\"lsd_8h.html#a0\">ntuple_list</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00057\">ntuple_list_s::size</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00060\">ntuple_list_s::values</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>.\n<p>\n<div class=\"fragment\"><pre>00252 {\n00253   <span class=\"comment\">/* check parameters */</span>\n00254   <span class=\"keywordflow\">if</span>( out == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"add_5tuple: invalid n-tuple input.\"</span>);\n00255   <span class=\"keywordflow\">if</span>( out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a> != 5 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"add_5tuple: the n-tuple must be a 5-tuple.\"</span>);\n00256 \n00257   <span class=\"comment\">/* if needed, alloc more tuples to 'out' */</span>\n00258   <span class=\"keywordflow\">if</span>( out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a> == out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o1\">max_size</a> ) <a class=\"code\" href=\"lsd_8c.html#a17\">enlarge_ntuple_list</a>(out);\n00259   <span class=\"keywordflow\">if</span>( out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"add_5tuple: invalid n-tuple input.\"</span>);\n00260 \n00261   <span class=\"comment\">/* add new 5-tuple */</span>\n00262   out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[ out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a> * out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a> + 0 ] = v1;\n00263   out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[ out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a> * out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a> + 1 ] = v2;\n00264   out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[ out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a> * out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a> + 2 ] = v3;\n00265   out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[ out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a> * out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a> + 3 ] = v4;\n00266   out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[ out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a> * out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a> + 4 ] = v5;\n00267 \n00268   <span class=\"comment\">/* update number of tuples counter */</span>\n00269   out-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a>++;\n00270 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a18_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a18_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a18_cgraph_map\">\n<area href=\"lsd_8c.html#a17\" shape=\"rect\" coords=\"145,7,278,34\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"328,33,378,59\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a32\" doxytag=\"lsd.c::angle_diff\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double angle_diff </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>a</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>b</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nAbsolute value angle difference. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00819\">819</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l00103\">M_2__PI</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00085\">M_PI</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01456\">get_theta()</a>.\n<p>\n<div class=\"fragment\"><pre>00820 {\n00821   a -= b;\n00822   <span class=\"keywordflow\">while</span>( a &lt;= -<a class=\"code\" href=\"lsd_8c.html#a1\">M_PI</a> ) a += <a class=\"code\" href=\"lsd_8c.html#a6\">M_2__PI</a>;\n00823   <span class=\"keywordflow\">while</span>( a &gt;   <a class=\"code\" href=\"lsd_8c.html#a1\">M_PI</a> ) a -= <a class=\"code\" href=\"lsd_8c.html#a6\">M_2__PI</a>;\n00824   <span class=\"keywordflow\">if</span>( a &lt; 0.0 ) a = -a;\n00825   <span class=\"keywordflow\">return</span> a;\n00826 }\n</pre></div>    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a33\" doxytag=\"lsd.c::angle_diff_signed\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double angle_diff_signed </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>a</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>b</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nSigned angle difference. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00831\">831</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l00103\">M_2__PI</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00085\">M_PI</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>.\n<p>\n<div class=\"fragment\"><pre>00832 {\n00833   a -= b;\n00834   <span class=\"keywordflow\">while</span>( a &lt;= -<a class=\"code\" href=\"lsd_8c.html#a1\">M_PI</a> ) a += <a class=\"code\" href=\"lsd_8c.html#a6\">M_2__PI</a>;\n00835   <span class=\"keywordflow\">while</span>( a &gt;   <a class=\"code\" href=\"lsd_8c.html#a1\">M_PI</a> ) a -= <a class=\"code\" href=\"lsd_8c.html#a6\">M_2__PI</a>;\n00836   <span class=\"keywordflow\">return</span> a;\n00837 }\n</pre></div>    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a14\" doxytag=\"lsd.c::dist\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double dist </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>x1</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>y1</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>x2</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>y2</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nComputes Euclidean distance between point (x1,y1) and point (x2,y2). \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00181\">181</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>.\n<p>\n<div class=\"fragment\"><pre>00182 {\n00183   <span class=\"keywordflow\">return</span> sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) );\n00184 }\n</pre></div>    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a13\" doxytag=\"lsd.c::double_equal\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> int double_equal </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>a</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>b</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCompare doubles by relative error. \n<p>\nThe resulting rounding error after floating point computations depend on the specific operations done. The same number computed by different algorithms could present different rounding errors. For a useful comparison, an estimation of the relative rounding error should be considered and compared to a factor times EPS. The factor should be related to the cumulated rounding error in the chain of computation. Here, as a simplification, a fixed factor is used. \n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00155\">155</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l00142\">RELATIVE_ERROR_FACTOR</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00093\">TRUE</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01456\">get_theta()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01187\">inter_hi()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01165\">inter_low()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00962\">nfa()</a>.\n<p>\n<div class=\"fragment\"><pre>00156 {\n00157   <span class=\"keywordtype\">double</span> abs_diff,aa,bb,abs_max;\n00158 \n00159   <span class=\"comment\">/* trivial case */</span>\n00160   <span class=\"keywordflow\">if</span>( a == b ) <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a3\">TRUE</a>;\n00161 \n00162   abs_diff = fabs(a-b);\n00163   aa = fabs(a);\n00164   bb = fabs(b);\n00165   abs_max = aa &gt; bb ? aa : bb;\n00166 \n00167   <span class=\"comment\">/* DBL_MIN is the smallest normalized number, thus, the smallest</span>\n00168 <span class=\"comment\">     number whose relative error is bounded by DBL_EPSILON. For</span>\n00169 <span class=\"comment\">     smaller numbers, the same quantization steps as for DBL_MIN</span>\n00170 <span class=\"comment\">     are used. Then, for smaller numbers, a meaningful \"relative\"</span>\n00171 <span class=\"comment\">     error should be computed by dividing the difference by DBL_MIN. */</span>\n00172   <span class=\"keywordflow\">if</span>( abs_max &lt; DBL_MIN ) abs_max = DBL_MIN;\n00173 \n00174   <span class=\"comment\">/* equal if relative error &lt;= factor x eps */</span>\n00175   <span class=\"keywordflow\">return</span> (abs_diff / abs_max) &lt;= (<a class=\"code\" href=\"lsd_8c.html#a9\">RELATIVE_ERROR_FACTOR</a> * DBL_EPSILON);\n00176 }\n</pre></div>    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a17\" doxytag=\"lsd.c::enlarge_ntuple_list\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> void enlarge_ntuple_list </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a>&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>n_tuple</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nEnlarge the allocated memory of an n-tuple list. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00232\">232</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00059\">ntuple_list_s::dim</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00058\">ntuple_list_s::max_size</a>, <a class=\"el\" href=\"lsd_8h.html#a0\">ntuple_list</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00060\">ntuple_list_s::values</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00250\">add_5tuple()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00448\">gaussian_kernel()</a>.\n<p>\n<div class=\"fragment\"><pre>00233 {\n00234   <span class=\"comment\">/* check parameters */</span>\n00235   <span class=\"keywordflow\">if</span>( n_tuple == NULL || n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> == NULL || n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o1\">max_size</a> == 0 )\n00236     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"enlarge_ntuple_list: invalid n-tuple.\"</span>);\n00237 \n00238   <span class=\"comment\">/* duplicate number of tuples */</span>\n00239   n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o1\">max_size</a> *= 2;\n00240 \n00241   <span class=\"comment\">/* realloc memory */</span>\n00242   n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> = (<span class=\"keywordtype\">double</span> *) realloc( (<span class=\"keywordtype\">void</span> *) n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>,\n00243                       n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a> * n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o1\">max_size</a> * <span class=\"keyword\">sizeof</span>(<span class=\"keywordtype\">double</span>) );\n00244   <span class=\"keywordflow\">if</span>( n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00245 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a17_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a17_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a17_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"192,8,242,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a12\" doxytag=\"lsd.c::error\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> void error </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">char *&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>msg</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nFatal error, print a message to standard-error output and exit. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00133\">133</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00250\">add_5tuple()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00232\">enlarge_ntuple_list()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00280\">free_image_char()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00387\">free_image_double()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00336\">free_image_int()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00194\">free_ntuple_list()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00448\">gaussian_kernel()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01456\">get_theta()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01187\">inter_hi()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01165\">inter_low()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00781\">isaligned()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00652\">ll_angle()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00291\">new_image_char()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00316\">new_image_char_ini()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00398\">new_image_double()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00347\">new_image_int()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00206\">new_ntuple_list()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00962\">nfa()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01071\">rect_copy()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01370\">rect_nfa()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01592\">region_grow()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01202\">ri_del()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01213\">ri_end()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01229\">ri_inc()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01299\">ri_ini()</a>.\n<p>\n<div class=\"fragment\"><pre>00134 {\n00135   fprintf(stderr,<span class=\"stringliteral\">\"LSD Error: %s\\n\"</span>,msg);\n00136   exit(EXIT_FAILURE);\n00137 }\n</pre></div>    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a19\" doxytag=\"lsd.c::free_image_char\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> void free_image_char </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structimage__char__s.html\">image_char</a>&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>i</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nFree memory used in image_char 'i'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00280\">280</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00082\">image_char_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, and <a class=\"el\" href=\"lsd_8h.html#a1\">image_char</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>.\n<p>\n<div class=\"fragment\"><pre>00281 {\n00282   <span class=\"keywordflow\">if</span>( i == NULL || i-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> == NULL )\n00283     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"free_image_char: invalid input image.\"</span>);\n00284   free( (<span class=\"keywordtype\">void</span> *) i-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> );\n00285   free( (<span class=\"keywordtype\">void</span> *) i );\n00286 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a19_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a19_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a19_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"178,8,229,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a25\" doxytag=\"lsd.c::free_image_double\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> void free_image_double </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>i</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nFree memory used in image_double 'i'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00387\">387</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00122\">image_double_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, and <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>.\n<p>\n<div class=\"fragment\"><pre>00388 {\n00389   <span class=\"keywordflow\">if</span>( i == NULL || i-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL )\n00390     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"free_image_double: invalid input image.\"</span>);\n00391   free( (<span class=\"keywordtype\">void</span> *) i-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> );\n00392   free( (<span class=\"keywordtype\">void</span> *) i );\n00393 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a25_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a25_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a25_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"194,8,245,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a22\" doxytag=\"lsd.c::free_image_int\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> void free_image_int </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structimage__int__s.html\">image_int</a>&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>i</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nFree memory used in image_int 'i'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00336\">336</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00102\">image_int_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, and <a class=\"el\" href=\"lsd_8h.html#a2\">image_int</a>.\n<p>\n<div class=\"fragment\"><pre>00337 {\n00338   <span class=\"keywordflow\">if</span>( i == NULL || i-&gt;<a class=\"code\" href=\"structimage__int__s.html#o0\">data</a> == NULL )\n00339     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"free_image_int: invalid input image.\"</span>);\n00340   free( (<span class=\"keywordtype\">void</span> *) i-&gt;<a class=\"code\" href=\"structimage__int__s.html#o0\">data</a> );\n00341   free( (<span class=\"keywordtype\">void</span> *) i );\n00342 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a22_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a22_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a22_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"168,8,218,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a15\" doxytag=\"lsd.c::free_ntuple_list\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> void free_ntuple_list </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a>&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>in</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nFree memory used in n-tuple 'in'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00194\">194</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h.html#a0\">ntuple_list</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00060\">ntuple_list_s::values</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>.\n<p>\n<div class=\"fragment\"><pre>00195 {\n00196   <span class=\"keywordflow\">if</span>( in == NULL || in-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> == NULL )\n00197     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"free_ntuple_list: invalid n-tuple input.\"</span>);\n00198   free( (<span class=\"keywordtype\">void</span> *) in-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> );\n00199   free( (<span class=\"keywordtype\">void</span> *) in );\n00200 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a15_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a15_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a15_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"170,8,221,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a28\" doxytag=\"lsd.c::gaussian_kernel\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> void gaussian_kernel </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>kernel</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>sigma</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>mean</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCompute a Gaussian kernel of length 'kernel-&gt;dim', standard deviation 'sigma', and centered at value 'mean'. \n<p>\nFor example, if mean=0.5, the Gaussian will be centered in the middle point between values 'kernel-&gt;values[0]' and 'kernel-&gt;values[1]'. \n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00448\">448</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00059\">ntuple_list_s::dim</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00232\">enlarge_ntuple_list()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00058\">ntuple_list_s::max_size</a>, <a class=\"el\" href=\"lsd_8h.html#a0\">ntuple_list</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00057\">ntuple_list_s::size</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00060\">ntuple_list_s::values</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>.\n<p>\n<div class=\"fragment\"><pre>00449 {\n00450   <span class=\"keywordtype\">double</span> sum = 0.0;\n00451   <span class=\"keywordtype\">double</span> val;\n00452   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> i;\n00453 \n00454   <span class=\"comment\">/* check parameters */</span>\n00455   <span class=\"keywordflow\">if</span>( kernel == NULL || kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> == NULL )\n00456     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"gaussian_kernel: invalid n-tuple 'kernel'.\"</span>);\n00457   <span class=\"keywordflow\">if</span>( sigma &lt;= 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"gaussian_kernel: 'sigma' must be positive.\"</span>);\n00458 \n00459   <span class=\"comment\">/* compute Gaussian kernel */</span>\n00460   <span class=\"keywordflow\">if</span>( kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o1\">max_size</a> &lt; 1 ) <a class=\"code\" href=\"lsd_8c.html#a17\">enlarge_ntuple_list</a>(kernel);\n00461   kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a> = 1;\n00462   <span class=\"keywordflow\">for</span>(i=0;i&lt;kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a>;i++)\n00463     {\n00464       val = ( (<span class=\"keywordtype\">double</span>) i - mean ) / sigma;\n00465       kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[i] = exp( -0.5 * val * val );\n00466       sum += kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[i];\n00467     }\n00468 \n00469   <span class=\"comment\">/* normalization */</span>\n00470   <span class=\"keywordflow\">if</span>( sum &gt;= 0.0 ) <span class=\"keywordflow\">for</span>(i=0;i&lt;kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a>;i++) kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[i] /= sum;\n00471 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a28_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a28_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a28_cgraph_map\">\n<area href=\"lsd_8c.html#a17\" shape=\"rect\" coords=\"177,7,310,34\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"360,33,410,59\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a29\" doxytag=\"lsd.c::gaussian_sampler\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structimage__double__s.html\">image_double</a> gaussian_sampler </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>in</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>scale</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>sigma_scale</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nScale the input image 'in' by a factor 'scale' by Gaussian sub-sampling. \n<p>\nFor example, scale=0.8 will give a result at 80% of the original size.<p>\nThe image is convolved with a Gaussian kernel <p class=formulaDsp>\n<img class=formulaDsp alt=\"\\[ G(x,y) = \\frac{1}{2\\pi\\sigma^2} e^{-\\frac{x^2+y^2}{2\\sigma^2}} \\]\" src=\"form_0.png\">\n<p>\n before the sub-sampling to prevent aliasing.<p>\nThe standard deviation sigma given by:<ul>\n<li>sigma = sigma_scale / scale, if scale &lt; 1.0</li><li>sigma = sigma_scale, if scale &gt;= 1.0</li></ul>\n<p>\nTo be able to sub-sample at non-integer steps, some interpolation is needed. In this implementation, the interpolation is done by the Gaussian kernel, so both operations (filtering and sampling) are done at the same time. The Gaussian kernel is computed centered on the coordinates of the required sample. In this way, when applied, it gives directly the result of convolving the image with the kernel and interpolated to that particular position.<p>\nA fast algorithm is done using the separability of the Gaussian kernel. Applying the 2D Gaussian kernel is equivalent to applying first a horizontal 1D Gaussian kernel and then a vertical 1D Gaussian kernel (or the other way round). The reason is that <p class=formulaDsp>\n<img class=formulaDsp alt=\"\\[ G(x,y) = G(x) * G(y) \\]\" src=\"form_1.png\">\n<p>\n where <p class=formulaDsp>\n<img class=formulaDsp alt=\"\\[ G(x) = \\frac{1}{\\sqrt{2\\pi}\\sigma} e^{-\\frac{x^2}{2\\sigma^2}}. \\]\" src=\"form_2.png\">\n<p>\n The algorithm first apply a combined Gaussian kernel and sampling in the x axis, and then the combined Gaussian kernel and sampling in the y axis. \n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00511\">511</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00122\">image_double_s::data</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00059\">ntuple_list_s::dim</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00387\">free_image_double()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00194\">free_ntuple_list()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00448\">gaussian_kernel()</a>, <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00398\">new_image_double()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00206\">new_ntuple_list()</a>, <a class=\"el\" href=\"lsd_8h.html#a0\">ntuple_list</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00060\">ntuple_list_s::values</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::xsize</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::ysize</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>.\n<p>\n<div class=\"fragment\"><pre>00513 {\n00514   <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> aux,out;\n00515   <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> kernel;\n00516   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> N,M,h,n,x,y,i;\n00517   <span class=\"keywordtype\">int</span> xc,yc,j,double_x_size,double_y_size;\n00518   <span class=\"keywordtype\">double</span> sigma,xx,yy,sum,prec;\n00519 \n00520   <span class=\"comment\">/* check parameters */</span>\n00521   <span class=\"keywordflow\">if</span>( in == NULL || in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL || in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> == 0 || in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> == 0 )\n00522     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"gaussian_sampler: invalid image.\"</span>);\n00523   <span class=\"keywordflow\">if</span>( scale &lt;= 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"gaussian_sampler: 'scale' must be positive.\"</span>);\n00524   <span class=\"keywordflow\">if</span>( sigma_scale &lt;= 0.0 )\n00525     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"gaussian_sampler: 'sigma_scale' must be positive.\"</span>);\n00526 \n00527   <span class=\"comment\">/* get memory for images */</span>\n00528   <span class=\"keywordflow\">if</span>( in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> * scale &gt; (<span class=\"keywordtype\">double</span>) UINT_MAX ||\n00529       in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> * scale &gt; (<span class=\"keywordtype\">double</span>) UINT_MAX )\n00530     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"gaussian_sampler: the output image size exceeds the handled size.\"</span>);\n00531   N = (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>) floor( in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> * scale );\n00532   M = (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>) floor( in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> * scale );\n00533   aux = <a class=\"code\" href=\"lsd_8c.html#a26\">new_image_double</a>(N,in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>);\n00534   out = <a class=\"code\" href=\"lsd_8c.html#a26\">new_image_double</a>(N,M);\n00535 \n00536   <span class=\"comment\">/* sigma, kernel size and memory for the kernel */</span>\n00537   sigma = scale &lt; 1.0 ? sigma_scale / scale : sigma_scale;\n00538   <span class=\"comment\">/*</span>\n00539 <span class=\"comment\">     The size of the kernel is selected to guarantee that the</span>\n00540 <span class=\"comment\">     the first discarded term is at least 10^prec times smaller</span>\n00541 <span class=\"comment\">     than the central value. For that, h should be larger than x, with</span>\n00542 <span class=\"comment\">       e^(-x^2/2sigma^2) = 1/10^prec.</span>\n00543 <span class=\"comment\">     Then,</span>\n00544 <span class=\"comment\">       x = sigma * sqrt( 2 * prec * ln(10) ).</span>\n00545 <span class=\"comment\">   */</span>\n00546   prec = 3.0;\n00547   h = (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>) ceil( sigma * sqrt( 2.0 * prec * log(10.0) ) );\n00548   n = 1+2*h; <span class=\"comment\">/* kernel size */</span>\n00549   kernel = <a class=\"code\" href=\"lsd_8c.html#a16\">new_ntuple_list</a>(n);\n00550 \n00551   <span class=\"comment\">/* auxiliary double image size variables */</span>\n00552   double_x_size = (<span class=\"keywordtype\">int</span>) (2 * in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>);\n00553   double_y_size = (<span class=\"keywordtype\">int</span>) (2 * in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>);\n00554 \n00555   <span class=\"comment\">/* First subsampling: x axis */</span>\n00556   <span class=\"keywordflow\">for</span>(x=0;x&lt;aux-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>;x++)\n00557     {\n00558       <span class=\"comment\">/*</span>\n00559 <span class=\"comment\">         x   is the coordinate in the new image.</span>\n00560 <span class=\"comment\">         xx  is the corresponding x-value in the original size image.</span>\n00561 <span class=\"comment\">         xc  is the integer value, the pixel coordinate of xx.</span>\n00562 <span class=\"comment\">       */</span>\n00563       xx = (<span class=\"keywordtype\">double</span>) x / scale;\n00564       <span class=\"comment\">/* coordinate (0.0,0.0) is in the center of pixel (0,0),</span>\n00565 <span class=\"comment\">         so the pixel with xc=0 get the values of xx from -0.5 to 0.5 */</span>\n00566       xc = (<span class=\"keywordtype\">int</span>) floor( xx + 0.5 );\n00567       <a class=\"code\" href=\"lsd_8c.html#a28\">gaussian_kernel</a>( kernel, sigma, (<span class=\"keywordtype\">double</span>) h + xx - (<span class=\"keywordtype\">double</span>) xc );\n00568       <span class=\"comment\">/* the kernel must be computed for each x because the fine</span>\n00569 <span class=\"comment\">         offset xx-xc is different in each case */</span>\n00570 \n00571       <span class=\"keywordflow\">for</span>(y=0;y&lt;aux-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>;y++)\n00572         {\n00573           sum = 0.0;\n00574           <span class=\"keywordflow\">for</span>(i=0;i&lt;kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a>;i++)\n00575             {\n00576               j = xc - h + i;\n00577 \n00578               <span class=\"comment\">/* symmetry boundary condition */</span>\n00579               <span class=\"keywordflow\">while</span>( j &lt; 0 ) j += double_x_size;\n00580               <span class=\"keywordflow\">while</span>( j &gt;= double_x_size ) j -= double_x_size;\n00581               <span class=\"keywordflow\">if</span>( j &gt;= (<span class=\"keywordtype\">int</span>) in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ) j = double_x_size-1-j;\n00582 \n00583               sum += in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ j + y * in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ] * kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[i];\n00584             }\n00585           aux-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ x + y * aux-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ] = sum;\n00586         }\n00587     }\n00588 \n00589   <span class=\"comment\">/* Second subsampling: y axis */</span>\n00590   <span class=\"keywordflow\">for</span>(y=0;y&lt;out-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>;y++)\n00591     {\n00592       <span class=\"comment\">/*</span>\n00593 <span class=\"comment\">         y   is the coordinate in the new image.</span>\n00594 <span class=\"comment\">         yy  is the corresponding x-value in the original size image.</span>\n00595 <span class=\"comment\">         yc  is the integer value, the pixel coordinate of xx.</span>\n00596 <span class=\"comment\">       */</span>\n00597       yy = (<span class=\"keywordtype\">double</span>) y / scale;\n00598       <span class=\"comment\">/* coordinate (0.0,0.0) is in the center of pixel (0,0),</span>\n00599 <span class=\"comment\">         so the pixel with yc=0 get the values of yy from -0.5 to 0.5 */</span>\n00600       yc = (<span class=\"keywordtype\">int</span>) floor( yy + 0.5 );\n00601       <a class=\"code\" href=\"lsd_8c.html#a28\">gaussian_kernel</a>( kernel, sigma, (<span class=\"keywordtype\">double</span>) h + yy - (<span class=\"keywordtype\">double</span>) yc );\n00602       <span class=\"comment\">/* the kernel must be computed for each y because the fine</span>\n00603 <span class=\"comment\">         offset yy-yc is different in each case */</span>\n00604 \n00605       <span class=\"keywordflow\">for</span>(x=0;x&lt;out-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>;x++)\n00606         {\n00607           sum = 0.0;\n00608           <span class=\"keywordflow\">for</span>(i=0;i&lt;kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a>;i++)\n00609             {\n00610               j = yc - h + i;\n00611 \n00612               <span class=\"comment\">/* symmetry boundary condition */</span>\n00613               <span class=\"keywordflow\">while</span>( j &lt; 0 ) j += double_y_size;\n00614               <span class=\"keywordflow\">while</span>( j &gt;= double_y_size ) j -= double_y_size;\n00615               <span class=\"keywordflow\">if</span>( j &gt;= (<span class=\"keywordtype\">int</span>) in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> ) j = double_y_size-1-j;\n00616 \n00617               sum += aux-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ x + j * aux-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ] * kernel-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>[i];\n00618             }\n00619           out-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ x + y * out-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ] = sum;\n00620         }\n00621     }\n00622 \n00623   <span class=\"comment\">/* free memory */</span>\n00624   <a class=\"code\" href=\"lsd_8c.html#a15\">free_ntuple_list</a>(kernel);\n00625   <a class=\"code\" href=\"lsd_8c.html#a25\">free_image_double</a>(aux);\n00626 \n00627   <span class=\"keywordflow\">return</span> out;\n00628 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a29_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a29_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a29_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"560,197,610,224\" alt=\"\">\n<area href=\"lsd_8c.html#a25\" shape=\"rect\" coords=\"374,96,510,122\" alt=\"\">\n<area href=\"lsd_8c.html#a15\" shape=\"rect\" coords=\"386,146,498,173\" alt=\"\">\n<area href=\"lsd_8c.html#a28\" shape=\"rect\" coords=\"197,197,314,224\" alt=\"\">\n<area href=\"lsd_8c.html#a26\" shape=\"rect\" coords=\"188,260,324,286\" alt=\"\">\n<area href=\"lsd_8c.html#a16\" shape=\"rect\" coords=\"198,336,313,362\" alt=\"\">\n<area href=\"lsd_8c.html#a17\" shape=\"rect\" coords=\"376,248,509,274\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a45\" doxytag=\"lsd.c::get_theta\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double get_theta </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">struct <a class=\"el\" href=\"structpoint.html\">point</a> *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>reg</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>reg_size</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>x</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>y</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>modgrad</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>reg_angle</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>prec</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCompute region's angle as the principal inertia axis of the region. \n<p>\nThe following is the region inertia matrix A: <p class=formulaDsp>\n<img class=formulaDsp alt=\"\\[ A = \\left(\\begin{array}{cc} Ixx &amp; Ixy \\\\ Ixy &amp; Iyy \\\\ \\end{array}\\right) \\]\" src=\"form_10.png\">\n<p>\n where<p>\nIxx = sum_i G(i).(y_i - cx)^2<p>\nIyy = sum_i G(i).(x_i - cy)^2<p>\nIxy = - sum_i G(i).(x_i - cx).(y_i - cy)<p>\nand<ul>\n<li>G(i) is the gradient norm at pixel i, used as pixel's weight.</li><li>x_i and y_i are the coordinates of pixel i.</li><li>cx and cy are the coordinates of the center of th region.</li></ul>\n<p>\nlambda1 and lambda2 are the eigenvalues of matrix A, with lambda1 &gt;= lambda2. They are found by solving the characteristic polynomial:<p>\ndet( lambda I - A) = 0<p>\nthat gives:<p>\nlambda1 = ( Ixx + Iyy + sqrt( (Ixx-Iyy)^2 + 4.0*Ixy*Ixy) ) / 2<p>\nlambda2 = ( Ixx + Iyy - sqrt( (Ixx-Iyy)^2 + 4.0*Ixy*Ixy) ) / 2<p>\nTo get the line segment direction we want to get the angle the eigenvector assotiated to the smaller eigenvalue. We have to solve a,b in:<p>\na.Ixx + b.Ixy = a.lambda2<p>\na.Ixy + b.Iyy = b.lambda2<p>\nWe want the angle theta = atan(b/a). It can be computed with any of the two equations:<p>\ntheta = atan( (lambda2-Ixx) / Ixy )<p>\nor<p>\ntheta = atan( Ixy / (lambda2-Iyy) )<p>\nWhen |Ixx| &gt; |Iyy| we use the first, otherwise the second (just to get better numeric precision). \n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01456\">1456</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l00819\">angle_diff()</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00122\">image_double_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00155\">double_equal()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00085\">M_PI</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00123\">point::x</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::xsize</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00123\">point::y</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>.\n<p>\n<div class=\"fragment\"><pre>01458 {\n01459   <span class=\"keywordtype\">double</span> lambda,theta,weight;\n01460   <span class=\"keywordtype\">double</span> Ixx = 0.0;\n01461   <span class=\"keywordtype\">double</span> Iyy = 0.0;\n01462   <span class=\"keywordtype\">double</span> Ixy = 0.0;\n01463   <span class=\"keywordtype\">int</span> i;\n01464 \n01465   <span class=\"comment\">/* check parameters */</span>\n01466   <span class=\"keywordflow\">if</span>( reg == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"get_theta: invalid region.\"</span>);\n01467   <span class=\"keywordflow\">if</span>( reg_size &lt;= 1 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"get_theta: region size &lt;= 1.\"</span>);\n01468   <span class=\"keywordflow\">if</span>( modgrad == NULL || modgrad-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL )\n01469     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"get_theta: invalid 'modgrad'.\"</span>);\n01470   <span class=\"keywordflow\">if</span>( prec &lt; 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"get_theta: 'prec' must be positive.\"</span>);\n01471 \n01472   <span class=\"comment\">/* compute inertia matrix */</span>\n01473   <span class=\"keywordflow\">for</span>(i=0; i&lt;reg_size; i++)\n01474     {\n01475       weight = modgrad-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> + reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> * modgrad-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ];\n01476       Ixx += ( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> - y ) * ( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> - y ) * weight;\n01477       Iyy += ( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> - x ) * ( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> - x ) * weight;\n01478       Ixy -= ( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> - x ) * ( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> - y ) * weight;\n01479     }\n01480   <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a13\">double_equal</a>(Ixx,0.0) &amp;&amp; <a class=\"code\" href=\"lsd_8c.html#a13\">double_equal</a>(Iyy,0.0) &amp;&amp; <a class=\"code\" href=\"lsd_8c.html#a13\">double_equal</a>(Ixy,0.0) )\n01481     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"get_theta: null inertia matrix.\"</span>);\n01482 \n01483   <span class=\"comment\">/* compute smallest eigenvalue */</span>\n01484   lambda = 0.5 * ( Ixx + Iyy - sqrt( (Ixx-Iyy)*(Ixx-Iyy) + 4.0*Ixy*Ixy ) );\n01485 \n01486   <span class=\"comment\">/* compute angle */</span>\n01487   theta = fabs(Ixx)&gt;fabs(Iyy) ? atan2(lambda-Ixx,Ixy) : atan2(Ixy,lambda-Iyy);\n01488 \n01489   <span class=\"comment\">/* The previous procedure don't cares about orientation,</span>\n01490 <span class=\"comment\">     so it could be wrong by 180 degrees. Here is corrected if necessary. */</span>\n01491   <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a32\">angle_diff</a>(theta,reg_angle) &gt; prec ) theta += <a class=\"code\" href=\"lsd_8c.html#a1\">M_PI</a>;\n01492 \n01493   <span class=\"keywordflow\">return</span> theta;\n01494 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a45_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a45_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a45_cgraph_map\">\n<area href=\"lsd_8c.html#a32\" shape=\"rect\" coords=\"145,8,225,34\" alt=\"\">\n<area href=\"lsd_8c.html#a13\" shape=\"rect\" coords=\"134,58,235,85\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"159,109,210,136\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a39\" doxytag=\"lsd.c::inter_hi\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double inter_hi </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>x</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>x1</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>y1</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>x2</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>y2</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nInterpolate y value corresponding to 'x' value given, in the line 'x1,y1' to 'x2,y2'; if 'x1=x2' return the larger of 'y1' and 'y2'. \n<p>\nThe following restrictions are required:<ul>\n<li>x1 &lt;= x2</li><li>x1 &lt;= x</li><li>x &lt;= x2 </li></ul>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01187\">1187</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l00155\">double_equal()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01229\">ri_inc()</a>.\n<p>\n<div class=\"fragment\"><pre>01188 {\n01189   <span class=\"comment\">/* check parameters */</span>\n01190   <span class=\"keywordflow\">if</span>( x1 &gt; x2 || x &lt; x1 || x &gt; x2 )\n01191     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"inter_hi: unsuitable input, 'x1&gt;x2' or 'x&lt;x1' or 'x&gt;x2'.\"</span>);\n01192 \n01193   <span class=\"comment\">/* interpolation */</span>\n01194   <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a13\">double_equal</a>(x1,x2) &amp;&amp; y1&lt;y2 ) <span class=\"keywordflow\">return</span> y2;\n01195   <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a13\">double_equal</a>(x1,x2) &amp;&amp; y1&gt;y2 ) <span class=\"keywordflow\">return</span> y1;\n01196   <span class=\"keywordflow\">return</span> y1 + (x-x1) * (y2-y1) / (x2-x1);\n01197 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a39_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a39_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a39_cgraph_map\">\n<area href=\"lsd_8c.html#a13\" shape=\"rect\" coords=\"124,7,225,34\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"149,58,200,85\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a38\" doxytag=\"lsd.c::inter_low\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double inter_low </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>x</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>x1</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>y1</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>x2</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>y2</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nInterpolate y value corresponding to 'x' value given, in the line 'x1,y1' to 'x2,y2'; if 'x1=x2' return the smaller of 'y1' and 'y2'. \n<p>\nThe following restrictions are required:<ul>\n<li>x1 &lt;= x2</li><li>x1 &lt;= x</li><li>x &lt;= x2 </li></ul>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01165\">1165</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l00155\">double_equal()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01229\">ri_inc()</a>.\n<p>\n<div class=\"fragment\"><pre>01166 {\n01167   <span class=\"comment\">/* check parameters */</span>\n01168   <span class=\"keywordflow\">if</span>( x1 &gt; x2 || x &lt; x1 || x &gt; x2 )\n01169     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"inter_low: unsuitable input, 'x1&gt;x2' or 'x&lt;x1' or 'x&gt;x2'.\"</span>);\n01170 \n01171   <span class=\"comment\">/* interpolation */</span>\n01172   <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a13\">double_equal</a>(x1,x2) &amp;&amp; y1&lt;y2 ) <span class=\"keywordflow\">return</span> y1;\n01173   <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a13\">double_equal</a>(x1,x2) &amp;&amp; y1&gt;y2 ) <span class=\"keywordflow\">return</span> y2;\n01174   <span class=\"keywordflow\">return</span> y1 + (x-x1) * (y2-y1) / (x2-x1);\n01175 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a38_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a38_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a38_cgraph_map\">\n<area href=\"lsd_8c.html#a13\" shape=\"rect\" coords=\"134,7,235,34\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"159,58,210,85\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a31\" doxytag=\"lsd.c::isaligned\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> int isaligned </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>x</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>y</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>angles</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>theta</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>prec</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nIs point (x,y) aligned to angle theta, up to precision 'prec'? \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00781\">781</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00122\">image_double_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00089\">FALSE</a>, <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00103\">M_2__PI</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00100\">M_3_2_PI</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00097\">NOTDEF</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::xsize</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::ysize</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01370\">rect_nfa()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01592\">region_grow()</a>.\n<p>\n<div class=\"fragment\"><pre>00783 {\n00784   <span class=\"keywordtype\">double</span> a;\n00785 \n00786   <span class=\"comment\">/* check parameters */</span>\n00787   <span class=\"keywordflow\">if</span>( angles == NULL || angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL )\n00788     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"isaligned: invalid image 'angles'.\"</span>);\n00789   <span class=\"keywordflow\">if</span>( x &lt; 0 || y &lt; 0 || x &gt;= (<span class=\"keywordtype\">int</span>) angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> || y &gt;= (<span class=\"keywordtype\">int</span>) angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> )\n00790     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"isaligned: (x,y) out of the image.\"</span>);\n00791   <span class=\"keywordflow\">if</span>( prec &lt; 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"isaligned: 'prec' must be positive.\"</span>);\n00792 \n00793   <span class=\"comment\">/* angle at pixel (x,y) */</span>\n00794   a = angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ x + y * angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ];\n00795 \n00796   <span class=\"comment\">/* pixels whose level-line angle is not defined</span>\n00797 <span class=\"comment\">     are considered as NON-aligned */</span>\n00798   <span class=\"keywordflow\">if</span>( a == <a class=\"code\" href=\"lsd_8c.html#a4\">NOTDEF</a> ) <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a2\">FALSE</a>;  <span class=\"comment\">/* there is no need to call the function</span>\n00799 <span class=\"comment\">                                      'double_equal' here because there is</span>\n00800 <span class=\"comment\">                                      no risk of problems related to the</span>\n00801 <span class=\"comment\">                                      comparison doubles, we are only</span>\n00802 <span class=\"comment\">                                      interested in the exact NOTDEF value */</span>\n00803 \n00804   <span class=\"comment\">/* it is assumed that 'theta' and 'a' are in the range [-pi,pi] */</span>\n00805   theta -= a;\n00806   <span class=\"keywordflow\">if</span>( theta &lt; 0.0 ) theta = -theta;\n00807   <span class=\"keywordflow\">if</span>( theta &gt; <a class=\"code\" href=\"lsd_8c.html#a5\">M_3_2_PI</a> )\n00808     {\n00809       theta -= <a class=\"code\" href=\"lsd_8c.html#a6\">M_2__PI</a>;\n00810       <span class=\"keywordflow\">if</span>( theta &lt; 0.0 ) theta = -theta;\n00811     }\n00812 \n00813   <span class=\"keywordflow\">return</span> theta &lt; prec;\n00814 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a31_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a31_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a31_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"130,8,181,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a51\" doxytag=\"lsd.c::LineSegmentDetection\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a> LineSegmentDetection </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>image</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>scale</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>sigma_scale</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>quant</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>ang_th</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>eps</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>density_th</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>n_bins</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>max_grad</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap><a class=\"el\" href=\"structimage__int__s.html\">image_int</a> *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>region</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nLSD Full Interface. \n<p>\n<dl compact><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=top><em>image</em>&nbsp;</td><td>Input image.</td></tr>\n    <tr><td valign=top><em>scale</em>&nbsp;</td><td>When different than 1.0, LSD will scale the image by Gaussian filtering. Example: is scale=0.8, the input image will be subsampled to 80% of its size, and then the line segment detector will be applied. Suggested value: 0.8</td></tr>\n    <tr><td valign=top><em>sigma_scale</em>&nbsp;</td><td>When scale!=1.0, the sigma of the Gaussian filter is: sigma = sigma_scale / scale, if scale &lt; 1.0 sigma = sigma_scale, if scale &gt;= 1.0 Suggested value: 0.6</td></tr>\n    <tr><td valign=top><em>quant</em>&nbsp;</td><td>Bound to the quantization error on the gradient norm. Example: if gray level is quantized to integer steps, the gradient (computed by finite differences) error due to quantization will be bounded by 2.0, as the worst case is when the error are 1 and -1, that gives an error of 2.0. Suggested value: 2.0</td></tr>\n    <tr><td valign=top><em>ang_th</em>&nbsp;</td><td>Gradient angle tolerance in the region growing algorithm, in degrees. Suggested value: 22.5</td></tr>\n    <tr><td valign=top><em>eps</em>&nbsp;</td><td>Detection threshold, -log10(NFA). The bigger, the more strict the detector is, and will result in less detections. (Note that the 'minus sign' makes that this behavior is opposite to the one of NFA.) The value -log10(NFA) is equivalent but more intuitive than NFA:<ul>\n<li>-1.0 corresponds to 10 mean false alarms</li><li>0.0 corresponds to 1 mean false alarm</li><li>1.0 corresponds to 0.1 mean false alarms</li><li>2.0 corresponds to 0.01 mean false alarms</li></ul>\nSuggested value: 0.0</td></tr>\n    <tr><td valign=top><em>density_th</em>&nbsp;</td><td>Minimal proportion of region points in a rectangle. Suggested value: 0.7</td></tr>\n    <tr><td valign=top><em>n_bins</em>&nbsp;</td><td>Number of bins used in the pseudo-ordering of gradient modulus. Suggested value: 1024</td></tr>\n    <tr><td valign=top><em>max_grad</em>&nbsp;</td><td>Gradient modulus in the highest bin. For example, for images with integer gray levels in [0,255], the maximum possible gradient value is 255.0. Suggested value: 255.0</td></tr>\n    <tr><td valign=top><em>region</em>&nbsp;</td><td>Optional output: an int image where the pixels used in some line support region are marked. Unused pixels have the value '0' while the used ones have the number of the line segment, numbered 1,2,3,... If desired, a non NULL pointer to an image_int should be used. The resulting image has the size of the image used for the processing, that is, the size of the input image scaled by the given factor 'scale'. Suggested value: NULL</td></tr>\n  </table>\n</dl>\n<dl compact><dt><b>Returns:</b></dt><dd>A 5-tuple list, where each 5-tuple corresponds to a detected line segment. The five values are:<ul>\n<li>x1,y1,x2,y2,width</li></ul>\nfor a line segment from (x1,y1) to (x2,y2) and a width 'width'. </dd></dl>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01913\">1913</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l00250\">add_5tuple()</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00082\">image_char_s::data</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00122\">image_double_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00280\">free_image_char()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00387\">free_image_double()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>, <a class=\"el\" href=\"lsd_8h.html#a1\">image_char</a>, <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, <a class=\"el\" href=\"lsd_8h.html#a2\">image_int</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00652\">ll_angle()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00085\">M_PI</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00316\">new_image_char_ini()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00371\">new_image_int_ini()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00206\">new_ntuple_list()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00097\">NOTDEF</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00106\">NOTUSED</a>, <a class=\"el\" href=\"lsd_8h.html#a0\">ntuple_list</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01644\">rect_improve()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01592\">region_grow()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01060\">rect::width</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::x1</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::x2</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00083\">image_char_s::xsize</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::xsize</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::y1</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::y2</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::ysize</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l02053\">lsd_scale()</a>.\n<p>\n<div class=\"fragment\"><pre>01918 {\n01919   <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> out = <a class=\"code\" href=\"lsd_8c.html#a16\">new_ntuple_list</a>(5);\n01920   <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> scaled_image,angles,modgrad;\n01921   <a class=\"code\" href=\"structimage__char__s.html\">image_char</a> used;\n01922   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> * list_p;\n01923   <span class=\"keywordtype\">void</span> * mem_p;\n01924   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structrect.html\">rect</a> rec;\n01925   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structpoint.html\">point</a> * reg;\n01926   <span class=\"keywordtype\">int</span> reg_size,min_reg_size,i;\n01927   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> xsize,ysize;\n01928   <span class=\"keywordtype\">double</span> rho,reg_angle,prec,p,log_nfa,logNT;\n01929   <span class=\"keywordtype\">int</span> ls_count = 0;                   <span class=\"comment\">/* line segments are numbered 1,2,3,... */</span>\n01930 \n01931 \n01932   <span class=\"comment\">/* check parameters */</span>\n01933   <span class=\"keywordflow\">if</span>( image==NULL || image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>==NULL || image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>==0 || image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>==0 )\n01934     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"invalid image input.\"</span>);\n01935   <span class=\"keywordflow\">if</span>( scale &lt;= 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'scale' value must be positive.\"</span>);\n01936   <span class=\"keywordflow\">if</span>( sigma_scale &lt;= 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'sigma_scale' value must be positive.\"</span>);\n01937   <span class=\"keywordflow\">if</span>( quant &lt; 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'quant' value must be positive.\"</span>);\n01938   <span class=\"keywordflow\">if</span>( ang_th &lt;= 0.0 || ang_th &gt;= 180.0 )\n01939     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'ang_th' value must be in the range (0,180).\"</span>);\n01940   <span class=\"keywordflow\">if</span>( density_th &lt; 0.0 || density_th &gt; 1.0 )\n01941     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'density_th' value must be in the range [0,1].\"</span>);\n01942   <span class=\"keywordflow\">if</span>( n_bins &lt;= 0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'n_bins' value must be positive.\"</span>);\n01943   <span class=\"keywordflow\">if</span>( max_grad &lt;= 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'max_grad' value must be positive.\"</span>);\n01944 \n01945 \n01946   <span class=\"comment\">/* angle tolerance */</span>\n01947   prec = <a class=\"code\" href=\"lsd_8c.html#a1\">M_PI</a> * ang_th / 180.0;\n01948   p = ang_th / 180.0;\n01949   rho = quant / sin(prec); <span class=\"comment\">/* gradient magnitude threshold */</span>\n01950 \n01951 \n01952   <span class=\"comment\">/* scale image (if necessary) and compute angle at each pixel */</span>\n01953   <span class=\"keywordflow\">if</span>( scale != 1.0 )\n01954     {\n01955       scaled_image = <a class=\"code\" href=\"lsd_8c.html#a29\">gaussian_sampler</a>( image, scale, sigma_scale );\n01956       angles = <a class=\"code\" href=\"lsd_8c.html#a30\">ll_angle</a>( scaled_image, rho, &amp;list_p, &amp;mem_p,\n01957                          &amp;modgrad, (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>) n_bins, max_grad );\n01958       <a class=\"code\" href=\"lsd_8c.html#a25\">free_image_double</a>(scaled_image);\n01959     }\n01960   <span class=\"keywordflow\">else</span>\n01961     angles = <a class=\"code\" href=\"lsd_8c.html#a30\">ll_angle</a>( image, rho, &amp;list_p, &amp;mem_p, &amp;modgrad,\n01962                        (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>) n_bins, max_grad );\n01963   xsize = angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>;\n01964   ysize = angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>;\n01965   logNT = 5.0 * ( log10( (<span class=\"keywordtype\">double</span>) xsize ) + log10( (<span class=\"keywordtype\">double</span>) ysize ) ) / 2.0;\n01966   min_reg_size = (<span class=\"keywordtype\">int</span>) (-logNT/log10(p)); <span class=\"comment\">/* minimal number of points in region</span>\n01967 <span class=\"comment\">                                             that can give a meaningful event */</span>\n01968 \n01969 \n01970   <span class=\"comment\">/* initialize some structures */</span>\n01971   <span class=\"keywordflow\">if</span>( region != NULL ) <span class=\"comment\">/* image to output pixel region number, if asked */</span>\n01972     *region = <a class=\"code\" href=\"lsd_8c.html#a24\">new_image_int_ini</a>(angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>,angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>,0);\n01973   used = <a class=\"code\" href=\"lsd_8c.html#a21\">new_image_char_ini</a>(xsize,ysize,NOTUSED);\n01974   reg = (<span class=\"keyword\">struct </span><a class=\"code\" href=\"structpoint.html\">point</a> *) calloc( (size_t) (xsize*ysize), <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structpoint.html\">point</a>) );\n01975   <span class=\"keywordflow\">if</span>( reg == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory!\"</span>);\n01976 \n01977 \n01978   <span class=\"comment\">/* search for line segments */</span>\n01979   <span class=\"keywordflow\">for</span>(; list_p != NULL; list_p = list_p-&gt;next )\n01980     <span class=\"keywordflow\">if</span>( used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a>[ list_p-&gt;x + list_p-&gt;y * used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a> ] == <a class=\"code\" href=\"lsd_8c.html#a7\">NOTUSED</a> &amp;&amp;\n01981         angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ list_p-&gt;x + list_p-&gt;y * angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ] != <a class=\"code\" href=\"lsd_8c.html#a4\">NOTDEF</a> )\n01982        <span class=\"comment\">/* there is no risk of double comparison problems here</span>\n01983 <span class=\"comment\">          because we are only interested in the exact NOTDEF value */</span>\n01984       {\n01985         <span class=\"comment\">/* find the region of connected point and ~equal angle */</span>\n01986         <a class=\"code\" href=\"lsd_8c.html#a47\">region_grow</a>( list_p-&gt;x, list_p-&gt;y, angles, reg, &amp;reg_size,\n01987                      &amp;reg_angle, used, prec );\n01988 \n01989         <span class=\"comment\">/* reject small regions */</span>\n01990         <span class=\"keywordflow\">if</span>( reg_size &lt; min_reg_size ) <span class=\"keywordflow\">continue</span>;\n01991 \n01992         <span class=\"comment\">/* construct rectangular approximation for the region */</span>\n01993         <a class=\"code\" href=\"lsd_8c.html#a46\">region2rect</a>(reg,reg_size,modgrad,reg_angle,prec,p,&amp;rec);\n01994 \n01995         <span class=\"comment\">/* Check if the rectangle exceeds the minimal density of</span>\n01996 <span class=\"comment\">           region points. If not, try to improve the region.</span>\n01997 <span class=\"comment\">           The rectangle will be rejected if the final one does</span>\n01998 <span class=\"comment\">           not fulfill the minimal density condition.</span>\n01999 <span class=\"comment\">           This is an addition to the original LSD algorithm published in</span>\n02000 <span class=\"comment\">           \"LSD: A Fast Line Segment Detector with a False Detection Control\"</span>\n02001 <span class=\"comment\">           by R. Grompone von Gioi, J. Jakubowicz, J.M. Morel, and G. Randall.</span>\n02002 <span class=\"comment\">           The original algorithm is obtained with density_th = 0.0.</span>\n02003 <span class=\"comment\">         */</span>\n02004         <span class=\"keywordflow\">if</span>( !<a class=\"code\" href=\"lsd_8c.html#a50\">refine</a>( reg, &amp;reg_size, modgrad, reg_angle,\n02005                      prec, p, &amp;rec, used, angles, density_th ) ) <span class=\"keywordflow\">continue</span>;\n02006 \n02007         <span class=\"comment\">/* compute NFA value */</span>\n02008         log_nfa = <a class=\"code\" href=\"lsd_8c.html#a48\">rect_improve</a>(&amp;rec,angles,logNT,eps);\n02009         <span class=\"keywordflow\">if</span>( log_nfa &lt;= eps ) <span class=\"keywordflow\">continue</span>;\n02010 \n02011         <span class=\"comment\">/* A New Line Segment was found! */</span>\n02012         ++ls_count;  <span class=\"comment\">/* increase line segment counter */</span>\n02013 \n02014         <span class=\"comment\">/*</span>\n02015 <span class=\"comment\">           The gradient was computed with a 2x2 mask, its value corresponds to</span>\n02016 <span class=\"comment\">           points with an offset of (0.5,0.5), that should be added to output.</span>\n02017 <span class=\"comment\">           The coordinates origin is at the center of pixel (0,0).</span>\n02018 <span class=\"comment\">         */</span>\n02019         rec.<a class=\"code\" href=\"structrect.html#o0\">x1</a> += 0.5; rec.<a class=\"code\" href=\"structrect.html#o1\">y1</a> += 0.5;\n02020         rec.<a class=\"code\" href=\"structrect.html#o2\">x2</a> += 0.5; rec.<a class=\"code\" href=\"structrect.html#o3\">y2</a> += 0.5;\n02021 \n02022         <span class=\"comment\">/* scale the result values if a subsampling was performed */</span>\n02023         <span class=\"keywordflow\">if</span>( scale != 1.0 )\n02024           {\n02025             rec.<a class=\"code\" href=\"structrect.html#o0\">x1</a> /= scale; rec.<a class=\"code\" href=\"structrect.html#o1\">y1</a> /= scale;\n02026             rec.<a class=\"code\" href=\"structrect.html#o2\">x2</a> /= scale; rec.<a class=\"code\" href=\"structrect.html#o3\">y2</a> /= scale;\n02027             rec.<a class=\"code\" href=\"structrect.html#o4\">width</a> /= scale;\n02028           }\n02029 \n02030         <span class=\"comment\">/* add line segment found to output */</span>\n02031         <a class=\"code\" href=\"lsd_8c.html#a18\">add_5tuple</a>(out, rec.<a class=\"code\" href=\"structrect.html#o0\">x1</a>, rec.<a class=\"code\" href=\"structrect.html#o1\">y1</a>, rec.<a class=\"code\" href=\"structrect.html#o2\">x2</a>, rec.<a class=\"code\" href=\"structrect.html#o3\">y2</a>, rec.<a class=\"code\" href=\"structrect.html#o4\">width</a>);\n02032 \n02033         <span class=\"comment\">/* add region number to 'region' image if needed */</span>\n02034         <span class=\"keywordflow\">if</span>( region != NULL )\n02035           <span class=\"keywordflow\">for</span>(i=0; i&lt;reg_size; i++)\n02036             (*region)-&gt;data[reg[i].x+reg[i].y*(*region)-&gt;xsize] = ls_count;\n02037       }\n02038 \n02039 \n02040   <span class=\"comment\">/* free memory */</span>\n02041   <a class=\"code\" href=\"lsd_8c.html#a25\">free_image_double</a>(angles);\n02042   <a class=\"code\" href=\"lsd_8c.html#a25\">free_image_double</a>(modgrad);\n02043   <a class=\"code\" href=\"lsd_8c.html#a19\">free_image_char</a>(used);\n02044   free( (<span class=\"keywordtype\">void</span> *) reg );\n02045   free( (<span class=\"keywordtype\">void</span> *) mem_p );\n02046 \n02047   <span class=\"keywordflow\">return</span> out;\n02048 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a51_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a51_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a51_cgraph_map\">\n<area href=\"lsd_8c.html#a18\" shape=\"rect\" coords=\"433,8,521,34\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"594,261,645,288\" alt=\"\">\n<area href=\"lsd_8c.html#a19\" shape=\"rect\" coords=\"415,109,538,136\" alt=\"\">\n<area href=\"lsd_8c.html#a25\" shape=\"rect\" coords=\"409,160,545,186\" alt=\"\">\n<area href=\"lsd_8c.html#a29\" shape=\"rect\" coords=\"221,210,351,237\" alt=\"\">\n<area href=\"lsd_8c.html#a16\" shape=\"rect\" coords=\"419,261,534,288\" alt=\"\">\n<area href=\"lsd_8c.html#a30\" shape=\"rect\" coords=\"253,312,319,338\" alt=\"\">\n<area href=\"lsd_8c.html#a21\" shape=\"rect\" coords=\"214,362,358,389\" alt=\"\">\n<area href=\"lsd_8c.html#a24\" shape=\"rect\" coords=\"219,413,353,440\" alt=\"\">\n<area href=\"lsd_8c.html#a48\" shape=\"rect\" coords=\"237,464,335,490\" alt=\"\">\n<area href=\"lsd_8c.html#a50\" shape=\"rect\" coords=\"258,565,314,592\" alt=\"\">\n<area href=\"lsd_8c.html#a46\" shape=\"rect\" coords=\"433,489,521,516\" alt=\"\">\n<area href=\"lsd_8c.html#a47\" shape=\"rect\" coords=\"430,590,523,617\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a30\" doxytag=\"lsd.c::ll_angle\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structimage__double__s.html\">image_double</a> ll_angle </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>in</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>threshold</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>struct <a class=\"el\" href=\"structcoorlist.html\">coorlist</a> **&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>list_p</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>void **&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>mem_p</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap><a class=\"el\" href=\"structimage__double__s.html\">image_double</a> *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>modgrad</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>n_bins</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>max_grad</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nComputes the direction of the level line of 'in' at each point. \n<p>\nThe result is:<ul>\n<li>an image_double with the angle at each pixel, or NOTDEF if not defined.</li><li>the image_double 'modgrad' (a pointer is passed as argument) with the gradient magnitude at each point.</li><li>a list of pixels 'list_p' roughly ordered by decreasing gradient magnitude. (The order is made by classifying points into bins by gradient magnitude. The parameters 'n_bins' and 'max_grad' specify the number of bins and the gradient modulus at the highest bin. The pixels in the list would be in decreasing gradient magnitude, up to a precision of the size of the bins.)</li><li>a pointer 'mem_p' to the memory used by 'list_p' to be able to free the memory when it is not used anymore. </li></ul>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00652\">652</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00122\">image_double_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00398\">new_image_double()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00097\">NOTDEF</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::xsize</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::ysize</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>.\n<p>\n<div class=\"fragment\"><pre>00656 {\n00657   <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> g;\n00658   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> n,p,x,y,adr,i;\n00659   <span class=\"keywordtype\">double</span> com1,com2,gx,gy,norm,norm2;\n00660   <span class=\"comment\">/* the rest of the variables are used for pseudo-ordering</span>\n00661 <span class=\"comment\">     the gradient magnitude values */</span>\n00662   <span class=\"keywordtype\">int</span> list_count = 0;\n00663   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> * list;\n00664   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> ** range_l_s; <span class=\"comment\">/* array of pointers to start of bin list */</span>\n00665   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> ** range_l_e; <span class=\"comment\">/* array of pointers to end of bin list */</span>\n00666   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> * start;\n00667   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> * end;\n00668 \n00669   <span class=\"comment\">/* check parameters */</span>\n00670   <span class=\"keywordflow\">if</span>( in == NULL || in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL || in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> == 0 || in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> == 0 )\n00671     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ll_angle: invalid image.\"</span>);\n00672   <span class=\"keywordflow\">if</span>( threshold &lt; 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ll_angle: 'threshold' must be positive.\"</span>);\n00673   <span class=\"keywordflow\">if</span>( list_p == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ll_angle: NULL pointer 'list_p'.\"</span>);\n00674   <span class=\"keywordflow\">if</span>( mem_p == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ll_angle: NULL pointer 'mem_p'.\"</span>);\n00675   <span class=\"keywordflow\">if</span>( modgrad == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ll_angle: NULL pointer 'modgrad'.\"</span>);\n00676   <span class=\"keywordflow\">if</span>( n_bins == 0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ll_angle: 'n_bins' must be positive.\"</span>);\n00677   <span class=\"keywordflow\">if</span>( max_grad &lt;= 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ll_angle: 'max_grad' must be positive.\"</span>);\n00678 \n00679   <span class=\"comment\">/* image size shortcuts */</span>\n00680   n = in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>;\n00681   p = in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>;\n00682 \n00683   <span class=\"comment\">/* allocate output image */</span>\n00684   g = <a class=\"code\" href=\"lsd_8c.html#a26\">new_image_double</a>(in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>,in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>);\n00685 \n00686   <span class=\"comment\">/* get memory for the image of gradient modulus */</span>\n00687   *modgrad = <a class=\"code\" href=\"lsd_8c.html#a26\">new_image_double</a>(in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>,in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>);\n00688 \n00689   <span class=\"comment\">/* get memory for \"ordered\" list of pixels */</span>\n00690   list = (<span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> *) calloc( (size_t) (n*p), <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structcoorlist.html\">coorlist</a>) );\n00691   *mem_p = (<span class=\"keywordtype\">void</span> *) list;\n00692   range_l_s = (<span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> **) calloc( (size_t) n_bins,\n00693                                            <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structcoorlist.html\">coorlist</a> *) );\n00694   range_l_e = (<span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> **) calloc( (size_t) n_bins,\n00695                                            <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structcoorlist.html\">coorlist</a> *) );\n00696   <span class=\"keywordflow\">if</span>( list == NULL || range_l_s == NULL || range_l_e == NULL )\n00697     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00698   <span class=\"keywordflow\">for</span>(i=0;i&lt;n_bins;i++) range_l_s[i] = range_l_e[i] = NULL;\n00699 \n00700   <span class=\"comment\">/* 'undefined' on the down and right boundaries */</span>\n00701   <span class=\"keywordflow\">for</span>(x=0;x&lt;p;x++) g-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[(n-1)*p+x] = <a class=\"code\" href=\"lsd_8c.html#a4\">NOTDEF</a>;\n00702   <span class=\"keywordflow\">for</span>(y=0;y&lt;n;y++) g-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[p*y+p-1]   = <a class=\"code\" href=\"lsd_8c.html#a4\">NOTDEF</a>;\n00703 \n00704   <span class=\"comment\">/* compute gradient on the remaining pixels */</span>\n00705   <span class=\"keywordflow\">for</span>(x=0;x&lt;p-1;x++)\n00706     <span class=\"keywordflow\">for</span>(y=0;y&lt;n-1;y++)\n00707       {\n00708         adr = y*p+x;\n00709 \n00710         <span class=\"comment\">/*</span>\n00711 <span class=\"comment\">           Norm 2 computation using 2x2 pixel window:</span>\n00712 <span class=\"comment\">             A B</span>\n00713 <span class=\"comment\">             C D</span>\n00714 <span class=\"comment\">           and</span>\n00715 <span class=\"comment\">             com1 = D-A,  com2 = B-C.</span>\n00716 <span class=\"comment\">           Then</span>\n00717 <span class=\"comment\">             gx = B+D - (A+C)   horizontal difference</span>\n00718 <span class=\"comment\">             gy = C+D - (A+B)   vertical difference</span>\n00719 <span class=\"comment\">           com1 and com2 are just to avoid 2 additions.</span>\n00720 <span class=\"comment\">         */</span>\n00721         com1 = in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[adr+p+1] - in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[adr];\n00722         com2 = in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[adr+1]   - in-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[adr+p];\n00723 \n00724         gx = com1+com2; <span class=\"comment\">/* gradient x component */</span>\n00725         gy = com1-com2; <span class=\"comment\">/* gradient y component */</span>\n00726         norm2 = gx*gx+gy*gy;\n00727         norm = sqrt( norm2 / 4.0 ); <span class=\"comment\">/* gradient norm */</span>\n00728 \n00729         (*modgrad)-&gt;data[adr] = norm; <span class=\"comment\">/* store gradient norm */</span>\n00730 \n00731         <span class=\"keywordflow\">if</span>( norm &lt;= threshold ) <span class=\"comment\">/* norm too small, gradient no defined */</span>\n00732           g-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[adr] = <a class=\"code\" href=\"lsd_8c.html#a4\">NOTDEF</a>; <span class=\"comment\">/* gradient angle not defined */</span>\n00733         <span class=\"keywordflow\">else</span>\n00734           {\n00735             <span class=\"comment\">/* gradient angle computation */</span>\n00736             g-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[adr] = atan2(gx,-gy);\n00737 \n00738             <span class=\"comment\">/* store the point in the right bin according to its norm */</span>\n00739             i = (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>) (norm * (<span class=\"keywordtype\">double</span>) n_bins / max_grad);\n00740             <span class=\"keywordflow\">if</span>( i &gt;= n_bins ) i = n_bins-1;\n00741             <span class=\"keywordflow\">if</span>( range_l_e[i] == NULL )\n00742               range_l_s[i] = range_l_e[i] = list+list_count++;\n00743             <span class=\"keywordflow\">else</span>\n00744               {\n00745                 range_l_e[i]-&gt;next = list+list_count;\n00746                 range_l_e[i] = list+list_count++;\n00747               }\n00748             range_l_e[i]-&gt;x = (<span class=\"keywordtype\">int</span>) x;\n00749             range_l_e[i]-&gt;y = (<span class=\"keywordtype\">int</span>) y;\n00750             range_l_e[i]-&gt;next = NULL;\n00751           }\n00752       }\n00753 \n00754   <span class=\"comment\">/* Make the list of pixels (almost) ordered by norm value.</span>\n00755 <span class=\"comment\">     It starts by the larger bin, so the list starts by the</span>\n00756 <span class=\"comment\">     pixels with higher gradient value. Pixels would be ordered</span>\n00757 <span class=\"comment\">     by norm value, up to a precision given by max_grad/n_bins.</span>\n00758 <span class=\"comment\">   */</span>\n00759   <span class=\"keywordflow\">for</span>(i=n_bins-1; i&gt;0 &amp;&amp; range_l_s[i]==NULL; i--);\n00760   start = range_l_s[i];\n00761   end = range_l_e[i];\n00762   <span class=\"keywordflow\">if</span>( start != NULL )\n00763     <span class=\"keywordflow\">for</span>(i--;i&gt;0; i--)\n00764       <span class=\"keywordflow\">if</span>( range_l_s[i] != NULL )\n00765         {\n00766           end-&gt;next = range_l_s[i];\n00767           end = range_l_e[i];\n00768         }\n00769   *list_p = start;\n00770 \n00771   <span class=\"comment\">/* free memory */</span>\n00772   free( (<span class=\"keywordtype\">void</span> *) range_l_s );\n00773   free( (<span class=\"keywordtype\">void</span> *) range_l_e );\n00774 \n00775   <span class=\"keywordflow\">return</span> g;\n00776 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a30_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a30_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a30_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"312,33,362,59\" alt=\"\">\n<area href=\"lsd_8c.html#a26\" shape=\"rect\" coords=\"126,58,262,85\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a34\" doxytag=\"lsd.c::log_gamma_lanczos\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double log_gamma_lanczos </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">double&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>x</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nComputes the natural logarithm of the absolute value of the gamma function of x using the Lanczos approximation. \n<p>\nSee <a href=\"http://www.rskey.org/gamma.htm\">http://www.rskey.org/gamma.htm</a><p>\nThe formula used is <p class=formulaDsp>\n<img class=formulaDsp alt=\"\\[ \\Gamma(x) = \\frac{ \\sum_{n=0}^{N} q_n x^n }{ \\Pi_{n=0}^{N} (x+n) } (x+5.5)^{x+0.5} e^{-(x+5.5)} \\]\" src=\"form_3.png\">\n<p>\n so <p class=formulaDsp>\n<img class=formulaDsp alt=\"\\[ \\log\\Gamma(x) = \\log\\left( \\sum_{n=0}^{N} q_n x^n \\right) + (x+0.5) \\log(x+5.5) - (x+5.5) - \\sum_{n=0}^{N} \\log(x+n) \\]\" src=\"form_4.png\">\n<p>\n and q0 = 75122.6331530, q1 = 80916.6278952, q2 = 36308.2951477, q3 = 8687.24529705, q4 = 1168.92649479, q5 = 83.8676043424, q6 = 2.50662827511. \n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00868\">868</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\n<div class=\"fragment\"><pre>00869 {\n00870   <span class=\"keyword\">static</span> <span class=\"keywordtype\">double</span> q[7] = { 75122.6331530, 80916.6278952, 36308.2951477,\n00871                          8687.24529705, 1168.92649479, 83.8676043424,\n00872                          2.50662827511 };\n00873   <span class=\"keywordtype\">double</span> a = (x+0.5) * log(x+5.5) - (x+5.5);\n00874   <span class=\"keywordtype\">double</span> b = 0.0;\n00875   <span class=\"keywordtype\">int</span> n;\n00876 \n00877   <span class=\"keywordflow\">for</span>(n=0;n&lt;7;n++)\n00878     {\n00879       a -= log( x + (<span class=\"keywordtype\">double</span>) n );\n00880       b += q[n] * pow( x, (<span class=\"keywordtype\">double</span>) n );\n00881     }\n00882   <span class=\"keywordflow\">return</span> a + log(b);\n00883 }\n</pre></div>    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a35\" doxytag=\"lsd.c::log_gamma_windschitl\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double log_gamma_windschitl </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">double&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>x</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nComputes the natural logarithm of the absolute value of the gamma function of x using Windschitl method. \n<p>\nSee <a href=\"http://www.rskey.org/gamma.htm\">http://www.rskey.org/gamma.htm</a><p>\nThe formula used is <p class=formulaDsp>\n<img class=formulaDsp alt=\"\\[ \\Gamma(x) = \\sqrt{\\frac{2\\pi}{x}} \\left( \\frac{x}{e} \\sqrt{ x\\sinh(1/x) + \\frac{1}{810x^6} } \\right)^x \\]\" src=\"form_5.png\">\n<p>\n so <p class=formulaDsp>\n<img class=formulaDsp alt=\"\\[ \\log\\Gamma(x) = 0.5\\log(2\\pi) + (x-0.5)\\log(x) - x + 0.5x\\log\\left( x\\sinh(1/x) + \\frac{1}{810x^6} \\right). \\]\" src=\"form_6.png\">\n<p>\n This formula is a good approximation when x &gt; 15. \n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00902\">902</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\n<div class=\"fragment\"><pre>00903 {\n00904   <span class=\"keywordflow\">return</span> 0.918938533204673 + (x-0.5)*log(x) - x\n00905          + 0.5*x*log( x*sinh(1/x) + 1/(810.0*pow(x,6.0)) );\n00906 }\n</pre></div>    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a53\" doxytag=\"lsd.c::lsd\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a> lsd </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>image</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nLSD Simple Interface. \n<p>\n<dl compact><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=top><em>image</em>&nbsp;</td><td>Input image.</td></tr>\n  </table>\n</dl>\n<dl compact><dt><b>Returns:</b></dt><dd>a 5-tuple list of detected line segments. </dd></dl>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l02077\">2077</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, <a class=\"el\" href=\"lsd_8c-source.html#l02053\">lsd_scale()</a>, and <a class=\"el\" href=\"lsd_8h.html#a0\">ntuple_list</a>.\n<p>\n<div class=\"fragment\"><pre>02078 {\n02079   <span class=\"comment\">/* LSD parameters */</span>\n02080   <span class=\"keywordtype\">double</span> scale = 0.8;       <span class=\"comment\">/* Scale the image by Gaussian filter to 'scale'. */</span>\n02081 \n02082   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a52\">lsd_scale</a>(image,scale);\n02083 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a53_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a53_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a53_cgraph_map\">\n<area href=\"lsd_8c.html#a52\" shape=\"rect\" coords=\"96,312,173,338\" alt=\"\">\n<area href=\"lsd_8c.html#a51\" shape=\"rect\" coords=\"221,312,378,338\" alt=\"\">\n<area href=\"lsd_8c.html#a18\" shape=\"rect\" coords=\"646,8,734,34\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"808,261,858,288\" alt=\"\">\n<area href=\"lsd_8c.html#a19\" shape=\"rect\" coords=\"629,109,752,136\" alt=\"\">\n<area href=\"lsd_8c.html#a25\" shape=\"rect\" coords=\"622,160,758,186\" alt=\"\">\n<area href=\"lsd_8c.html#a29\" shape=\"rect\" coords=\"434,210,565,237\" alt=\"\">\n<area href=\"lsd_8c.html#a16\" shape=\"rect\" coords=\"633,261,748,288\" alt=\"\">\n<area href=\"lsd_8c.html#a30\" shape=\"rect\" coords=\"466,312,533,338\" alt=\"\">\n<area href=\"lsd_8c.html#a21\" shape=\"rect\" coords=\"428,362,572,389\" alt=\"\">\n<area href=\"lsd_8c.html#a24\" shape=\"rect\" coords=\"433,413,566,440\" alt=\"\">\n<area href=\"lsd_8c.html#a48\" shape=\"rect\" coords=\"450,464,549,490\" alt=\"\">\n<area href=\"lsd_8c.html#a50\" shape=\"rect\" coords=\"472,565,528,592\" alt=\"\">\n<area href=\"lsd_8c.html#a46\" shape=\"rect\" coords=\"646,489,734,516\" alt=\"\">\n<area href=\"lsd_8c.html#a47\" shape=\"rect\" coords=\"644,590,737,617\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a52\" doxytag=\"lsd.c::lsd_scale\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a> lsd_scale </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>image</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>scale</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nLSD Simple Interface with Scale. \n<p>\n<dl compact><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=top><em>image</em>&nbsp;</td><td>Input image.</td></tr>\n    <tr><td valign=top><em>scale</em>&nbsp;</td><td>When different than 1.0, LSD will scale the image by Gaussian filtering. Example: is scale=0.8, the input image will be subsampled to 80% of its size, and then the line segment detector will be applied. Suggested value: 0.8</td></tr>\n  </table>\n</dl>\n<dl compact><dt><b>Returns:</b></dt><dd>a 5-tuple list of detected line segments. </dd></dl>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l02053\">2053</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, and <a class=\"el\" href=\"lsd_8h.html#a0\">ntuple_list</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l02077\">lsd()</a>.\n<p>\n<div class=\"fragment\"><pre>02054 {\n02055   <span class=\"comment\">/* LSD parameters */</span>\n02056   <span class=\"keywordtype\">double</span> sigma_scale = 0.6; <span class=\"comment\">/* Sigma for Gaussian filter is computed as</span>\n02057 <span class=\"comment\">                                sigma = sigma_scale/scale.                    */</span>\n02058   <span class=\"keywordtype\">double</span> quant = 2.0;       <span class=\"comment\">/* Bound to the quantization error on the</span>\n02059 <span class=\"comment\">                                gradient norm.                                */</span>\n02060   <span class=\"keywordtype\">double</span> ang_th = 22.5;     <span class=\"comment\">/* Gradient angle tolerance in degrees.           */</span>\n02061   <span class=\"keywordtype\">double</span> eps = 0.0;         <span class=\"comment\">/* Detection threshold, -log10(NFA).              */</span>\n02062   <span class=\"keywordtype\">double</span> density_th = 0.7;  <span class=\"comment\">/* Minimal density of region points in rectangle. */</span>\n02063   <span class=\"keywordtype\">int</span> n_bins = 1024;        <span class=\"comment\">/* Number of bins in pseudo-ordering of gradient</span>\n02064 <span class=\"comment\">                               modulus.                                       */</span>\n02065   <span class=\"keywordtype\">double</span> max_grad = 255.0;  <span class=\"comment\">/* Gradient modulus in the highest bin. The</span>\n02066 <span class=\"comment\">                               default value corresponds to the highest</span>\n02067 <span class=\"comment\">                               gradient modulus on images with gray</span>\n02068 <span class=\"comment\">                               levels in [0,255].                             */</span>\n02069 \n02070   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a51\">LineSegmentDetection</a>( image, scale, sigma_scale, quant, ang_th, eps,\n02071                                density_th, n_bins, max_grad, NULL );\n02072 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a52_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a52_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a52_cgraph_map\">\n<area href=\"lsd_8c.html#a51\" shape=\"rect\" coords=\"133,312,290,338\" alt=\"\">\n<area href=\"lsd_8c.html#a18\" shape=\"rect\" coords=\"558,8,646,34\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"720,261,770,288\" alt=\"\">\n<area href=\"lsd_8c.html#a19\" shape=\"rect\" coords=\"541,109,664,136\" alt=\"\">\n<area href=\"lsd_8c.html#a25\" shape=\"rect\" coords=\"534,160,670,186\" alt=\"\">\n<area href=\"lsd_8c.html#a29\" shape=\"rect\" coords=\"346,210,477,237\" alt=\"\">\n<area href=\"lsd_8c.html#a16\" shape=\"rect\" coords=\"545,261,660,288\" alt=\"\">\n<area href=\"lsd_8c.html#a30\" shape=\"rect\" coords=\"378,312,445,338\" alt=\"\">\n<area href=\"lsd_8c.html#a21\" shape=\"rect\" coords=\"340,362,484,389\" alt=\"\">\n<area href=\"lsd_8c.html#a24\" shape=\"rect\" coords=\"345,413,478,440\" alt=\"\">\n<area href=\"lsd_8c.html#a48\" shape=\"rect\" coords=\"362,464,461,490\" alt=\"\">\n<area href=\"lsd_8c.html#a50\" shape=\"rect\" coords=\"384,565,440,592\" alt=\"\">\n<area href=\"lsd_8c.html#a46\" shape=\"rect\" coords=\"558,489,646,516\" alt=\"\">\n<area href=\"lsd_8c.html#a47\" shape=\"rect\" coords=\"556,590,649,617\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a20\" doxytag=\"lsd.c::new_image_char\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structimage__char__s.html\">image_char</a> new_image_char </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>xsize</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>ysize</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCreate a new image_char of size 'xsize' times 'ysize'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00291\">291</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00082\">image_char_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h.html#a1\">image_char</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00083\">image_char_s::xsize</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00083\">image_char_s::ysize</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00316\">new_image_char_ini()</a>.\n<p>\n<div class=\"fragment\"><pre>00292 {\n00293   <a class=\"code\" href=\"structimage__char__s.html\">image_char</a> image;\n00294 \n00295   <span class=\"comment\">/* check parameters */</span>\n00296   <span class=\"keywordflow\">if</span>( xsize == 0 || ysize == 0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"new_image_char: invalid image size.\"</span>);\n00297 \n00298   <span class=\"comment\">/* get memory */</span>\n00299   image = (<a class=\"code\" href=\"structimage__char__s.html\">image_char</a>) malloc( <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structimage__char__s.html\">image_char_s</a>) );\n00300   <span class=\"keywordflow\">if</span>( image == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00301   image-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> = (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span> *) calloc( (size_t) (xsize*ysize),\n00302                                           <span class=\"keyword\">sizeof</span>(<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span>) );\n00303   <span class=\"keywordflow\">if</span>( image-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00304 \n00305   <span class=\"comment\">/* set image size */</span>\n00306   image-&gt;<a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a> = xsize;\n00307   image-&gt;<a class=\"code\" href=\"structimage__char__s.html#o2\">ysize</a> = ysize;\n00308 \n00309   <span class=\"keywordflow\">return</span> image;\n00310 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a20_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a20_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a20_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"181,8,232,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a21\" doxytag=\"lsd.c::new_image_char_ini\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structimage__char__s.html\">image_char</a> new_image_char_ini </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>xsize</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>ysize</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>unsigned char&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>fill_value</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCreate a new image_char of size 'xsize' times 'ysize', initialized to the value 'fill_value'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00316\">316</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00082\">image_char_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h.html#a1\">image_char</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00291\">new_image_char()</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>.\n<p>\n<div class=\"fragment\"><pre>00318 {\n00319   <a class=\"code\" href=\"structimage__char__s.html\">image_char</a> image = <a class=\"code\" href=\"lsd_8c.html#a20\">new_image_char</a>(xsize,ysize); <span class=\"comment\">/* create image */</span>\n00320   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> N = xsize*ysize;\n00321   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> i;\n00322 \n00323   <span class=\"comment\">/* check parameters */</span>\n00324   <span class=\"keywordflow\">if</span>( image == NULL || image-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> == NULL )\n00325     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"new_image_char_ini: invalid image.\"</span>);\n00326 \n00327   <span class=\"comment\">/* initialize */</span>\n00328   <span class=\"keywordflow\">for</span>(i=0; i&lt;N; i++) image-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a>[i] = fill_value;\n00329 \n00330   <span class=\"keywordflow\">return</span> image;\n00331 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a21_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a21_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a21_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"376,33,426,59\" alt=\"\">\n<area href=\"lsd_8c.html#a20\" shape=\"rect\" coords=\"204,58,326,85\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a26\" doxytag=\"lsd.c::new_image_double\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structimage__double__s.html\">image_double</a> new_image_double </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>xsize</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>ysize</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCreate a new image_double of size 'xsize' times 'ysize'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00398\">398</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00122\">image_double_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::xsize</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::ysize</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00652\">ll_angle()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00422\">new_image_double_ini()</a>.\n<p>\n<div class=\"fragment\"><pre>00399 {\n00400   <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> image;\n00401 \n00402   <span class=\"comment\">/* check parameters */</span>\n00403   <span class=\"keywordflow\">if</span>( xsize == 0 || ysize == 0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"new_image_double: invalid image size.\"</span>);\n00404 \n00405   <span class=\"comment\">/* get memory */</span>\n00406   image = (<a class=\"code\" href=\"structimage__double__s.html\">image_double</a>) malloc( <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structimage__double__s.html\">image_double_s</a>) );\n00407   <span class=\"keywordflow\">if</span>( image == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00408   image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> = (<span class=\"keywordtype\">double</span> *) calloc( (size_t) (xsize*ysize), <span class=\"keyword\">sizeof</span>(<span class=\"keywordtype\">double</span>) );\n00409   <span class=\"keywordflow\">if</span>( image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00410 \n00411   <span class=\"comment\">/* set image size */</span>\n00412   image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> = xsize;\n00413   image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> = ysize;\n00414 \n00415   <span class=\"keywordflow\">return</span> image;\n00416 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a26_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a26_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a26_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"194,8,245,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a27\" doxytag=\"lsd.c::new_image_double_ini\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structimage__double__s.html\">image_double</a> new_image_double_ini </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>xsize</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>ysize</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>fill_value</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCreate a new image_double of size 'xsize' times 'ysize', initialized to the value 'fill_value'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00422\">422</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00122\">image_double_s::data</a>, <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00398\">new_image_double()</a>.\n<p>\n<div class=\"fragment\"><pre>00424 {\n00425   <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> image = <a class=\"code\" href=\"lsd_8c.html#a26\">new_image_double</a>(xsize,ysize); <span class=\"comment\">/* create image */</span>\n00426   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> N = xsize*ysize;\n00427   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> i;\n00428 \n00429   <span class=\"comment\">/* initialize */</span>\n00430   <span class=\"keywordflow\">for</span>(i=0; i&lt;N; i++) image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[i] = fill_value;\n00431 \n00432   <span class=\"keywordflow\">return</span> image;\n00433 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a27_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a27_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a27_cgraph_map\">\n<area href=\"lsd_8c.html#a26\" shape=\"rect\" coords=\"217,8,353,34\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"402,8,453,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a23\" doxytag=\"lsd.c::new_image_int\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structimage__int__s.html\">image_int</a> new_image_int </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>xsize</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>ysize</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCreate a new image_int of size 'xsize' times 'ysize'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00347\">347</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00102\">image_int_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h.html#a2\">image_int</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00103\">image_int_s::xsize</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00103\">image_int_s::ysize</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00371\">new_image_int_ini()</a>.\n<p>\n<div class=\"fragment\"><pre>00348 {\n00349   <a class=\"code\" href=\"structimage__int__s.html\">image_int</a> image;\n00350 \n00351   <span class=\"comment\">/* check parameters */</span>\n00352   <span class=\"keywordflow\">if</span>( xsize == 0 || ysize == 0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"new_image_int: invalid image size.\"</span>);\n00353 \n00354   <span class=\"comment\">/* get memory */</span>\n00355   image = (<a class=\"code\" href=\"structimage__int__s.html\">image_int</a>) malloc( <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structimage__int__s.html\">image_int_s</a>) );\n00356   <span class=\"keywordflow\">if</span>( image == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00357   image-&gt;<a class=\"code\" href=\"structimage__int__s.html#o0\">data</a> = (<span class=\"keywordtype\">int</span> *) calloc( (size_t) (xsize*ysize), <span class=\"keyword\">sizeof</span>(<span class=\"keywordtype\">int</span>) );\n00358   <span class=\"keywordflow\">if</span>( image-&gt;<a class=\"code\" href=\"structimage__int__s.html#o0\">data</a> == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00359 \n00360   <span class=\"comment\">/* set image size */</span>\n00361   image-&gt;<a class=\"code\" href=\"structimage__int__s.html#o1\">xsize</a> = xsize;\n00362   image-&gt;<a class=\"code\" href=\"structimage__int__s.html#o2\">ysize</a> = ysize;\n00363 \n00364   <span class=\"keywordflow\">return</span> image;\n00365 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a23_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a23_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a23_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"168,8,218,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a24\" doxytag=\"lsd.c::new_image_int_ini\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structimage__int__s.html\">image_int</a> new_image_int_ini </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>xsize</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>ysize</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>fill_value</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCreate a new image_int of size 'xsize' times 'ysize', initialized to the value 'fill_value'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00371\">371</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00102\">image_int_s::data</a>, <a class=\"el\" href=\"lsd_8h.html#a2\">image_int</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00347\">new_image_int()</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>.\n<p>\n<div class=\"fragment\"><pre>00373 {\n00374   <a class=\"code\" href=\"structimage__int__s.html\">image_int</a> image = <a class=\"code\" href=\"lsd_8c.html#a23\">new_image_int</a>(xsize,ysize); <span class=\"comment\">/* create image */</span>\n00375   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> N = xsize*ysize;\n00376   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> i;\n00377 \n00378   <span class=\"comment\">/* initialize */</span>\n00379   <span class=\"keywordflow\">for</span>(i=0; i&lt;N; i++) image-&gt;<a class=\"code\" href=\"structimage__int__s.html#o0\">data</a>[i] = fill_value;\n00380 \n00381   <span class=\"keywordflow\">return</span> image;\n00382 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a24_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a24_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a24_cgraph_map\">\n<area href=\"lsd_8c.html#a23\" shape=\"rect\" coords=\"189,8,301,34\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"349,8,400,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a16\" doxytag=\"lsd.c::new_ntuple_list\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a> new_ntuple_list </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">unsigned int&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>dim</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCreate an n-tuple list and allocate memory for one element. \n<p>\n<dl compact><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=top><em>dim</em>&nbsp;</td><td>the dimension (n) of the n-tuple. </td></tr>\n  </table>\n</dl>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00206\">206</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00059\">ntuple_list_s::dim</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00058\">ntuple_list_s::max_size</a>, <a class=\"el\" href=\"lsd_8h.html#a0\">ntuple_list</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00057\">ntuple_list_s::size</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00060\">ntuple_list_s::values</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>.\n<p>\n<div class=\"fragment\"><pre>00207 {\n00208   <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> n_tuple;\n00209 \n00210   <span class=\"comment\">/* check parameters */</span>\n00211   <span class=\"keywordflow\">if</span>( dim == 0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"new_ntuple_list: 'dim' must be positive.\"</span>);\n00212 \n00213   <span class=\"comment\">/* get memory for list structure */</span>\n00214   n_tuple = (<a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a>) malloc( <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list_s</a>) );\n00215   <span class=\"keywordflow\">if</span>( n_tuple == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00216 \n00217   <span class=\"comment\">/* initialize list */</span>\n00218   n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a> = 0;\n00219   n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o1\">max_size</a> = 1;\n00220   n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a> = dim;\n00221 \n00222   <span class=\"comment\">/* get memory for tuples */</span>\n00223   n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> = (<span class=\"keywordtype\">double</span> *) malloc( dim*n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o1\">max_size</a> * <span class=\"keyword\">sizeof</span>(<span class=\"keywordtype\">double</span>) );\n00224   <span class=\"keywordflow\">if</span>( n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00225 \n00226   <span class=\"keywordflow\">return</span> n_tuple;\n00227 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a16_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a16_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a16_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"170,8,221,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a36\" doxytag=\"lsd.c::nfa\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double nfa </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>n</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>k</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>p</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>logNT</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nComputes -log10(NFA). \n<p>\nNFA stands for Number of False Alarms: <p class=formulaDsp>\n<img class=formulaDsp alt=\"\\[ \\mathrm{NFA} = NT \\cdot B(n,k,p) \\]\" src=\"form_7.png\">\n<p>\n<p>\n<ul>\n<li>NT - number of tests</li><li>B(n,k,p) - tail of binomial distribution with parameters n,k and p: <p class=formulaDsp>\n<img class=formulaDsp alt=\"\\[ B(n,k,p) = \\sum_{j=k}^n \\left(\\begin{array}{c}n\\\\j\\end{array}\\right) p^{j} (1-p)^{n-j} \\]\" src=\"form_8.png\">\n<p>\n</li></ul>\n<p>\nThe value -log10(NFA) is equivalent but more intuitive than NFA:<ul>\n<li>-1 corresponds to 10 mean false alarms</li><li>0 corresponds to 1 mean false alarm</li><li>1 corresponds to 0.1 mean false alarms</li><li>2 corresponds to 0.01 mean false alarms</li><li>...</li></ul>\n<p>\nUsed this way, the bigger the value, better the detection, and a logarithmic scale is used.<p>\n<dl compact><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=top><em>n,k,p</em>&nbsp;</td><td>binomial parameters. </td></tr>\n    <tr><td valign=top><em>logNT</em>&nbsp;</td><td>logarithm of Number of Tests</td></tr>\n  </table>\n</dl>\nThe computation is based in the gamma function by the following relation: <p class=formulaDsp>\n<img class=formulaDsp alt=\"\\[ \\left(\\begin{array}{c}n\\\\k\\end{array}\\right) = \\frac{ \\Gamma(n+1) }{ \\Gamma(k+1) \\cdot \\Gamma(n-k+1) }. \\]\" src=\"form_9.png\">\n<p>\n We use efficient algorithms to compute the logarithm of the gamma function.<p>\nTo make the computation faster, not all the sum is computed, part of the terms are neglected based on a bound to the error obtained (an error of 10% in the result is accepted). \n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00962\">962</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l00155\">double_equal()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00913\">log_gamma</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00080\">M_LN10</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00918\">TABSIZE</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01370\">rect_nfa()</a>.\n<p>\n<div class=\"fragment\"><pre>00963 {\n00964   <span class=\"keyword\">static</span> <span class=\"keywordtype\">double</span> inv[<a class=\"code\" href=\"lsd_8c.html#a11\">TABSIZE</a>];   <span class=\"comment\">/* table to keep computed inverse values */</span>\n00965   <span class=\"keywordtype\">double</span> tolerance = 0.1;       <span class=\"comment\">/* an error of 10% in the result is accepted */</span>\n00966   <span class=\"keywordtype\">double</span> log1term,term,bin_term,mult_term,bin_tail,err,p_term;\n00967   <span class=\"keywordtype\">int</span> i;\n00968 \n00969   <span class=\"comment\">/* check parameters */</span>\n00970   <span class=\"keywordflow\">if</span>( n&lt;0 || k&lt;0 || k&gt;n || p&lt;=0.0 || p&gt;=1.0 )\n00971     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"nfa: wrong n, k or p values.\"</span>);\n00972 \n00973   <span class=\"comment\">/* trivial cases */</span>\n00974   <span class=\"keywordflow\">if</span>( n==0 || k==0 ) <span class=\"keywordflow\">return</span> -logNT;\n00975   <span class=\"keywordflow\">if</span>( n==k ) <span class=\"keywordflow\">return</span> -logNT - (<span class=\"keywordtype\">double</span>) n * log10(p);\n00976 \n00977   <span class=\"comment\">/* probability term */</span>\n00978   p_term = p / (1.0-p);\n00979 \n00980   <span class=\"comment\">/* compute the first term of the series */</span>\n00981   <span class=\"comment\">/*</span>\n00982 <span class=\"comment\">     binomial_tail(n,k,p) = sum_{i=k}^n bincoef(n,i) * p^i * (1-p)^{n-i}</span>\n00983 <span class=\"comment\">     where bincoef(n,i) are the binomial coefficients.</span>\n00984 <span class=\"comment\">     But</span>\n00985 <span class=\"comment\">       bincoef(n,k) = gamma(n+1) / ( gamma(k+1) * gamma(n-k+1) ).</span>\n00986 <span class=\"comment\">     We use this to compute the first term. Actually the log of it.</span>\n00987 <span class=\"comment\">   */</span>\n00988   log1term = <a class=\"code\" href=\"lsd_8c.html#a10\">log_gamma</a>( (<span class=\"keywordtype\">double</span>) n + 1.0 ) - <a class=\"code\" href=\"lsd_8c.html#a10\">log_gamma</a>( (<span class=\"keywordtype\">double</span>) k + 1.0 )\n00989            - <a class=\"code\" href=\"lsd_8c.html#a10\">log_gamma</a>( (<span class=\"keywordtype\">double</span>) (n-k) + 1.0 )\n00990            + (<span class=\"keywordtype\">double</span>) k * log(p) + (<span class=\"keywordtype\">double</span>) (n-k) * log(1.0-p);\n00991   term = exp(log1term);\n00992 \n00993   <span class=\"comment\">/* in some cases no more computations are needed */</span>\n00994   <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a13\">double_equal</a>(term,0.0) )              <span class=\"comment\">/* the first term is almost zero */</span>\n00995     {\n00996       <span class=\"keywordflow\">if</span>( (<span class=\"keywordtype\">double</span>) k &gt; (<span class=\"keywordtype\">double</span>) n * p )     <span class=\"comment\">/* at begin or end of the tail?  */</span>\n00997         <span class=\"keywordflow\">return</span> -log1term / <a class=\"code\" href=\"lsd_8c.html#a0\">M_LN10</a> - logNT;  <span class=\"comment\">/* end: use just the first term  */</span>\n00998       <span class=\"keywordflow\">else</span>\n00999         <span class=\"keywordflow\">return</span> -logNT;                      <span class=\"comment\">/* begin: the tail is roughly 1  */</span>\n01000     }\n01001 \n01002   <span class=\"comment\">/* compute more terms if needed */</span>\n01003   bin_tail = term;\n01004   <span class=\"keywordflow\">for</span>(i=k+1;i&lt;=n;i++)\n01005     {\n01006       <span class=\"comment\">/*</span>\n01007 <span class=\"comment\">         As</span>\n01008 <span class=\"comment\">           term_i = bincoef(n,i) * p^i * (1-p)^(n-i)</span>\n01009 <span class=\"comment\">         and</span>\n01010 <span class=\"comment\">           bincoef(n,i)/bincoef(n,i-1) = n-1+1 / i,</span>\n01011 <span class=\"comment\">         then,</span>\n01012 <span class=\"comment\">           term_i / term_i-1 = (n-i+1)/i * p/(1-p)</span>\n01013 <span class=\"comment\">         and</span>\n01014 <span class=\"comment\">           term_i = term_i-1 * (n-i+1)/i * p/(1-p).</span>\n01015 <span class=\"comment\">         1/i is stored in a table as they are computed,</span>\n01016 <span class=\"comment\">         because divisions are expensive.</span>\n01017 <span class=\"comment\">         p/(1-p) is computed only once and stored in 'p_term'.</span>\n01018 <span class=\"comment\">       */</span>\n01019       bin_term = (<span class=\"keywordtype\">double</span>) (n-i+1) * ( i&lt;<a class=\"code\" href=\"lsd_8c.html#a11\">TABSIZE</a> ?\n01020                    ( inv[i]!=0.0 ? inv[i] : ( inv[i] = 1.0 / (<span class=\"keywordtype\">double</span>) i ) ) :\n01021                    1.0 / (<span class=\"keywordtype\">double</span>) i );\n01022 \n01023       mult_term = bin_term * p_term;\n01024       term *= mult_term;\n01025       bin_tail += term;\n01026       <span class=\"keywordflow\">if</span>(bin_term&lt;1.0)\n01027         {\n01028           <span class=\"comment\">/* When bin_term&lt;1 then mult_term_j&lt;mult_term_i for j&gt;i.</span>\n01029 <span class=\"comment\">             Then, the error on the binomial tail when truncated at</span>\n01030 <span class=\"comment\">             the i term can be bounded by a geometric series of form</span>\n01031 <span class=\"comment\">             term_i * sum mult_term_i^j.                            */</span>\n01032           err = term * ( ( 1.0 - pow( mult_term, (<span class=\"keywordtype\">double</span>) (n-i+1) ) ) /\n01033                          (1.0-mult_term) - 1.0 );\n01034 \n01035           <span class=\"comment\">/* One wants an error at most of tolerance*final_result, or:</span>\n01036 <span class=\"comment\">             tolerance * abs(-log10(bin_tail)-logNT).</span>\n01037 <span class=\"comment\">             Now, the error that can be accepted on bin_tail is</span>\n01038 <span class=\"comment\">             given by tolerance*final_result divided by the derivative</span>\n01039 <span class=\"comment\">             of -log10(x) when x=bin_tail. that is:</span>\n01040 <span class=\"comment\">             tolerance * abs(-log10(bin_tail)-logNT) / (1/bin_tail)</span>\n01041 <span class=\"comment\">             Finally, we truncate the tail if the error is less than:</span>\n01042 <span class=\"comment\">             tolerance * abs(-log10(bin_tail)-logNT) * bin_tail        */</span>\n01043           <span class=\"keywordflow\">if</span>( err &lt; tolerance * fabs(-log10(bin_tail)-logNT) * bin_tail ) <span class=\"keywordflow\">break</span>;\n01044         }\n01045     }\n01046   <span class=\"keywordflow\">return</span> -log10(bin_tail) - logNT;\n01047 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a36_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a36_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a36_cgraph_map\">\n<area href=\"lsd_8c.html#a13\" shape=\"rect\" coords=\"100,7,201,34\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"125,58,176,85\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a37\" doxytag=\"lsd.c::rect_copy\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> void rect_copy </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">struct <a class=\"el\" href=\"structrect.html\">rect</a> *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>in</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>struct <a class=\"el\" href=\"structrect.html\">rect</a> *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>out</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCopy one rectangle structure to another. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01071\">1071</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l01063\">rect::dx</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01063\">rect::dy</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01065\">rect::p</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01064\">rect::prec</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01062\">rect::theta</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01060\">rect::width</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01061\">rect::x</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::x1</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::x2</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01061\">rect::y</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::y1</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::y2</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01644\">rect_improve()</a>.\n<p>\n<div class=\"fragment\"><pre>01072 {\n01073   <span class=\"comment\">/* check parameters */</span>\n01074   <span class=\"keywordflow\">if</span>( in == NULL || out == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"rect_copy: invalid 'in' or 'out'.\"</span>);\n01075 \n01076   <span class=\"comment\">/* copy values */</span>\n01077   out-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a>;\n01078   out-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a>;\n01079   out-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a>;\n01080   out-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a>;\n01081   out-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a>;\n01082   out-&gt;<a class=\"code\" href=\"structrect.html#o5\">x</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o5\">x</a>;\n01083   out-&gt;<a class=\"code\" href=\"structrect.html#o6\">y</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o6\">y</a>;\n01084   out-&gt;<a class=\"code\" href=\"structrect.html#o7\">theta</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o7\">theta</a>;\n01085   out-&gt;<a class=\"code\" href=\"structrect.html#o8\">dx</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o8\">dx</a>;\n01086   out-&gt;<a class=\"code\" href=\"structrect.html#o9\">dy</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o9\">dy</a>;\n01087   out-&gt;<a class=\"code\" href=\"structrect.html#o10\">prec</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o10\">prec</a>;\n01088   out-&gt;<a class=\"code\" href=\"structrect.html#o11\">p</a> = in-&gt;<a class=\"code\" href=\"structrect.html#o11\">p</a>;\n01089 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a37_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a37_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a37_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"136,8,186,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a48\" doxytag=\"lsd.c::rect_improve\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double rect_improve </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">struct <a class=\"el\" href=\"structrect.html\">rect</a> *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>rec</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>angles</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>logNT</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>eps</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nTry some rectangles variations to improve NFA value. \n<p>\nOnly if the rectangle is not meaningful (i.e., log_nfa &lt;= eps). \n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01644\">1644</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l01063\">rect::dx</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01063\">rect::dy</a>, <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00085\">M_PI</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01065\">rect::p</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01064\">rect::prec</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01071\">rect_copy()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01370\">rect_nfa()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01060\">rect::width</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::x1</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::x2</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::y1</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::y2</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>.\n<p>\n<div class=\"fragment\"><pre>01646 {\n01647   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structrect.html\">rect</a> r;\n01648   <span class=\"keywordtype\">double</span> log_nfa,log_nfa_new;\n01649   <span class=\"keywordtype\">double</span> delta = 0.5;\n01650   <span class=\"keywordtype\">double</span> delta_2 = delta / 2.0;\n01651   <span class=\"keywordtype\">int</span> n;\n01652 \n01653   log_nfa = <a class=\"code\" href=\"lsd_8c.html#a44\">rect_nfa</a>(rec,angles,logNT);\n01654 \n01655   <span class=\"keywordflow\">if</span>( log_nfa &gt; eps ) <span class=\"keywordflow\">return</span> log_nfa;\n01656 \n01657   <span class=\"comment\">/* try finer precisions */</span>\n01658   <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(rec,&amp;r);\n01659   <span class=\"keywordflow\">for</span>(n=0; n&lt;5; n++)\n01660     {\n01661       r.<a class=\"code\" href=\"structrect.html#o11\">p</a> /= 2.0;\n01662       r.<a class=\"code\" href=\"structrect.html#o10\">prec</a> = r.<a class=\"code\" href=\"structrect.html#o11\">p</a> * <a class=\"code\" href=\"lsd_8c.html#a1\">M_PI</a>;\n01663       log_nfa_new = <a class=\"code\" href=\"lsd_8c.html#a44\">rect_nfa</a>(&amp;r,angles,logNT);\n01664       <span class=\"keywordflow\">if</span>( log_nfa_new &gt; log_nfa )\n01665         {\n01666           log_nfa = log_nfa_new;\n01667           <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(&amp;r,rec);\n01668         }\n01669     }\n01670 \n01671   <span class=\"keywordflow\">if</span>( log_nfa &gt; eps ) <span class=\"keywordflow\">return</span> log_nfa;\n01672 \n01673   <span class=\"comment\">/* try to reduce width */</span>\n01674   <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(rec,&amp;r);\n01675   <span class=\"keywordflow\">for</span>(n=0; n&lt;5; n++)\n01676     {\n01677       <span class=\"keywordflow\">if</span>( (r.<a class=\"code\" href=\"structrect.html#o4\">width</a> - delta) &gt;= 0.5 )\n01678         {\n01679           r.<a class=\"code\" href=\"structrect.html#o4\">width</a> -= delta;\n01680           log_nfa_new = <a class=\"code\" href=\"lsd_8c.html#a44\">rect_nfa</a>(&amp;r,angles,logNT);\n01681           <span class=\"keywordflow\">if</span>( log_nfa_new &gt; log_nfa )\n01682             {\n01683               <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(&amp;r,rec);\n01684               log_nfa = log_nfa_new;\n01685             }\n01686         }\n01687     }\n01688 \n01689   <span class=\"keywordflow\">if</span>( log_nfa &gt; eps ) <span class=\"keywordflow\">return</span> log_nfa;\n01690 \n01691   <span class=\"comment\">/* try to reduce one side of the rectangle */</span>\n01692   <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(rec,&amp;r);\n01693   <span class=\"keywordflow\">for</span>(n=0; n&lt;5; n++)\n01694     {\n01695       <span class=\"keywordflow\">if</span>( (r.<a class=\"code\" href=\"structrect.html#o4\">width</a> - delta) &gt;= 0.5 )\n01696         {\n01697           r.<a class=\"code\" href=\"structrect.html#o0\">x1</a> += -r.<a class=\"code\" href=\"structrect.html#o9\">dy</a> * delta_2;\n01698           r.<a class=\"code\" href=\"structrect.html#o1\">y1</a> +=  r.<a class=\"code\" href=\"structrect.html#o8\">dx</a> * delta_2;\n01699           r.<a class=\"code\" href=\"structrect.html#o2\">x2</a> += -r.<a class=\"code\" href=\"structrect.html#o9\">dy</a> * delta_2;\n01700           r.<a class=\"code\" href=\"structrect.html#o3\">y2</a> +=  r.<a class=\"code\" href=\"structrect.html#o8\">dx</a> * delta_2;\n01701           r.<a class=\"code\" href=\"structrect.html#o4\">width</a> -= delta;\n01702           log_nfa_new = <a class=\"code\" href=\"lsd_8c.html#a44\">rect_nfa</a>(&amp;r,angles,logNT);\n01703           <span class=\"keywordflow\">if</span>( log_nfa_new &gt; log_nfa )\n01704             {\n01705               <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(&amp;r,rec);\n01706               log_nfa = log_nfa_new;\n01707             }\n01708         }\n01709     }\n01710 \n01711   <span class=\"keywordflow\">if</span>( log_nfa &gt; eps ) <span class=\"keywordflow\">return</span> log_nfa;\n01712 \n01713   <span class=\"comment\">/* try to reduce the other side of the rectangle */</span>\n01714   <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(rec,&amp;r);\n01715   <span class=\"keywordflow\">for</span>(n=0; n&lt;5; n++)\n01716     {\n01717       <span class=\"keywordflow\">if</span>( (r.<a class=\"code\" href=\"structrect.html#o4\">width</a> - delta) &gt;= 0.5 )\n01718         {\n01719           r.<a class=\"code\" href=\"structrect.html#o0\">x1</a> -= -r.<a class=\"code\" href=\"structrect.html#o9\">dy</a> * delta_2;\n01720           r.<a class=\"code\" href=\"structrect.html#o1\">y1</a> -=  r.<a class=\"code\" href=\"structrect.html#o8\">dx</a> * delta_2;\n01721           r.<a class=\"code\" href=\"structrect.html#o2\">x2</a> -= -r.<a class=\"code\" href=\"structrect.html#o9\">dy</a> * delta_2;\n01722           r.<a class=\"code\" href=\"structrect.html#o3\">y2</a> -=  r.<a class=\"code\" href=\"structrect.html#o8\">dx</a> * delta_2;\n01723           r.<a class=\"code\" href=\"structrect.html#o4\">width</a> -= delta;\n01724           log_nfa_new = <a class=\"code\" href=\"lsd_8c.html#a44\">rect_nfa</a>(&amp;r,angles,logNT);\n01725           <span class=\"keywordflow\">if</span>( log_nfa_new &gt; log_nfa )\n01726             {\n01727               <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(&amp;r,rec);\n01728               log_nfa = log_nfa_new;\n01729             }\n01730         }\n01731     }\n01732 \n01733   <span class=\"keywordflow\">if</span>( log_nfa &gt; eps ) <span class=\"keywordflow\">return</span> log_nfa;\n01734 \n01735   <span class=\"comment\">/* try even finer precisions */</span>\n01736   <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(rec,&amp;r);\n01737   <span class=\"keywordflow\">for</span>(n=0; n&lt;5; n++)\n01738     {\n01739       r.<a class=\"code\" href=\"structrect.html#o11\">p</a> /= 2.0;\n01740       r.<a class=\"code\" href=\"structrect.html#o10\">prec</a> = r.<a class=\"code\" href=\"structrect.html#o11\">p</a> * <a class=\"code\" href=\"lsd_8c.html#a1\">M_PI</a>;\n01741       log_nfa_new = <a class=\"code\" href=\"lsd_8c.html#a44\">rect_nfa</a>(&amp;r,angles,logNT);\n01742       <span class=\"keywordflow\">if</span>( log_nfa_new &gt; log_nfa )\n01743         {\n01744           log_nfa = log_nfa_new;\n01745           <a class=\"code\" href=\"lsd_8c.html#a37\">rect_copy</a>(&amp;r,rec);\n01746         }\n01747     }\n01748 \n01749   <span class=\"keywordflow\">return</span> log_nfa;\n01750 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a48_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a48_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a48_cgraph_map\">\n<area href=\"lsd_8c.html#a37\" shape=\"rect\" coords=\"381,8,461,34\" alt=\"\">\n<area href=\"lsd_8c.html#a44\" shape=\"rect\" coords=\"158,185,228,212\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"661,236,712,262\" alt=\"\">\n<area href=\"lsd_8c.html#a31\" shape=\"rect\" coords=\"384,109,458,136\" alt=\"\">\n<area href=\"lsd_8c.html#a36\" shape=\"rect\" coords=\"528,464,568,490\" alt=\"\">\n<area href=\"lsd_8c.html#a40\" shape=\"rect\" coords=\"278,160,332,186\" alt=\"\">\n<area href=\"lsd_8c.html#a41\" shape=\"rect\" coords=\"518,261,577,288\" alt=\"\">\n<area href=\"lsd_8c.html#a42\" shape=\"rect\" coords=\"394,312,448,338\" alt=\"\">\n<area href=\"lsd_8c.html#a43\" shape=\"rect\" coords=\"280,210,330,237\" alt=\"\">\n<area href=\"lsd_8c.html#a13\" shape=\"rect\" coords=\"636,413,737,440\" alt=\"\">\n<area href=\"lsd_8c.html#a39\" shape=\"rect\" coords=\"514,362,581,389\" alt=\"\">\n<area href=\"lsd_8c.html#a38\" shape=\"rect\" coords=\"510,413,585,440\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a44\" doxytag=\"lsd.c::rect_nfa\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double rect_nfa </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">struct <a class=\"el\" href=\"structrect.html\">rect</a> *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>rec</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>angles</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>logNT</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCompute a rectangle's NFA value. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01370\">1370</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00781\">isaligned()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00962\">nfa()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01065\">rect::p</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01064\">rect::prec</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01202\">ri_del()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01213\">ri_end()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01229\">ri_inc()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01299\">ri_ini()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01062\">rect::theta</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01152\">rect_iter::x</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::xsize</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01152\">rect_iter::y</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::ysize</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01644\">rect_improve()</a>.\n<p>\n<div class=\"fragment\"><pre>01371 {\n01372   <a class=\"code\" href=\"structrect__iter.html\">rect_iter</a> * i;\n01373   <span class=\"keywordtype\">int</span> pts = 0;\n01374   <span class=\"keywordtype\">int</span> alg = 0;\n01375 \n01376   <span class=\"comment\">/* check parameters */</span>\n01377   <span class=\"keywordflow\">if</span>( rec == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"rect_nfa: invalid rectangle.\"</span>);\n01378   <span class=\"keywordflow\">if</span>( angles == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"rect_nfa: invalid 'angles'.\"</span>);\n01379 \n01380   <span class=\"comment\">/* compute the total number of pixels and of aligned points in 'rec' */</span>\n01381   <span class=\"keywordflow\">for</span>(i=<a class=\"code\" href=\"lsd_8c.html#a43\">ri_ini</a>(rec); !<a class=\"code\" href=\"lsd_8c.html#a41\">ri_end</a>(i); <a class=\"code\" href=\"lsd_8c.html#a42\">ri_inc</a>(i)) <span class=\"comment\">/* rectangle iterator */</span>\n01382     <span class=\"keywordflow\">if</span>( i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a> &gt;= 0 &amp;&amp; i-&gt;<a class=\"code\" href=\"structrect__iter.html#o5\">y</a> &gt;= 0 &amp;&amp;\n01383         i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a> &lt; (<span class=\"keywordtype\">int</span>) angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> &amp;&amp; i-&gt;<a class=\"code\" href=\"structrect__iter.html#o5\">y</a> &lt; (<span class=\"keywordtype\">int</span>) angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> )\n01384       {\n01385         ++pts; <span class=\"comment\">/* total number of pixels counter */</span>\n01386         <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a31\">isaligned</a>(i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a>, i-&gt;<a class=\"code\" href=\"structrect__iter.html#o5\">y</a>, angles, rec-&gt;<a class=\"code\" href=\"structrect.html#o7\">theta</a>, rec-&gt;<a class=\"code\" href=\"structrect.html#o10\">prec</a>) )\n01387           ++alg; <span class=\"comment\">/* aligned points counter */</span>\n01388       }\n01389   <a class=\"code\" href=\"lsd_8c.html#a40\">ri_del</a>(i); <span class=\"comment\">/* delete iterator */</span>\n01390 \n01391   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a36\">nfa</a>(pts,alg,rec-&gt;<a class=\"code\" href=\"structrect.html#o11\">p</a>,logNT); <span class=\"comment\">/* compute NFA value */</span>\n01392 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a44_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a44_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a44_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"506,210,557,237\" alt=\"\">\n<area href=\"lsd_8c.html#a31\" shape=\"rect\" coords=\"232,109,306,136\" alt=\"\">\n<area href=\"lsd_8c.html#a36\" shape=\"rect\" coords=\"373,312,413,338\" alt=\"\">\n<area href=\"lsd_8c.html#a40\" shape=\"rect\" coords=\"129,8,182,34\" alt=\"\">\n<area href=\"lsd_8c.html#a41\" shape=\"rect\" coords=\"364,160,422,186\" alt=\"\">\n<area href=\"lsd_8c.html#a42\" shape=\"rect\" coords=\"242,325,296,352\" alt=\"\">\n<area href=\"lsd_8c.html#a43\" shape=\"rect\" coords=\"130,286,181,313\" alt=\"\">\n<area href=\"lsd_8c.html#a13\" shape=\"rect\" coords=\"481,362,582,389\" alt=\"\">\n<area href=\"lsd_8c.html#a39\" shape=\"rect\" coords=\"360,362,426,389\" alt=\"\">\n<area href=\"lsd_8c.html#a38\" shape=\"rect\" coords=\"356,413,430,440\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a49\" doxytag=\"lsd.c::reduce_region_radius\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> int reduce_region_radius </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">struct <a class=\"el\" href=\"structpoint.html\">point</a> *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>reg</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>int *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>reg_size</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>modgrad</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>reg_angle</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>prec</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>p</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>struct <a class=\"el\" href=\"structrect.html\">rect</a> *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>rec</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap><a class=\"el\" href=\"structimage__char__s.html\">image_char</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>used</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>angles</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>density_th</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nReduce the region size, by elimination the points far from the starting point, until that leads to rectangle with the right density of region points or to discard the region if too small. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01757\">1757</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00122\">image_double_s::data</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00082\">image_char_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00181\">dist()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00089\">FALSE</a>, <a class=\"el\" href=\"lsd_8h.html#a1\">image_char</a>, <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00106\">NOTUSED</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00093\">TRUE</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01060\">rect::width</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00123\">point::x</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::x1</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::x2</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00083\">image_char_s::xsize</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00123\">point::y</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::y1</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::y2</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>.\n<p>\n<div class=\"fragment\"><pre>01762 {\n01763   <span class=\"keywordtype\">double</span> density,rad1,rad2,rad,xc,yc;\n01764   <span class=\"keywordtype\">int</span> i;\n01765 \n01766   <span class=\"comment\">/* check parameters */</span>\n01767   <span class=\"keywordflow\">if</span>( reg == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"reduce_region_radius: invalid pointer 'reg'.\"</span>);\n01768   <span class=\"keywordflow\">if</span>( reg_size == NULL )\n01769     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"reduce_region_radius: invalid pointer 'reg_size'.\"</span>);\n01770   <span class=\"keywordflow\">if</span>( prec &lt; 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"reduce_region_radius: 'prec' must be positive.\"</span>);\n01771   <span class=\"keywordflow\">if</span>( rec == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"reduce_region_radius: invalid pointer 'rec'.\"</span>);\n01772   <span class=\"keywordflow\">if</span>( used == NULL || used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> == NULL )\n01773     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"reduce_region_radius: invalid image 'used'.\"</span>);\n01774   <span class=\"keywordflow\">if</span>( angles == NULL || angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL )\n01775     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"reduce_region_radius: invalid image 'angles'.\"</span>);\n01776 \n01777   <span class=\"comment\">/* compute region points density */</span>\n01778   density = (<span class=\"keywordtype\">double</span>) *reg_size /\n01779                          ( <a class=\"code\" href=\"lsd_8c.html#a14\">dist</a>(rec-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a>) * rec-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> );\n01780 \n01781   <span class=\"comment\">/* if the density criterion is satisfied there is nothing to do */</span>\n01782   <span class=\"keywordflow\">if</span>( density &gt;= density_th ) <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a3\">TRUE</a>;\n01783 \n01784   <span class=\"comment\">/* compute region's radius */</span>\n01785   xc = (<span class=\"keywordtype\">double</span>) reg[0].<a class=\"code\" href=\"structpoint.html#o0\">x</a>;\n01786   yc = (<span class=\"keywordtype\">double</span>) reg[0].<a class=\"code\" href=\"structpoint.html#o1\">y</a>;\n01787   rad1 = <a class=\"code\" href=\"lsd_8c.html#a14\">dist</a>( xc, yc, rec-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a>, rec-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a> );\n01788   rad2 = <a class=\"code\" href=\"lsd_8c.html#a14\">dist</a>( xc, yc, rec-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a>, rec-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a> );\n01789   rad = rad1 &gt; rad2 ? rad1 : rad2;\n01790 \n01791   <span class=\"comment\">/* while the density criterion is not satisfied, remove farther pixels */</span>\n01792   <span class=\"keywordflow\">while</span>( density &lt; density_th )\n01793     {\n01794       rad *= 0.75; <span class=\"comment\">/* reduce region's radius to 75% of its value */</span>\n01795 \n01796       <span class=\"comment\">/* remove points from the region and update 'used' map */</span>\n01797       <span class=\"keywordflow\">for</span>(i=0; i&lt;*reg_size; i++)\n01798         <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a14\">dist</a>( xc, yc, (<span class=\"keywordtype\">double</span>) reg[i].x, (<span class=\"keywordtype\">double</span>) reg[i].y ) &gt; rad )\n01799           {\n01800             <span class=\"comment\">/* point not kept, mark it as NOTUSED */</span>\n01801             used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a>[ reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> + reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> * used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a> ] = <a class=\"code\" href=\"lsd_8c.html#a7\">NOTUSED</a>;\n01802             <span class=\"comment\">/* remove point from the region */</span>\n01803             reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> = reg[*reg_size-1].<a class=\"code\" href=\"structpoint.html#o0\">x</a>; <span class=\"comment\">/* if i==*reg_size-1 copy itself */</span>\n01804             reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> = reg[*reg_size-1].<a class=\"code\" href=\"structpoint.html#o1\">y</a>;\n01805             --(*reg_size);\n01806             --i; <span class=\"comment\">/* to avoid skipping one point */</span>\n01807           }\n01808 \n01809       <span class=\"comment\">/* reject if the region is too small.</span>\n01810 <span class=\"comment\">         2 is the minimal region size for 'region2rect' to work. */</span>\n01811       <span class=\"keywordflow\">if</span>( *reg_size &lt; 2 ) <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a2\">FALSE</a>;\n01812 \n01813       <span class=\"comment\">/* re-compute rectangle */</span>\n01814       <a class=\"code\" href=\"lsd_8c.html#a46\">region2rect</a>(reg,*reg_size,modgrad,reg_angle,prec,p,rec);\n01815 \n01816       <span class=\"comment\">/* re-compute region points density */</span>\n01817       density = (<span class=\"keywordtype\">double</span>) *reg_size /\n01818                          ( <a class=\"code\" href=\"lsd_8c.html#a14\">dist</a>(rec-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a>) * rec-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> );\n01819     }\n01820 \n01821   <span class=\"comment\">/* if this point is reached, the density criterion is satisfied */</span>\n01822   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a3\">TRUE</a>;\n01823 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a49_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a49_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a49_cgraph_map\">\n<area href=\"lsd_8c.html#a14\" shape=\"rect\" coords=\"232,7,274,34\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"498,109,549,135\" alt=\"\">\n<area href=\"lsd_8c.html#a46\" shape=\"rect\" coords=\"209,109,297,135\" alt=\"\">\n<area href=\"lsd_8c.html#a45\" shape=\"rect\" coords=\"346,159,424,186\" alt=\"\">\n<area href=\"lsd_8c.html#a32\" shape=\"rect\" coords=\"484,159,564,186\" alt=\"\">\n<area href=\"lsd_8c.html#a13\" shape=\"rect\" coords=\"473,210,574,237\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a50\" doxytag=\"lsd.c::refine\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> int refine </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">struct <a class=\"el\" href=\"structpoint.html\">point</a> *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>reg</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>int *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>reg_size</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>modgrad</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>reg_angle</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>prec</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>p</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>struct <a class=\"el\" href=\"structrect.html\">rect</a> *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>rec</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap><a class=\"el\" href=\"structimage__char__s.html\">image_char</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>used</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>angles</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>density_th</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nRefine a rectangle. \n<p>\nFor that, an estimation of the angle tolerance is performed by the standard deviation of the angle at points near the region's starting point. Then, a new region is grown starting from the same point, but using the estimated angle tolerance. If this fails to produce a rectangle with the right density of region points, 'reduce_region_radius' is called to try to satisfy this condition. \n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01835\">1835</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l00831\">angle_diff_signed()</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00122\">image_double_s::data</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00082\">image_char_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00181\">dist()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00089\">FALSE</a>, <a class=\"el\" href=\"lsd_8h.html#a1\">image_char</a>, <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00106\">NOTUSED</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01592\">region_grow()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00093\">TRUE</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01060\">rect::width</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00123\">point::x</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::x1</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::x2</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00083\">image_char_s::xsize</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::xsize</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00123\">point::y</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::y1</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::y2</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>.\n<p>\n<div class=\"fragment\"><pre>01838 {\n01839   <span class=\"keywordtype\">double</span> angle,ang_d,mean_angle,tau,density,xc,yc,ang_c,sum,s_sum;\n01840   <span class=\"keywordtype\">int</span> i,n;\n01841 \n01842   <span class=\"comment\">/* check parameters */</span>\n01843   <span class=\"keywordflow\">if</span>( reg == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"refine: invalid pointer 'reg'.\"</span>);\n01844   <span class=\"keywordflow\">if</span>( reg_size == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"refine: invalid pointer 'reg_size'.\"</span>);\n01845   <span class=\"keywordflow\">if</span>( prec &lt; 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"refine: 'prec' must be positive.\"</span>);\n01846   <span class=\"keywordflow\">if</span>( rec == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"refine: invalid pointer 'rec'.\"</span>);\n01847   <span class=\"keywordflow\">if</span>( used == NULL || used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> == NULL )\n01848     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"refine: invalid image 'used'.\"</span>);\n01849   <span class=\"keywordflow\">if</span>( angles == NULL || angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL )\n01850     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"refine: invalid image 'angles'.\"</span>);\n01851 \n01852   <span class=\"comment\">/* compute region points density */</span>\n01853   density = (<span class=\"keywordtype\">double</span>) *reg_size /\n01854                          ( <a class=\"code\" href=\"lsd_8c.html#a14\">dist</a>(rec-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a>) * rec-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> );\n01855 \n01856   <span class=\"comment\">/* if the density criterion is satisfied there is nothing to do */</span>\n01857   <span class=\"keywordflow\">if</span>( density &gt;= density_th ) <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a3\">TRUE</a>;\n01858 \n01859   <span class=\"comment\">/*------ First try: reduce angle tolerance ------*/</span>\n01860 \n01861   <span class=\"comment\">/* compute the new mean angle and tolerance */</span>\n01862   xc = (<span class=\"keywordtype\">double</span>) reg[0].<a class=\"code\" href=\"structpoint.html#o0\">x</a>;\n01863   yc = (<span class=\"keywordtype\">double</span>) reg[0].<a class=\"code\" href=\"structpoint.html#o1\">y</a>;\n01864   ang_c = angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ reg[0].<a class=\"code\" href=\"structpoint.html#o0\">x</a> + reg[0].<a class=\"code\" href=\"structpoint.html#o1\">y</a> * angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ];\n01865   sum = s_sum = 0.0;\n01866   n = 0;\n01867   <span class=\"keywordflow\">for</span>(i=0; i&lt;*reg_size; i++)\n01868     {\n01869       used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a>[ reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> + reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> * used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a> ] = <a class=\"code\" href=\"lsd_8c.html#a7\">NOTUSED</a>;\n01870       <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a14\">dist</a>( xc, yc, (<span class=\"keywordtype\">double</span>) reg[i].x, (<span class=\"keywordtype\">double</span>) reg[i].y ) &lt; rec-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> )\n01871         {\n01872           angle = angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> + reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> * angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ];\n01873           ang_d = <a class=\"code\" href=\"lsd_8c.html#a33\">angle_diff_signed</a>(angle,ang_c);\n01874           sum += ang_d;\n01875           s_sum += ang_d * ang_d;\n01876           ++n;\n01877         }\n01878     }\n01879   mean_angle = sum / (<span class=\"keywordtype\">double</span>) n;\n01880   tau = 2.0 * sqrt( (s_sum - 2.0 * mean_angle * sum) / (<span class=\"keywordtype\">double</span>) n\n01881                          + mean_angle*mean_angle ); <span class=\"comment\">/* 2 * standard deviation */</span>\n01882 \n01883   <span class=\"comment\">/* find a new region from the same starting point and new angle tolerance */</span>\n01884   <a class=\"code\" href=\"lsd_8c.html#a47\">region_grow</a>(reg[0].x,reg[0].y,angles,reg,reg_size,&amp;reg_angle,used,tau);\n01885 \n01886   <span class=\"comment\">/* if the region is too small, reject */</span>\n01887   <span class=\"keywordflow\">if</span>( *reg_size &lt; 2 ) <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a2\">FALSE</a>;\n01888 \n01889   <span class=\"comment\">/* re-compute rectangle */</span>\n01890   <a class=\"code\" href=\"lsd_8c.html#a46\">region2rect</a>(reg,*reg_size,modgrad,reg_angle,prec,p,rec);\n01891 \n01892   <span class=\"comment\">/* re-compute region points density */</span>\n01893   density = (<span class=\"keywordtype\">double</span>) *reg_size /\n01894                       ( <a class=\"code\" href=\"lsd_8c.html#a14\">dist</a>(rec-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a>,rec-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a>) * rec-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> );\n01895 \n01896   <span class=\"comment\">/*------ Second try: reduce region radius ------*/</span>\n01897   <span class=\"keywordflow\">if</span>( density &lt; density_th )\n01898     <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a49\">reduce_region_radius</a>( reg, reg_size, modgrad, reg_angle, prec, p,\n01899                                  rec, used, angles, density_th );\n01900 \n01901   <span class=\"comment\">/* if this point is reached, the density criterion is satisfied */</span>\n01902   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a3\">TRUE</a>;\n01903 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a50_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a50_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a50_cgraph_map\">\n<area href=\"lsd_8c.html#a33\" shape=\"rect\" coords=\"125,8,250,34\" alt=\"\">\n<area href=\"lsd_8c.html#a14\" shape=\"rect\" coords=\"338,160,381,186\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"607,210,658,237\" alt=\"\">\n<area href=\"lsd_8c.html#a49\" shape=\"rect\" coords=\"113,210,262,237\" alt=\"\">\n<area href=\"lsd_8c.html#a46\" shape=\"rect\" coords=\"315,261,403,288\" alt=\"\">\n<area href=\"lsd_8c.html#a47\" shape=\"rect\" coords=\"313,109,406,136\" alt=\"\">\n<area href=\"lsd_8c.html#a45\" shape=\"rect\" coords=\"455,312,533,338\" alt=\"\">\n<area href=\"lsd_8c.html#a32\" shape=\"rect\" coords=\"593,337,673,364\" alt=\"\">\n<area href=\"lsd_8c.html#a13\" shape=\"rect\" coords=\"582,286,683,313\" alt=\"\">\n<area href=\"lsd_8c.html#a31\" shape=\"rect\" coords=\"457,160,531,186\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a46\" doxytag=\"lsd.c::region2rect\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> void region2rect </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">struct <a class=\"el\" href=\"structpoint.html\">point</a> *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>reg</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>reg_size</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>modgrad</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>reg_angle</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>prec</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>p</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>struct <a class=\"el\" href=\"structrect.html\">rect</a> *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>rec</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nComputes a rectangle that covers a region of points. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01499\">1499</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00122\">image_double_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01063\">rect::dx</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01063\">rect::dy</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01456\">get_theta()</a>, <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01065\">rect::p</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01064\">rect::prec</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01062\">rect::theta</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01060\">rect::width</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01061\">rect::x</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00123\">point::x</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::x1</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::x2</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::xsize</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01061\">rect::y</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00123\">point::y</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::y1</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::y2</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>.\n<p>\n<div class=\"fragment\"><pre>01502 {\n01503   <span class=\"keywordtype\">double</span> x,y,dx,dy,l,w,theta,weight,sum,l_min,l_max,w_min,w_max;\n01504   <span class=\"keywordtype\">int</span> i;\n01505 \n01506   <span class=\"comment\">/* check parameters */</span>\n01507   <span class=\"keywordflow\">if</span>( reg == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region2rect: invalid region.\"</span>);\n01508   <span class=\"keywordflow\">if</span>( reg_size &lt;= 1 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region2rect: region size &lt;= 1.\"</span>);\n01509   <span class=\"keywordflow\">if</span>( modgrad == NULL || modgrad-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL )\n01510     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region2rect: invalid image 'modgrad'.\"</span>);\n01511   <span class=\"keywordflow\">if</span>( rec == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region2rect: invalid 'rec'.\"</span>);\n01512 \n01513   <span class=\"comment\">/* center of the region:</span>\n01514 <span class=\"comment\"></span>\n01515 <span class=\"comment\">     It is computed as the weighted sum of the coordinates</span>\n01516 <span class=\"comment\">     of all the pixels in the region. The norm of the gradient</span>\n01517 <span class=\"comment\">     is used as the weight of a pixel. The sum is as follows:</span>\n01518 <span class=\"comment\">       cx = \\sum_i G(i).x_i</span>\n01519 <span class=\"comment\">       cy = \\sum_i G(i).y_i</span>\n01520 <span class=\"comment\">     where G(i) is the norm of the gradient of pixel i</span>\n01521 <span class=\"comment\">     and x_i,y_i are its coordinates.</span>\n01522 <span class=\"comment\">   */</span>\n01523   x = y = sum = 0.0;\n01524   <span class=\"keywordflow\">for</span>(i=0; i&lt;reg_size; i++)\n01525     {\n01526       weight = modgrad-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> + reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> * modgrad-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ];\n01527       x += (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> * weight;\n01528       y += (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> * weight;\n01529       sum += weight;\n01530     }\n01531   <span class=\"keywordflow\">if</span>( sum &lt;= 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region2rect: weights sum equal to zero.\"</span>);\n01532   x /= sum;\n01533   y /= sum;\n01534 \n01535   <span class=\"comment\">/* theta */</span>\n01536   theta = <a class=\"code\" href=\"lsd_8c.html#a45\">get_theta</a>(reg,reg_size,x,y,modgrad,reg_angle,prec);\n01537 \n01538   <span class=\"comment\">/* length and width:</span>\n01539 <span class=\"comment\"></span>\n01540 <span class=\"comment\">     'l' and 'w' are computed as the distance from the center of the</span>\n01541 <span class=\"comment\">     region to pixel i, projected along the rectangle axis (dx,dy) and</span>\n01542 <span class=\"comment\">     to the orthogonal axis (-dy,dx), respectively.</span>\n01543 <span class=\"comment\"></span>\n01544 <span class=\"comment\">     The length of the rectangle goes from l_min to l_max, where l_min</span>\n01545 <span class=\"comment\">     and l_max are the minimum and maximum values of l in the region.</span>\n01546 <span class=\"comment\">     Analogously, the width is selected from w_min to w_max, where</span>\n01547 <span class=\"comment\">     w_min and w_max are the minimum and maximum of w for the pixels</span>\n01548 <span class=\"comment\">     in the region.</span>\n01549 <span class=\"comment\">   */</span>\n01550   dx = cos(theta);\n01551   dy = sin(theta);\n01552   l_min = l_max = w_min = w_max = 0.0;\n01553   <span class=\"keywordflow\">for</span>(i=0; i&lt;reg_size; i++)\n01554     {\n01555       l =  ( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> - x) * dx + ( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> - y) * dy;\n01556       w = -( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a> - x) * dy + ( (<span class=\"keywordtype\">double</span>) reg[i].<a class=\"code\" href=\"structpoint.html#o1\">y</a> - y) * dx;\n01557 \n01558       <span class=\"keywordflow\">if</span>( l &gt; l_max ) l_max = l;\n01559       <span class=\"keywordflow\">if</span>( l &lt; l_min ) l_min = l;\n01560       <span class=\"keywordflow\">if</span>( w &gt; w_max ) w_max = w;\n01561       <span class=\"keywordflow\">if</span>( w &lt; w_min ) w_min = w;\n01562     }\n01563 \n01564   <span class=\"comment\">/* store values */</span>\n01565   rec-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a> = x + l_min * dx;\n01566   rec-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a> = y + l_min * dy;\n01567   rec-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a> = x + l_max * dx;\n01568   rec-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a> = y + l_max * dy;\n01569   rec-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> = w_max - w_min;\n01570   rec-&gt;<a class=\"code\" href=\"structrect.html#o5\">x</a> = x;\n01571   rec-&gt;<a class=\"code\" href=\"structrect.html#o6\">y</a> = y;\n01572   rec-&gt;<a class=\"code\" href=\"structrect.html#o7\">theta</a> = theta;\n01573   rec-&gt;<a class=\"code\" href=\"structrect.html#o8\">dx</a> = dx;\n01574   rec-&gt;<a class=\"code\" href=\"structrect.html#o9\">dy</a> = dy;\n01575   rec-&gt;<a class=\"code\" href=\"structrect.html#o10\">prec</a> = prec;\n01576   rec-&gt;<a class=\"code\" href=\"structrect.html#o11\">p</a> = p;\n01577 \n01578   <span class=\"comment\">/* we impose a minimal width of one pixel</span>\n01579 <span class=\"comment\"></span>\n01580 <span class=\"comment\">     A sharp horizontal or vertical step would produce a perfectly</span>\n01581 <span class=\"comment\">     horizontal or vertical region. The width computed would be</span>\n01582 <span class=\"comment\">     zero. But that corresponds to a one pixels width transition in</span>\n01583 <span class=\"comment\">     the image.</span>\n01584 <span class=\"comment\">   */</span>\n01585   <span class=\"keywordflow\">if</span>( rec-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> &lt; 1.0 ) rec-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> = 1.0;\n01586 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a46_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a46_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a46_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"298,8,349,34\" alt=\"\">\n<area href=\"lsd_8c.html#a45\" shape=\"rect\" coords=\"146,58,224,85\" alt=\"\">\n<area href=\"lsd_8c.html#a32\" shape=\"rect\" coords=\"284,58,364,85\" alt=\"\">\n<area href=\"lsd_8c.html#a13\" shape=\"rect\" coords=\"273,109,374,136\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a47\" doxytag=\"lsd.c::region_grow\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> void region_grow </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>x</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>y</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>angles</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>struct <a class=\"el\" href=\"structpoint.html\">point</a> *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>reg</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>int *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>reg_size</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>reg_angle</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap><a class=\"el\" href=\"structimage__char__s.html\">image_char</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>used</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>prec</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nBuild a region of pixels that share the same angle, up to a tolerance 'prec', starting at point (x,y). \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01592\">1592</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00082\">image_char_s::data</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00122\">image_double_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h.html#a1\">image_char</a>, <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00781\">isaligned()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00109\">USED</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00123\">point::x</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00083\">image_char_s::xsize</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::xsize</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00123\">point::y</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00083\">image_char_s::ysize</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::ysize</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>.\n<p>\n<div class=\"fragment\"><pre>01595 {\n01596   <span class=\"keywordtype\">double</span> sumdx,sumdy;\n01597   <span class=\"keywordtype\">int</span> xx,yy,i;\n01598 \n01599   <span class=\"comment\">/* check parameters */</span>\n01600   <span class=\"keywordflow\">if</span>( x &lt; 0 || y &lt; 0 || x &gt;= (<span class=\"keywordtype\">int</span>) angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> || y &gt;= (<span class=\"keywordtype\">int</span>) angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> )\n01601     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region_grow: (x,y) out of the image.\"</span>);\n01602   <span class=\"keywordflow\">if</span>( angles == NULL || angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL )\n01603     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region_grow: invalid image 'angles'.\"</span>);\n01604   <span class=\"keywordflow\">if</span>( reg == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region_grow: invalid 'reg'.\"</span>);\n01605   <span class=\"keywordflow\">if</span>( reg_size == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region_grow: invalid pointer 'reg_size'.\"</span>);\n01606   <span class=\"keywordflow\">if</span>( reg_angle == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region_grow: invalid pointer 'reg_angle'.\"</span>);\n01607   <span class=\"keywordflow\">if</span>( used == NULL || used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> == NULL )\n01608     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"region_grow: invalid image 'used'.\"</span>);\n01609 \n01610   <span class=\"comment\">/* first point of the region */</span>\n01611   *reg_size = 1;\n01612   reg[0].<a class=\"code\" href=\"structpoint.html#o0\">x</a> = x;\n01613   reg[0].<a class=\"code\" href=\"structpoint.html#o1\">y</a> = y;\n01614   *reg_angle = angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[x+y*angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>];  <span class=\"comment\">/* region's angle */</span>\n01615   sumdx = cos(*reg_angle);\n01616   sumdy = sin(*reg_angle);\n01617   used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a>[x+y*used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a>] = <a class=\"code\" href=\"lsd_8c.html#a8\">USED</a>;\n01618 \n01619   <span class=\"comment\">/* try neighbors as new region points */</span>\n01620   <span class=\"keywordflow\">for</span>(i=0; i&lt;*reg_size; i++)\n01621     <span class=\"keywordflow\">for</span>(xx=reg[i].<a class=\"code\" href=\"structpoint.html#o0\">x</a>-1; xx&lt;=reg[i].x+1; xx++)\n01622       <span class=\"keywordflow\">for</span>(yy=reg[i].y-1; yy&lt;=reg[i].y+1; yy++)\n01623         <span class=\"keywordflow\">if</span>( xx&gt;=0 &amp;&amp; yy&gt;=0 &amp;&amp; xx&lt;(<span class=\"keywordtype\">int</span>)used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a> &amp;&amp; yy&lt;(<span class=\"keywordtype\">int</span>)used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o2\">ysize</a> &amp;&amp;\n01624             used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a>[xx+yy*used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a>] != <a class=\"code\" href=\"lsd_8c.html#a8\">USED</a> &amp;&amp;\n01625             <a class=\"code\" href=\"lsd_8c.html#a31\">isaligned</a>(xx,yy,angles,*reg_angle,prec) )\n01626           {\n01627             <span class=\"comment\">/* add point */</span>\n01628             used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a>[xx+yy*used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a>] = <a class=\"code\" href=\"lsd_8c.html#a8\">USED</a>;\n01629             reg[*reg_size].x = xx;\n01630             reg[*reg_size].y = yy;\n01631             ++(*reg_size);\n01632 \n01633             <span class=\"comment\">/* update region's angle */</span>\n01634             sumdx += cos( angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[xx+yy*angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>] );\n01635             sumdy += sin( angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[xx+yy*angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>] );\n01636             *reg_angle = atan2(sumdy,sumdx);\n01637           }\n01638 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a47_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a47_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a47_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"274,33,325,59\" alt=\"\">\n<area href=\"lsd_8c.html#a31\" shape=\"rect\" coords=\"151,58,226,85\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a40\" doxytag=\"lsd.c::ri_del\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> void ri_del </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structrect__iter.html\">rect_iter</a> *&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>iter</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nFree memory used by a rectangle iterator. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01202\">1202</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01370\">rect_nfa()</a>.\n<p>\n<div class=\"fragment\"><pre>01203 {\n01204   <span class=\"keywordflow\">if</span>( iter == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ri_del: NULL iterator.\"</span>);\n01205   free( (<span class=\"keywordtype\">void</span> *) iter );\n01206 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a40_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a40_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a40_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"112,8,162,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a41\" doxytag=\"lsd.c::ri_end\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> int ri_end </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structrect__iter.html\">rect_iter</a> *&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>i</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCheck if the iterator finished the full iteration. \n<p>\nSee details in <a class=\"el\" href=\"structrect__iter.html\">rect_iter</a> \n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01213\">1213</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01149\">rect_iter::vx</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01152\">rect_iter::x</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01370\">rect_nfa()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01229\">ri_inc()</a>.\n<p>\n<div class=\"fragment\"><pre>01214 {\n01215   <span class=\"comment\">/* check input */</span>\n01216   <span class=\"keywordflow\">if</span>( i == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ri_end: NULL iterator.\"</span>);\n01217 \n01218   <span class=\"comment\">/* if the current x value is larger than the larger</span>\n01219 <span class=\"comment\">     x value in the rectangle (vx[2]), we know the full</span>\n01220 <span class=\"comment\">     exploration of the rectangle is finished. */</span>\n01221   <span class=\"keywordflow\">return</span> (<span class=\"keywordtype\">double</span>)(i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a>) &gt; i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[2];\n01222 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a41_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a41_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a41_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"114,8,165,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a42\" doxytag=\"lsd.c::ri_inc\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> void ri_inc </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structrect__iter.html\">rect_iter</a> *&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>i</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nIncrement a rectangle iterator. \n<p>\nSee details in <a class=\"el\" href=\"structrect__iter.html\">rect_iter</a> \n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01229\">1229</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01187\">inter_hi()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01165\">inter_low()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01213\">ri_end()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01149\">rect_iter::vx</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01150\">rect_iter::vy</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01152\">rect_iter::x</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01152\">rect_iter::y</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01151\">rect_iter::ye</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01151\">rect_iter::ys</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01370\">rect_nfa()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01299\">ri_ini()</a>.\n<p>\n<div class=\"fragment\"><pre>01230 {\n01231   <span class=\"comment\">/* check input */</span>\n01232   <span class=\"keywordflow\">if</span>( i == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ri_inc: NULL iterator.\"</span>);\n01233 \n01234   <span class=\"comment\">/* if not at end of exploration,</span>\n01235 <span class=\"comment\">     increase y value for next pixel in the 'column' */</span>\n01236   <span class=\"keywordflow\">if</span>( !<a class=\"code\" href=\"lsd_8c.html#a41\">ri_end</a>(i) ) i-&gt;<a class=\"code\" href=\"structrect__iter.html#o5\">y</a>++;\n01237 \n01238   <span class=\"comment\">/* if the end of the current 'column' is reached,</span>\n01239 <span class=\"comment\">     and it is not the end of exploration,</span>\n01240 <span class=\"comment\">     advance to the next 'column' */</span>\n01241   <span class=\"keywordflow\">while</span>( (<span class=\"keywordtype\">double</span>) (i-&gt;<a class=\"code\" href=\"structrect__iter.html#o5\">y</a>) &gt; i-&gt;<a class=\"code\" href=\"structrect__iter.html#o3\">ye</a> &amp;&amp; !<a class=\"code\" href=\"lsd_8c.html#a41\">ri_end</a>(i) )\n01242     {\n01243       <span class=\"comment\">/* increase x, next 'column' */</span>\n01244       i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a>++;\n01245 \n01246       <span class=\"comment\">/* if end of exploration, return */</span>\n01247       <span class=\"keywordflow\">if</span>( <a class=\"code\" href=\"lsd_8c.html#a41\">ri_end</a>(i) ) <span class=\"keywordflow\">return</span>;\n01248 \n01249       <span class=\"comment\">/* update lower y limit (start) for the new 'column'.</span>\n01250 <span class=\"comment\"></span>\n01251 <span class=\"comment\">         We need to interpolate the y value that corresponds to the</span>\n01252 <span class=\"comment\">         lower side of the rectangle. The first thing is to decide if</span>\n01253 <span class=\"comment\">         the corresponding side is</span>\n01254 <span class=\"comment\"></span>\n01255 <span class=\"comment\">           vx[0],vy[0] to vx[3],vy[3] or</span>\n01256 <span class=\"comment\">           vx[3],vy[3] to vx[2],vy[2]</span>\n01257 <span class=\"comment\"></span>\n01258 <span class=\"comment\">         Then, the side is interpolated for the x value of the</span>\n01259 <span class=\"comment\">         'column'. But, if the side is vertical (as it could happen if</span>\n01260 <span class=\"comment\">         the rectangle is vertical and we are dealing with the first</span>\n01261 <span class=\"comment\">         or last 'columns') then we pick the lower value of the side</span>\n01262 <span class=\"comment\">         by using 'inter_low'.</span>\n01263 <span class=\"comment\">       */</span>\n01264       <span class=\"keywordflow\">if</span>( (<span class=\"keywordtype\">double</span>) i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a> &lt; i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[3] )\n01265         i-&gt;<a class=\"code\" href=\"structrect__iter.html#o2\">ys</a> = <a class=\"code\" href=\"lsd_8c.html#a38\">inter_low</a>((<span class=\"keywordtype\">double</span>)i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a>,i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[0],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[0],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[3],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[3]);\n01266       <span class=\"keywordflow\">else</span>\n01267         i-&gt;<a class=\"code\" href=\"structrect__iter.html#o2\">ys</a> = <a class=\"code\" href=\"lsd_8c.html#a38\">inter_low</a>((<span class=\"keywordtype\">double</span>)i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a>,i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[3],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[3],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[2],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[2]);\n01268 \n01269       <span class=\"comment\">/* update upper y limit (end) for the new 'column'.</span>\n01270 <span class=\"comment\"></span>\n01271 <span class=\"comment\">         We need to interpolate the y value that corresponds to the</span>\n01272 <span class=\"comment\">         upper side of the rectangle. The first thing is to decide if</span>\n01273 <span class=\"comment\">         the corresponding side is</span>\n01274 <span class=\"comment\"></span>\n01275 <span class=\"comment\">           vx[0],vy[0] to vx[1],vy[1] or</span>\n01276 <span class=\"comment\">           vx[1],vy[1] to vx[2],vy[2]</span>\n01277 <span class=\"comment\"></span>\n01278 <span class=\"comment\">         Then, the side is interpolated for the x value of the</span>\n01279 <span class=\"comment\">         'column'. But, if the side is vertical (as it could happen if</span>\n01280 <span class=\"comment\">         the rectangle is vertical and we are dealing with the first</span>\n01281 <span class=\"comment\">         or last 'columns') then we pick the lower value of the side</span>\n01282 <span class=\"comment\">         by using 'inter_low'.</span>\n01283 <span class=\"comment\">       */</span>\n01284       <span class=\"keywordflow\">if</span>( (<span class=\"keywordtype\">double</span>)i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a> &lt; i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[1] )\n01285         i-&gt;<a class=\"code\" href=\"structrect__iter.html#o3\">ye</a> = <a class=\"code\" href=\"lsd_8c.html#a39\">inter_hi</a>((<span class=\"keywordtype\">double</span>)i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a>,i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[0],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[0],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[1],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[1]);\n01286       <span class=\"keywordflow\">else</span>\n01287         i-&gt;<a class=\"code\" href=\"structrect__iter.html#o3\">ye</a> = <a class=\"code\" href=\"lsd_8c.html#a39\">inter_hi</a>((<span class=\"keywordtype\">double</span>)i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a>,i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[1],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[1],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[2],i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[2]);\n01288 \n01289       <span class=\"comment\">/* new y */</span>\n01290       i-&gt;<a class=\"code\" href=\"structrect__iter.html#o5\">y</a> = (<span class=\"keywordtype\">int</span>) ceil(i-&gt;<a class=\"code\" href=\"structrect__iter.html#o2\">ys</a>);\n01291     }\n01292 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a42_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a42_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a42_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"263,72,314,98\" alt=\"\">\n<area href=\"lsd_8c.html#a39\" shape=\"rect\" coords=\"117,109,183,136\" alt=\"\">\n<area href=\"lsd_8c.html#a38\" shape=\"rect\" coords=\"113,160,187,186\" alt=\"\">\n<area href=\"lsd_8c.html#a41\" shape=\"rect\" coords=\"121,58,179,85\" alt=\"\">\n<area href=\"lsd_8c.html#a13\" shape=\"rect\" coords=\"238,148,339,174\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a43\" doxytag=\"lsd.c::ri_ini\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structrect__iter.html\">rect_iter</a>* ri_ini </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">struct <a class=\"el\" href=\"structrect.html\">rect</a> *&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>r</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap><code> [static]</code></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCreate and initialize a rectangle iterator. \n<p>\nSee details in <a class=\"el\" href=\"structrect__iter.html\">rect_iter</a> \n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01299\">1299</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l01063\">rect::dx</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01063\">rect::dy</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01229\">ri_inc()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01149\">rect_iter::vx</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01150\">rect_iter::vy</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01060\">rect::width</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01152\">rect_iter::x</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::x1</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::x2</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01152\">rect_iter::y</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::y1</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::y2</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01151\">rect_iter::ye</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01151\">rect_iter::ys</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01370\">rect_nfa()</a>.\n<p>\n<div class=\"fragment\"><pre>01300 {\n01301   <span class=\"keywordtype\">double</span> vx[4],vy[4];\n01302   <span class=\"keywordtype\">int</span> n,offset;\n01303   <a class=\"code\" href=\"structrect__iter.html\">rect_iter</a> * i;\n01304 \n01305   <span class=\"comment\">/* check parameters */</span>\n01306   <span class=\"keywordflow\">if</span>( r == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ri_ini: invalid rectangle.\"</span>);\n01307 \n01308   <span class=\"comment\">/* get memory */</span>\n01309   i = (<a class=\"code\" href=\"structrect__iter.html\">rect_iter</a> *) malloc(<span class=\"keyword\">sizeof</span>(<a class=\"code\" href=\"structrect__iter.html\">rect_iter</a>));\n01310   <span class=\"keywordflow\">if</span>( i == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"ri_ini: Not enough memory.\"</span>);\n01311 \n01312   <span class=\"comment\">/* build list of rectangle corners ordered</span>\n01313 <span class=\"comment\">     in a circular way around the rectangle */</span>\n01314   vx[0] = r-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a> - r-&gt;<a class=\"code\" href=\"structrect.html#o9\">dy</a> * r-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> / 2.0;\n01315   vy[0] = r-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a> + r-&gt;<a class=\"code\" href=\"structrect.html#o8\">dx</a> * r-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> / 2.0;\n01316   vx[1] = r-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a> - r-&gt;<a class=\"code\" href=\"structrect.html#o9\">dy</a> * r-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> / 2.0;\n01317   vy[1] = r-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a> + r-&gt;<a class=\"code\" href=\"structrect.html#o8\">dx</a> * r-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> / 2.0;\n01318   vx[2] = r-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a> + r-&gt;<a class=\"code\" href=\"structrect.html#o9\">dy</a> * r-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> / 2.0;\n01319   vy[2] = r-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a> - r-&gt;<a class=\"code\" href=\"structrect.html#o8\">dx</a> * r-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> / 2.0;\n01320   vx[3] = r-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a> + r-&gt;<a class=\"code\" href=\"structrect.html#o9\">dy</a> * r-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> / 2.0;\n01321   vy[3] = r-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a> - r-&gt;<a class=\"code\" href=\"structrect.html#o8\">dx</a> * r-&gt;<a class=\"code\" href=\"structrect.html#o4\">width</a> / 2.0;\n01322 \n01323   <span class=\"comment\">/* compute rotation of index of corners needed so that the first</span>\n01324 <span class=\"comment\">     point has the smaller x.</span>\n01325 <span class=\"comment\"></span>\n01326 <span class=\"comment\">     if one side is vertical, thus two corners have the same smaller x</span>\n01327 <span class=\"comment\">     value, the one with the largest y value is selected as the first.</span>\n01328 <span class=\"comment\">   */</span>\n01329   <span class=\"keywordflow\">if</span>( r-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a> &lt; r-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a> &amp;&amp; r-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a> &lt;= r-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a> ) offset = 0;\n01330   <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span>( r-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a> &gt;= r-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a> &amp;&amp; r-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a> &lt; r-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a> ) offset = 1;\n01331   <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span>( r-&gt;<a class=\"code\" href=\"structrect.html#o0\">x1</a> &gt; r-&gt;<a class=\"code\" href=\"structrect.html#o2\">x2</a> &amp;&amp; r-&gt;<a class=\"code\" href=\"structrect.html#o1\">y1</a> &gt;= r-&gt;<a class=\"code\" href=\"structrect.html#o3\">y2</a> ) offset = 2;\n01332   <span class=\"keywordflow\">else</span> offset = 3;\n01333 \n01334   <span class=\"comment\">/* apply rotation of index. */</span>\n01335   <span class=\"keywordflow\">for</span>(n=0; n&lt;4; n++)\n01336     {\n01337       i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[n] = vx[(offset+n)%4];\n01338       i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[n] = vy[(offset+n)%4];\n01339     }\n01340 \n01341   <span class=\"comment\">/* Set a initial condition.</span>\n01342 <span class=\"comment\"></span>\n01343 <span class=\"comment\">     The values are set to values that will cause 'ri_inc' (that will</span>\n01344 <span class=\"comment\">     be called immediately) to initialize correctly the first 'column'</span>\n01345 <span class=\"comment\">     and compute the limits 'ys' and 'ye'.</span>\n01346 <span class=\"comment\"></span>\n01347 <span class=\"comment\">     'y' is set to the integer value of vy[0], the starting corner.</span>\n01348 <span class=\"comment\"></span>\n01349 <span class=\"comment\">     'ys' and 'ye' are set to very small values, so 'ri_inc' will</span>\n01350 <span class=\"comment\">     notice that it needs to start a new 'column'.</span>\n01351 <span class=\"comment\"></span>\n01352 <span class=\"comment\">     The smaller integer coordinate inside of the rectangle is</span>\n01353 <span class=\"comment\">     'ceil(vx[0])'. The current 'x' value is set to that value minus</span>\n01354 <span class=\"comment\">     one, so 'ri_inc' (that will increase x by one) will advance to</span>\n01355 <span class=\"comment\">     the first 'column'.</span>\n01356 <span class=\"comment\">   */</span>\n01357   i-&gt;<a class=\"code\" href=\"structrect__iter.html#o4\">x</a> = (<span class=\"keywordtype\">int</span>) ceil(i-&gt;<a class=\"code\" href=\"structrect__iter.html#o0\">vx</a>[0]) - 1;\n01358   i-&gt;<a class=\"code\" href=\"structrect__iter.html#o5\">y</a> = (<span class=\"keywordtype\">int</span>) ceil(i-&gt;<a class=\"code\" href=\"structrect__iter.html#o1\">vy</a>[0]);\n01359   i-&gt;<a class=\"code\" href=\"structrect__iter.html#o2\">ys</a> = i-&gt;<a class=\"code\" href=\"structrect__iter.html#o3\">ye</a> = -DBL_MAX;\n01360 \n01361   <span class=\"comment\">/* advance to the first pixel */</span>\n01362   <a class=\"code\" href=\"lsd_8c.html#a42\">ri_inc</a>(i);\n01363 \n01364   <span class=\"keywordflow\">return</span> i;\n01365 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8c_a43_cgraph.png\" border=\"0\" usemap=\"#lsd_8c_a43_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8c_a43_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"362,109,413,135\" alt=\"\">\n<area href=\"lsd_8c.html#a42\" shape=\"rect\" coords=\"108,109,161,135\" alt=\"\">\n<area href=\"lsd_8c.html#a39\" shape=\"rect\" coords=\"216,159,282,186\" alt=\"\">\n<area href=\"lsd_8c.html#a38\" shape=\"rect\" coords=\"212,210,286,237\" alt=\"\">\n<area href=\"lsd_8c.html#a41\" shape=\"rect\" coords=\"220,109,278,135\" alt=\"\">\n<area href=\"lsd_8c.html#a13\" shape=\"rect\" coords=\"337,185,438,211\" alt=\"\">\n</map>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:38 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/lsd_8h-source.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: lsd.h Source File</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindex\" href=\"globals.html\">Globals</a></div>\n<h1>lsd.h</h1><a href=\"lsd_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><pre>00001 <span class=\"comment\">/*----------------------------------------------------------------------------</span>\n00002 <span class=\"comment\"></span>\n00003 <span class=\"comment\">  LSD - Line Segment Detector on digital images</span>\n00004 <span class=\"comment\"></span>\n00005 <span class=\"comment\">  Copyright 2007-2010 rafael grompone von gioi (grompone@gmail.com)</span>\n00006 <span class=\"comment\"></span>\n00007 <span class=\"comment\">  This program is free software: you can redistribute it and/or modify</span>\n00008 <span class=\"comment\">  it under the terms of the GNU Affero General Public License as</span>\n00009 <span class=\"comment\">  published by the Free Software Foundation, either version 3 of the</span>\n00010 <span class=\"comment\">  License, or (at your option) any later version.</span>\n00011 <span class=\"comment\"></span>\n00012 <span class=\"comment\">  This program is distributed in the hope that it will be useful,</span>\n00013 <span class=\"comment\">  but WITHOUT ANY WARRANTY; without even the implied warranty of</span>\n00014 <span class=\"comment\">  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>\n00015 <span class=\"comment\">  GNU Affero General Public License for more details.</span>\n00016 <span class=\"comment\"></span>\n00017 <span class=\"comment\">  You should have received a copy of the GNU Affero General Public License</span>\n00018 <span class=\"comment\">  along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>\n00019 <span class=\"comment\"></span>\n00020 <span class=\"comment\">  ----------------------------------------------------------------------------*/</span>\n00021 \n00022 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00023 <span class=\"comment\">/** @file lsd.h</span>\n00024 <span class=\"comment\">    LSD module header</span>\n00025 <span class=\"comment\">    @author rafael grompone von gioi (grompone@gmail.com)</span>\n00026 <span class=\"comment\"> */</span>\n00027 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00028 <span class=\"preprocessor\">#ifndef LSD_HEADER</span>\n00029 <span class=\"preprocessor\"></span><span class=\"preprocessor\">#define LSD_HEADER</span>\n00030 <span class=\"preprocessor\"></span>\n00031 \n00032 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00033 <span class=\"comment\">/*----------------------- 'list of n-tuple' data type ------------------------*/</span>\n00034 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00035 <span class=\"comment\">/** 'list of n-tuple' data type</span>\n00036 <span class=\"comment\"></span>\n00037 <span class=\"comment\">    The i component, of the n-tuple number j, of an n-tuple list 'ntl'</span>\n00038 <span class=\"comment\">    is accessed with:</span>\n00039 <span class=\"comment\"></span>\n00040 <span class=\"comment\">      ntl-&gt;values[ i + j * ntl-&gt;dim ]</span>\n00041 <span class=\"comment\"></span>\n00042 <span class=\"comment\">    The dimension of the n-tuple (n) is:</span>\n00043 <span class=\"comment\"></span>\n00044 <span class=\"comment\">      ntl-&gt;dim</span>\n00045 <span class=\"comment\"></span>\n00046 <span class=\"comment\">    The number of number of n-tuples in the list is:</span>\n00047 <span class=\"comment\"></span>\n00048 <span class=\"comment\">      ntl-&gt;size</span>\n00049 <span class=\"comment\"></span>\n00050 <span class=\"comment\">    The maximum number of n-tuples that can be stored in the</span>\n00051 <span class=\"comment\">    list with the allocated memory at a given time is given by:</span>\n00052 <span class=\"comment\"></span>\n00053 <span class=\"comment\">      ntl-&gt;max_size</span>\n00054 <span class=\"comment\"> */</span>\n<a name=\"l00055\"></a><a class=\"code\" href=\"structntuple__list__s.html\">00055</a> <span class=\"keyword\">typedef</span> <span class=\"keyword\">struct </span><a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list_s</a>\n00056 {\n<a name=\"l00057\"></a><a class=\"code\" href=\"structntuple__list__s.html#o0\">00057</a>   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a>;\n<a name=\"l00058\"></a><a class=\"code\" href=\"structntuple__list__s.html#o1\">00058</a>   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"structntuple__list__s.html#o1\">max_size</a>;\n<a name=\"l00059\"></a><a class=\"code\" href=\"structntuple__list__s.html#o2\">00059</a>   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a>;\n<a name=\"l00060\"></a><a class=\"code\" href=\"structntuple__list__s.html#o3\">00060</a>   <span class=\"keywordtype\">double</span> * <a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a>;\n00061 } * <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a>;\n00062 \n00063 <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"lsd_8c.html#a15\">free_ntuple_list</a>(<a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> in);\n00064 <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> <a class=\"code\" href=\"lsd_8c.html#a16\">new_ntuple_list</a>(<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> dim);\n00065 \n00066 \n00067 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00068 <span class=\"comment\">/*----------------------------- Image Data Types -----------------------------*/</span>\n00069 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00070 \n00071 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00072 <span class=\"comment\">/** char image data type</span>\n00073 <span class=\"comment\"></span>\n00074 <span class=\"comment\">    The pixel value at (x,y) is accessed by:</span>\n00075 <span class=\"comment\"></span>\n00076 <span class=\"comment\">      image-&gt;data[ x + y * image-&gt;xsize ]</span>\n00077 <span class=\"comment\"></span>\n00078 <span class=\"comment\">    with x and y integer.</span>\n00079 <span class=\"comment\"> */</span>\n<a name=\"l00080\"></a><a class=\"code\" href=\"structimage__char__s.html\">00080</a> <span class=\"keyword\">typedef</span> <span class=\"keyword\">struct </span><a class=\"code\" href=\"structimage__char__s.html\">image_char_s</a>\n00081 {\n<a name=\"l00082\"></a><a class=\"code\" href=\"structimage__char__s.html#o0\">00082</a>   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span> * <a class=\"code\" href=\"structimage__char__s.html#o0\">data</a>;\n<a name=\"l00083\"></a><a class=\"code\" href=\"structimage__char__s.html#o2\">00083</a>   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a>,<a class=\"code\" href=\"structimage__char__s.html#o2\">ysize</a>;\n00084 } * <a class=\"code\" href=\"structimage__char__s.html\">image_char</a>;\n00085 \n00086 <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"lsd_8c.html#a19\">free_image_char</a>(<a class=\"code\" href=\"structimage__char__s.html\">image_char</a> i);\n00087 <a class=\"code\" href=\"structimage__char__s.html\">image_char</a> <a class=\"code\" href=\"lsd_8c.html#a20\">new_image_char</a>(<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> xsize, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> ysize);\n00088 <a class=\"code\" href=\"structimage__char__s.html\">image_char</a> <a class=\"code\" href=\"lsd_8c.html#a21\">new_image_char_ini</a>( <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> xsize, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> ysize,\n00089                                <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span> fill_value );\n00090 \n00091 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00092 <span class=\"comment\">/** int image data type</span>\n00093 <span class=\"comment\"></span>\n00094 <span class=\"comment\">    The pixel value at (x,y) is accessed by:</span>\n00095 <span class=\"comment\"></span>\n00096 <span class=\"comment\">      image-&gt;data[ x + y * image-&gt;xsize ]</span>\n00097 <span class=\"comment\"></span>\n00098 <span class=\"comment\">    with x and y integer.</span>\n00099 <span class=\"comment\"> */</span>\n<a name=\"l00100\"></a><a class=\"code\" href=\"structimage__int__s.html\">00100</a> <span class=\"keyword\">typedef</span> <span class=\"keyword\">struct </span><a class=\"code\" href=\"structimage__int__s.html\">image_int_s</a>\n00101 {\n<a name=\"l00102\"></a><a class=\"code\" href=\"structimage__int__s.html#o0\">00102</a>   <span class=\"keywordtype\">int</span> * <a class=\"code\" href=\"structimage__int__s.html#o0\">data</a>;\n<a name=\"l00103\"></a><a class=\"code\" href=\"structimage__int__s.html#o2\">00103</a>   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"structimage__int__s.html#o1\">xsize</a>,<a class=\"code\" href=\"structimage__int__s.html#o2\">ysize</a>;\n00104 } * <a class=\"code\" href=\"structimage__int__s.html\">image_int</a>;\n00105 \n00106 <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"lsd_8c.html#a22\">free_image_int</a>(<a class=\"code\" href=\"structimage__int__s.html\">image_int</a> i);\n00107 <a class=\"code\" href=\"structimage__int__s.html\">image_int</a> <a class=\"code\" href=\"lsd_8c.html#a23\">new_image_int</a>(<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> xsize, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> ysize);\n00108 <a class=\"code\" href=\"structimage__int__s.html\">image_int</a> <a class=\"code\" href=\"lsd_8c.html#a24\">new_image_int_ini</a>( <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> xsize, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> ysize,\n00109                              <span class=\"keywordtype\">int</span> fill_value );\n00110 \n00111 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00112 <span class=\"comment\">/** double image data type</span>\n00113 <span class=\"comment\"></span>\n00114 <span class=\"comment\">    The pixel value at (x,y) is accessed by:</span>\n00115 <span class=\"comment\"></span>\n00116 <span class=\"comment\">      image-&gt;data[ x + y * image-&gt;xsize ]</span>\n00117 <span class=\"comment\"></span>\n00118 <span class=\"comment\">    with x and y integer.</span>\n00119 <span class=\"comment\"> */</span>\n<a name=\"l00120\"></a><a class=\"code\" href=\"structimage__double__s.html\">00120</a> <span class=\"keyword\">typedef</span> <span class=\"keyword\">struct </span><a class=\"code\" href=\"structimage__double__s.html\">image_double_s</a>\n00121 {\n<a name=\"l00122\"></a><a class=\"code\" href=\"structimage__double__s.html#o0\">00122</a>   <span class=\"keywordtype\">double</span> * <a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>;\n<a name=\"l00123\"></a><a class=\"code\" href=\"structimage__double__s.html#o2\">00123</a>   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>,<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>;\n00124 } * <a class=\"code\" href=\"structimage__double__s.html\">image_double</a>;\n00125 \n00126 <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"lsd_8c.html#a25\">free_image_double</a>(<a class=\"code\" href=\"structimage__double__s.html\">image_double</a> i);\n00127 <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> <a class=\"code\" href=\"lsd_8c.html#a26\">new_image_double</a>(<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> xsize, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> ysize);\n00128 <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> <a class=\"code\" href=\"lsd_8c.html#a27\">new_image_double_ini</a>( <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> xsize, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> ysize,\n00129                                    <span class=\"keywordtype\">double</span> fill_value );\n00130 \n00131 \n00132 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00133 <span class=\"comment\">/*-------------------------- Line Segment Detector ---------------------------*/</span>\n00134 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00135 \n00136 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00137 <span class=\"comment\">/* LSD Full Interface                                                         */</span>\n00138 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00139 <span class=\"comment\">/** LSD Full Interface</span>\n00140 <span class=\"comment\"></span>\n00141 <span class=\"comment\">    @param image       Input image.</span>\n00142 <span class=\"comment\"></span>\n00143 <span class=\"comment\">    @param scale       When different than 1.0, LSD will scale the image by</span>\n00144 <span class=\"comment\">                       Gaussian filtering.</span>\n00145 <span class=\"comment\">                       Example: is scale=0.8, the input image will be subsampled</span>\n00146 <span class=\"comment\">                       to 80% of its size, and then the line segment detector</span>\n00147 <span class=\"comment\">                       will be applied.</span>\n00148 <span class=\"comment\">                       Suggested value: 0.8</span>\n00149 <span class=\"comment\"></span>\n00150 <span class=\"comment\">    @param sigma_scale When scale!=1.0, the sigma of the Gaussian filter is:</span>\n00151 <span class=\"comment\">                       sigma = sigma_scale / scale,   if scale &lt;  1.0</span>\n00152 <span class=\"comment\">                       sigma = sigma_scale,           if scale &gt;= 1.0</span>\n00153 <span class=\"comment\">                       Suggested value: 0.6</span>\n00154 <span class=\"comment\"></span>\n00155 <span class=\"comment\">    @param quant       Bound to the quantization error on the gradient norm.</span>\n00156 <span class=\"comment\">                       Example: if gray level is quantized to integer steps,</span>\n00157 <span class=\"comment\">                       the gradient (computed by finite differences) error</span>\n00158 <span class=\"comment\">                       due to quantization will be bounded by 2.0, as the</span>\n00159 <span class=\"comment\">                       worst case is when the error are 1 and -1, that</span>\n00160 <span class=\"comment\">                       gives an error of 2.0.</span>\n00161 <span class=\"comment\">                       Suggested value: 2.0</span>\n00162 <span class=\"comment\"></span>\n00163 <span class=\"comment\">    @param ang_th      Gradient angle tolerance in the region growing</span>\n00164 <span class=\"comment\">                       algorithm, in degrees.</span>\n00165 <span class=\"comment\">                       Suggested value: 22.5</span>\n00166 <span class=\"comment\"></span>\n00167 <span class=\"comment\">    @param eps         Detection threshold, -log10(NFA).</span>\n00168 <span class=\"comment\">                       The bigger, the more strict the detector is,</span>\n00169 <span class=\"comment\">                       and will result in less detections.</span>\n00170 <span class=\"comment\">                       (Note that the 'minus sign' makes that this</span>\n00171 <span class=\"comment\">                       behavior is opposite to the one of NFA.)</span>\n00172 <span class=\"comment\">                       The value -log10(NFA) is equivalent but more</span>\n00173 <span class=\"comment\">                       intuitive than NFA:</span>\n00174 <span class=\"comment\">                       - -1.0 corresponds to 10 mean false alarms</span>\n00175 <span class=\"comment\">                       -  0.0 corresponds to 1 mean false alarm</span>\n00176 <span class=\"comment\">                       -  1.0 corresponds to 0.1 mean false alarms</span>\n00177 <span class=\"comment\">                       -  2.0 corresponds to 0.01 mean false alarms</span>\n00178 <span class=\"comment\">                       .</span>\n00179 <span class=\"comment\">                       Suggested value: 0.0</span>\n00180 <span class=\"comment\"></span>\n00181 <span class=\"comment\">    @param density_th  Minimal proportion of region points in a rectangle.</span>\n00182 <span class=\"comment\">                       Suggested value: 0.7</span>\n00183 <span class=\"comment\"></span>\n00184 <span class=\"comment\">    @param n_bins      Number of bins used in the pseudo-ordering of gradient</span>\n00185 <span class=\"comment\">                       modulus.</span>\n00186 <span class=\"comment\">                       Suggested value: 1024</span>\n00187 <span class=\"comment\"></span>\n00188 <span class=\"comment\">    @param max_grad    Gradient modulus in the highest bin. For example,</span>\n00189 <span class=\"comment\">                       for images with integer gray levels in [0,255],</span>\n00190 <span class=\"comment\">                       the maximum possible gradient value is 255.0.</span>\n00191 <span class=\"comment\">                       Suggested value: 255.0</span>\n00192 <span class=\"comment\"></span>\n00193 <span class=\"comment\">    @param region      Optional output: an int image where the pixels used</span>\n00194 <span class=\"comment\">                       in some line support region are marked. Unused pixels</span>\n00195 <span class=\"comment\">                       have the value '0' while the used ones have the</span>\n00196 <span class=\"comment\">                       number of the line segment, numbered 1,2,3,...</span>\n00197 <span class=\"comment\">                       If desired, a non NULL pointer to an image_int should</span>\n00198 <span class=\"comment\">                       be used. The resulting image has the size of the image</span>\n00199 <span class=\"comment\">                       used for the processing, that is, the size of the input</span>\n00200 <span class=\"comment\">                       image scaled by the given factor 'scale'.</span>\n00201 <span class=\"comment\">                       Suggested value: NULL</span>\n00202 <span class=\"comment\"></span>\n00203 <span class=\"comment\">    @return            A 5-tuple list, where each 5-tuple corresponds to a</span>\n00204 <span class=\"comment\">                       detected line segment. The five values are:</span>\n00205 <span class=\"comment\">                       - x1,y1,x2,y2,width</span>\n00206 <span class=\"comment\">                       .</span>\n00207 <span class=\"comment\">                       for a line segment from (x1,y1) to (x2,y2) and</span>\n00208 <span class=\"comment\">                       a width 'width'.</span>\n00209 <span class=\"comment\"> */</span>\n00210 <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> <a class=\"code\" href=\"lsd_8c.html#a51\">LineSegmentDetection</a>( <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> image, <span class=\"keywordtype\">double</span> scale,\n00211                                   <span class=\"keywordtype\">double</span> sigma_scale, <span class=\"keywordtype\">double</span> quant,\n00212                                   <span class=\"keywordtype\">double</span> ang_th, <span class=\"keywordtype\">double</span> eps, <span class=\"keywordtype\">double</span> density_th,\n00213                                   <span class=\"keywordtype\">int</span> n_bins, <span class=\"keywordtype\">double</span> max_grad,\n00214                                   <a class=\"code\" href=\"structimage__int__s.html\">image_int</a> * region );\n00215 \n00216 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00217 <span class=\"comment\">/* LSD Simple Interface with Scale                                            */</span>\n00218 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00219 <span class=\"comment\">/** LSD Simple Interface with Scale</span>\n00220 <span class=\"comment\"></span>\n00221 <span class=\"comment\">    @param image Input image.</span>\n00222 <span class=\"comment\"></span>\n00223 <span class=\"comment\">    @param scale When different than 1.0, LSD will scale the image by</span>\n00224 <span class=\"comment\">                 Gaussian filtering.</span>\n00225 <span class=\"comment\">                 Example: is scale=0.8, the input image will be subsampled</span>\n00226 <span class=\"comment\">                 to 80% of its size, and then the line segment detector</span>\n00227 <span class=\"comment\">                 will be applied.</span>\n00228 <span class=\"comment\">                 Suggested value: 0.8</span>\n00229 <span class=\"comment\"></span>\n00230 <span class=\"comment\">    @return a 5-tuple list of detected line segments.</span>\n00231 <span class=\"comment\"> */</span>\n00232 <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> <a class=\"code\" href=\"lsd_8c.html#a52\">lsd_scale</a>(<a class=\"code\" href=\"structimage__double__s.html\">image_double</a> image, <span class=\"keywordtype\">double</span> scale);\n00233 \n00234 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n00235 <span class=\"comment\">/* LSD Simple Interface                                                       */</span>\n00236 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span><span class=\"comment\"></span>\n00237 <span class=\"comment\">/** LSD Simple Interface</span>\n00238 <span class=\"comment\"></span>\n00239 <span class=\"comment\">    @param image Input image.</span>\n00240 <span class=\"comment\"></span>\n00241 <span class=\"comment\">    @return a 5-tuple list of detected line segments.</span>\n00242 <span class=\"comment\"> */</span>\n00243 <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> <a class=\"code\" href=\"lsd_8c.html#a53\">lsd</a>(<a class=\"code\" href=\"structimage__double__s.html\">image_double</a> image);\n00244 \n00245 <span class=\"preprocessor\">#endif </span><span class=\"comment\">/* !LSD_HEADER */</span>\n00246 <span class=\"comment\">/*----------------------------------------------------------------------------*/</span>\n</pre></div><hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:18 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/lsd_8h.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: lsd.h File Reference</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindex\" href=\"globals.html\">Globals</a></div>\n<h1>lsd.h File Reference</h1><hr><a name=\"_details\"></a><h2>Detailed Description</h2>\nLSD module header. \n<p>\n<dl compact><dt><b>Author:</b></dt><dd>rafael grompone von gioi (<a href=\"mailto:grompone@gmail.com\">grompone@gmail.com</a>)</dd></dl>\n\n<p>\nDefinition in file <a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>.\n<p>\n\n<p>\nThis graph shows which files directly or indirectly include this file:<p><center><img src=\"lsd_8h__dep__incl.png\" border=\"0\" usemap=\"#lsd.hdep_map\" alt=\"Included by dependency graph\"></center>\n<map name=\"lsd.hdep_map\">\n<area href=\"lsd_8c.html\" shape=\"rect\" coords=\"9,7,57,34\" alt=\"\">\n</map>\n\n<p>\n<a href=\"lsd_8h-source.html\">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>\n<tr><td></td></tr>\n<tr><td colspan=2><br><h2>Data Structures</h2></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>struct &nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structimage__char__s.html\">image_char_s</a></td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">char image data type </em> <a href=\"structimage__char__s.html#_details\">More...</a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>struct &nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structimage__double__s.html\">image_double_s</a></td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">double image data type </em> <a href=\"structimage__double__s.html#_details\">More...</a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>struct &nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structimage__int__s.html\">image_int_s</a></td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">int image data type </em> <a href=\"structimage__int__s.html#_details\">More...</a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>struct &nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list_s</a></td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">'list of n-tuple' data type </em> <a href=\"structntuple__list__s.html#_details\">More...</a><em><br><br></td></tr>\n<tr><td colspan=2><br><h2>Typedefs</h2></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>typedef <a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list_s</a> *&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8h.html#a0\">ntuple_list</a></td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">'list of n-tuple' data type </em> <a href=\"#a0\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>typedef <a class=\"el\" href=\"structimage__char__s.html\">image_char_s</a> *&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8h.html#a1\">image_char</a></td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">char image data type </em> <a href=\"#a1\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>typedef <a class=\"el\" href=\"structimage__int__s.html\">image_int_s</a> *&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8h.html#a2\">image_int</a></td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">int image data type </em> <a href=\"#a2\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>typedef <a class=\"el\" href=\"structimage__double__s.html\">image_double_s</a> *&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a></td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">double image data type </em> <a href=\"#a3\"></a><em><br><br></td></tr>\n<tr><td colspan=2><br><h2>Functions</h2></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>void&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8h.html#a4\">free_ntuple_list</a> (<a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a> in)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Free memory used in n-tuple 'in'. </em> <a href=\"#a4\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8h.html#a5\">new_ntuple_list</a> (unsigned int dim)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create an n-tuple list and allocate memory for one element. </em> <a href=\"#a5\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>void&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8h.html#a6\">free_image_char</a> (<a class=\"el\" href=\"structimage__char__s.html\">image_char</a> i)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Free memory used in image_char 'i'. </em> <a href=\"#a6\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structimage__char__s.html\">image_char</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8h.html#a7\">new_image_char</a> (unsigned int xsize, unsigned int ysize)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a new image_char of size 'xsize' times 'ysize'. </em> <a href=\"#a7\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structimage__char__s.html\">image_char</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8h.html#a8\">new_image_char_ini</a> (unsigned int xsize, unsigned int ysize, unsigned char fill_value)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a new image_char of size 'xsize' times 'ysize', initialized to the value 'fill_value'. </em> <a href=\"#a8\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>void&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8h.html#a9\">free_image_int</a> (<a class=\"el\" href=\"structimage__int__s.html\">image_int</a> i)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Free memory used in image_int 'i'. </em> <a href=\"#a9\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structimage__int__s.html\">image_int</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8h.html#a10\">new_image_int</a> (unsigned int xsize, unsigned int ysize)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a new image_int of size 'xsize' times 'ysize'. </em> <a href=\"#a10\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structimage__int__s.html\">image_int</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8h.html#a11\">new_image_int_ini</a> (unsigned int xsize, unsigned int ysize, int fill_value)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a new image_int of size 'xsize' times 'ysize', initialized to the value 'fill_value'. </em> <a href=\"#a11\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>void&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8h.html#a12\">free_image_double</a> (<a class=\"el\" href=\"structimage__double__s.html\">image_double</a> i)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Free memory used in image_double 'i'. </em> <a href=\"#a12\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8h.html#a13\">new_image_double</a> (unsigned int xsize, unsigned int ysize)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a new image_double of size 'xsize' times 'ysize'. </em> <a href=\"#a13\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8h.html#a14\">new_image_double_ini</a> (unsigned int xsize, unsigned int ysize, double fill_value)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a new image_double of size 'xsize' times 'ysize', initialized to the value 'fill_value'. </em> <a href=\"#a14\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8h.html#a15\">LineSegmentDetection</a> (<a class=\"el\" href=\"structimage__double__s.html\">image_double</a> image, double scale, double sigma_scale, double quant, double ang_th, double eps, double density_th, int n_bins, double max_grad, <a class=\"el\" href=\"structimage__int__s.html\">image_int</a> *region)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">LSD Full Interface. </em> <a href=\"#a15\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8h.html#a16\">lsd_scale</a> (<a class=\"el\" href=\"structimage__double__s.html\">image_double</a> image, double scale)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">LSD Simple Interface with Scale. </em> <a href=\"#a16\"></a><em><br><br></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a>&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"lsd_8h.html#a17\">lsd</a> (<a class=\"el\" href=\"structimage__double__s.html\">image_double</a> image)</td></tr>\n\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">LSD Simple Interface. </em> <a href=\"#a17\"></a><em><br><br></td></tr>\n</table>\n<hr><h2>Typedef Documentation</h2>\n<a class=\"anchor\" name=\"a1\" doxytag=\"lsd.h::image_char\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> typedef struct <a class=\"el\" href=\"structimage__char__s.html\">image_char_s</a> *  <a class=\"el\" href=\"structimage__char__s.html\">image_char</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nchar image data type \n<p>\nThe pixel value at (x,y) is accessed by:<p>\nimage-&gt;data[ x + y * image-&gt;xsize ]<p>\nwith x and y integer. \n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00280\">free_image_char()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00291\">new_image_char()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00316\">new_image_char_ini()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01592\">region_grow()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a3\" doxytag=\"lsd.h::image_double\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> typedef struct <a class=\"el\" href=\"structimage__double__s.html\">image_double_s</a> *  <a class=\"el\" href=\"structimage__double__s.html\">image_double</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\ndouble image data type \n<p>\nThe pixel value at (x,y) is accessed by:<p>\nimage-&gt;data[ x + y * image-&gt;xsize ]<p>\nwith x and y integer. \n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00387\">free_image_double()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01456\">get_theta()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00781\">isaligned()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00652\">ll_angle()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l02077\">lsd()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l02053\">lsd_scale()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00398\">new_image_double()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00422\">new_image_double_ini()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01644\">rect_improve()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01370\">rect_nfa()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01592\">region_grow()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a2\" doxytag=\"lsd.h::image_int\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> typedef struct <a class=\"el\" href=\"structimage__int__s.html\">image_int_s</a> *  <a class=\"el\" href=\"structimage__int__s.html\">image_int</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nint image data type \n<p>\nThe pixel value at (x,y) is accessed by:<p>\nimage-&gt;data[ x + y * image-&gt;xsize ]<p>\nwith x and y integer. \n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00336\">free_image_int()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00347\">new_image_int()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00371\">new_image_int_ini()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"a0\" doxytag=\"lsd.h::ntuple_list\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> typedef struct <a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list_s</a> *  <a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n'list of n-tuple' data type \n<p>\nThe i component, of the n-tuple number j, of an n-tuple list 'ntl' is accessed with:<p>\nntl-&gt;values[ i + j * ntl-&gt;dim ]<p>\nThe dimension of the n-tuple (n) is:<p>\nntl-&gt;dim<p>\nThe number of number of n-tuples in the list is:<p>\nntl-&gt;size<p>\nThe maximum number of n-tuples that can be stored in the list with the allocated memory at a given time is given by:<p>\nntl-&gt;max_size \n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00250\">add_5tuple()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00232\">enlarge_ntuple_list()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00194\">free_ntuple_list()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00448\">gaussian_kernel()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l02077\">lsd()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l02053\">lsd_scale()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00206\">new_ntuple_list()</a>.    </td>\n  </tr>\n</table>\n<hr><h2>Function Documentation</h2>\n<a class=\"anchor\" name=\"a6\" doxytag=\"lsd.h::free_image_char\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> void free_image_char </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structimage__char__s.html\">image_char</a>&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>i</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nFree memory used in image_char 'i'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00280\">280</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00082\">image_char_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, and <a class=\"el\" href=\"lsd_8h.html#a1\">image_char</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>.\n<p>\n<div class=\"fragment\"><pre>00281 {\n00282   <span class=\"keywordflow\">if</span>( i == NULL || i-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> == NULL )\n00283     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"free_image_char: invalid input image.\"</span>);\n00284   free( (<span class=\"keywordtype\">void</span> *) i-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> );\n00285   free( (<span class=\"keywordtype\">void</span> *) i );\n00286 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8h_a6_cgraph.png\" border=\"0\" usemap=\"#lsd_8h_a6_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8h_a6_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"178,8,229,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a12\" doxytag=\"lsd.h::free_image_double\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> void free_image_double </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>i</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nFree memory used in image_double 'i'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00387\">387</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00122\">image_double_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, and <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>.\n<p>\n<div class=\"fragment\"><pre>00388 {\n00389   <span class=\"keywordflow\">if</span>( i == NULL || i-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL )\n00390     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"free_image_double: invalid input image.\"</span>);\n00391   free( (<span class=\"keywordtype\">void</span> *) i-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> );\n00392   free( (<span class=\"keywordtype\">void</span> *) i );\n00393 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8h_a12_cgraph.png\" border=\"0\" usemap=\"#lsd_8h_a12_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8h_a12_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"194,8,245,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a9\" doxytag=\"lsd.h::free_image_int\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> void free_image_int </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structimage__int__s.html\">image_int</a>&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>i</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nFree memory used in image_int 'i'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00336\">336</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00102\">image_int_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, and <a class=\"el\" href=\"lsd_8h.html#a2\">image_int</a>.\n<p>\n<div class=\"fragment\"><pre>00337 {\n00338   <span class=\"keywordflow\">if</span>( i == NULL || i-&gt;<a class=\"code\" href=\"structimage__int__s.html#o0\">data</a> == NULL )\n00339     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"free_image_int: invalid input image.\"</span>);\n00340   free( (<span class=\"keywordtype\">void</span> *) i-&gt;<a class=\"code\" href=\"structimage__int__s.html#o0\">data</a> );\n00341   free( (<span class=\"keywordtype\">void</span> *) i );\n00342 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8h_a9_cgraph.png\" border=\"0\" usemap=\"#lsd_8h_a9_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8h_a9_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"168,8,218,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a4\" doxytag=\"lsd.h::free_ntuple_list\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> void free_ntuple_list </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a>&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>in</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nFree memory used in n-tuple 'in'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00194\">194</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h.html#a0\">ntuple_list</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00060\">ntuple_list_s::values</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>.\n<p>\n<div class=\"fragment\"><pre>00195 {\n00196   <span class=\"keywordflow\">if</span>( in == NULL || in-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> == NULL )\n00197     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"free_ntuple_list: invalid n-tuple input.\"</span>);\n00198   free( (<span class=\"keywordtype\">void</span> *) in-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> );\n00199   free( (<span class=\"keywordtype\">void</span> *) in );\n00200 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8h_a4_cgraph.png\" border=\"0\" usemap=\"#lsd_8h_a4_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8h_a4_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"170,8,221,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a15\" doxytag=\"lsd.h::LineSegmentDetection\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a> LineSegmentDetection </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>image</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>scale</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>sigma_scale</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>quant</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>ang_th</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>eps</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>density_th</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>n_bins</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>max_grad</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap><a class=\"el\" href=\"structimage__int__s.html\">image_int</a> *&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>region</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nLSD Full Interface. \n<p>\n<dl compact><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=top><em>image</em>&nbsp;</td><td>Input image.</td></tr>\n    <tr><td valign=top><em>scale</em>&nbsp;</td><td>When different than 1.0, LSD will scale the image by Gaussian filtering. Example: is scale=0.8, the input image will be subsampled to 80% of its size, and then the line segment detector will be applied. Suggested value: 0.8</td></tr>\n    <tr><td valign=top><em>sigma_scale</em>&nbsp;</td><td>When scale!=1.0, the sigma of the Gaussian filter is: sigma = sigma_scale / scale, if scale &lt; 1.0 sigma = sigma_scale, if scale &gt;= 1.0 Suggested value: 0.6</td></tr>\n    <tr><td valign=top><em>quant</em>&nbsp;</td><td>Bound to the quantization error on the gradient norm. Example: if gray level is quantized to integer steps, the gradient (computed by finite differences) error due to quantization will be bounded by 2.0, as the worst case is when the error are 1 and -1, that gives an error of 2.0. Suggested value: 2.0</td></tr>\n    <tr><td valign=top><em>ang_th</em>&nbsp;</td><td>Gradient angle tolerance in the region growing algorithm, in degrees. Suggested value: 22.5</td></tr>\n    <tr><td valign=top><em>eps</em>&nbsp;</td><td>Detection threshold, -log10(NFA). The bigger, the more strict the detector is, and will result in less detections. (Note that the 'minus sign' makes that this behavior is opposite to the one of NFA.) The value -log10(NFA) is equivalent but more intuitive than NFA:<ul>\n<li>-1.0 corresponds to 10 mean false alarms</li><li>0.0 corresponds to 1 mean false alarm</li><li>1.0 corresponds to 0.1 mean false alarms</li><li>2.0 corresponds to 0.01 mean false alarms</li></ul>\nSuggested value: 0.0</td></tr>\n    <tr><td valign=top><em>density_th</em>&nbsp;</td><td>Minimal proportion of region points in a rectangle. Suggested value: 0.7</td></tr>\n    <tr><td valign=top><em>n_bins</em>&nbsp;</td><td>Number of bins used in the pseudo-ordering of gradient modulus. Suggested value: 1024</td></tr>\n    <tr><td valign=top><em>max_grad</em>&nbsp;</td><td>Gradient modulus in the highest bin. For example, for images with integer gray levels in [0,255], the maximum possible gradient value is 255.0. Suggested value: 255.0</td></tr>\n    <tr><td valign=top><em>region</em>&nbsp;</td><td>Optional output: an int image where the pixels used in some line support region are marked. Unused pixels have the value '0' while the used ones have the number of the line segment, numbered 1,2,3,... If desired, a non NULL pointer to an image_int should be used. The resulting image has the size of the image used for the processing, that is, the size of the input image scaled by the given factor 'scale'. Suggested value: NULL</td></tr>\n  </table>\n</dl>\n<dl compact><dt><b>Returns:</b></dt><dd>A 5-tuple list, where each 5-tuple corresponds to a detected line segment. The five values are:<ul>\n<li>x1,y1,x2,y2,width</li></ul>\nfor a line segment from (x1,y1) to (x2,y2) and a width 'width'. </dd></dl>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01913\">1913</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8c-source.html#l00250\">add_5tuple()</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00122\">image_double_s::data</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00082\">image_char_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00280\">free_image_char()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00387\">free_image_double()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>, <a class=\"el\" href=\"lsd_8h.html#a1\">image_char</a>, <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, <a class=\"el\" href=\"lsd_8h.html#a2\">image_int</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00652\">ll_angle()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00085\">M_PI</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00316\">new_image_char_ini()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00371\">new_image_int_ini()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00206\">new_ntuple_list()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00097\">NOTDEF</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00106\">NOTUSED</a>, <a class=\"el\" href=\"lsd_8h.html#a0\">ntuple_list</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01644\">rect_improve()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01592\">region_grow()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01060\">rect::width</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::x1</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::x2</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::xsize</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00083\">image_char_s::xsize</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::y1</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01059\">rect::y2</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::ysize</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l02053\">lsd_scale()</a>.\n<p>\n<div class=\"fragment\"><pre>01918 {\n01919   <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> out = <a class=\"code\" href=\"lsd_8c.html#a16\">new_ntuple_list</a>(5);\n01920   <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> scaled_image,angles,modgrad;\n01921   <a class=\"code\" href=\"structimage__char__s.html\">image_char</a> used;\n01922   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structcoorlist.html\">coorlist</a> * list_p;\n01923   <span class=\"keywordtype\">void</span> * mem_p;\n01924   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structrect.html\">rect</a> rec;\n01925   <span class=\"keyword\">struct </span><a class=\"code\" href=\"structpoint.html\">point</a> * reg;\n01926   <span class=\"keywordtype\">int</span> reg_size,min_reg_size,i;\n01927   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> xsize,ysize;\n01928   <span class=\"keywordtype\">double</span> rho,reg_angle,prec,p,log_nfa,logNT;\n01929   <span class=\"keywordtype\">int</span> ls_count = 0;                   <span class=\"comment\">/* line segments are numbered 1,2,3,... */</span>\n01930 \n01931 \n01932   <span class=\"comment\">/* check parameters */</span>\n01933   <span class=\"keywordflow\">if</span>( image==NULL || image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>==NULL || image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>==0 || image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>==0 )\n01934     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"invalid image input.\"</span>);\n01935   <span class=\"keywordflow\">if</span>( scale &lt;= 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'scale' value must be positive.\"</span>);\n01936   <span class=\"keywordflow\">if</span>( sigma_scale &lt;= 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'sigma_scale' value must be positive.\"</span>);\n01937   <span class=\"keywordflow\">if</span>( quant &lt; 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'quant' value must be positive.\"</span>);\n01938   <span class=\"keywordflow\">if</span>( ang_th &lt;= 0.0 || ang_th &gt;= 180.0 )\n01939     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'ang_th' value must be in the range (0,180).\"</span>);\n01940   <span class=\"keywordflow\">if</span>( density_th &lt; 0.0 || density_th &gt; 1.0 )\n01941     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'density_th' value must be in the range [0,1].\"</span>);\n01942   <span class=\"keywordflow\">if</span>( n_bins &lt;= 0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'n_bins' value must be positive.\"</span>);\n01943   <span class=\"keywordflow\">if</span>( max_grad &lt;= 0.0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"'max_grad' value must be positive.\"</span>);\n01944 \n01945 \n01946   <span class=\"comment\">/* angle tolerance */</span>\n01947   prec = <a class=\"code\" href=\"lsd_8c.html#a1\">M_PI</a> * ang_th / 180.0;\n01948   p = ang_th / 180.0;\n01949   rho = quant / sin(prec); <span class=\"comment\">/* gradient magnitude threshold */</span>\n01950 \n01951 \n01952   <span class=\"comment\">/* scale image (if necessary) and compute angle at each pixel */</span>\n01953   <span class=\"keywordflow\">if</span>( scale != 1.0 )\n01954     {\n01955       scaled_image = <a class=\"code\" href=\"lsd_8c.html#a29\">gaussian_sampler</a>( image, scale, sigma_scale );\n01956       angles = <a class=\"code\" href=\"lsd_8c.html#a30\">ll_angle</a>( scaled_image, rho, &amp;list_p, &amp;mem_p,\n01957                          &amp;modgrad, (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>) n_bins, max_grad );\n01958       <a class=\"code\" href=\"lsd_8c.html#a25\">free_image_double</a>(scaled_image);\n01959     }\n01960   <span class=\"keywordflow\">else</span>\n01961     angles = <a class=\"code\" href=\"lsd_8c.html#a30\">ll_angle</a>( image, rho, &amp;list_p, &amp;mem_p, &amp;modgrad,\n01962                        (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>) n_bins, max_grad );\n01963   xsize = angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>;\n01964   ysize = angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>;\n01965   logNT = 5.0 * ( log10( (<span class=\"keywordtype\">double</span>) xsize ) + log10( (<span class=\"keywordtype\">double</span>) ysize ) ) / 2.0;\n01966   min_reg_size = (<span class=\"keywordtype\">int</span>) (-logNT/log10(p)); <span class=\"comment\">/* minimal number of points in region</span>\n01967 <span class=\"comment\">                                             that can give a meaningful event */</span>\n01968 \n01969 \n01970   <span class=\"comment\">/* initialize some structures */</span>\n01971   <span class=\"keywordflow\">if</span>( region != NULL ) <span class=\"comment\">/* image to output pixel region number, if asked */</span>\n01972     *region = <a class=\"code\" href=\"lsd_8c.html#a24\">new_image_int_ini</a>(angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a>,angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a>,0);\n01973   used = <a class=\"code\" href=\"lsd_8c.html#a21\">new_image_char_ini</a>(xsize,ysize,NOTUSED);\n01974   reg = (<span class=\"keyword\">struct </span><a class=\"code\" href=\"structpoint.html\">point</a> *) calloc( (size_t) (xsize*ysize), <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structpoint.html\">point</a>) );\n01975   <span class=\"keywordflow\">if</span>( reg == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory!\"</span>);\n01976 \n01977 \n01978   <span class=\"comment\">/* search for line segments */</span>\n01979   <span class=\"keywordflow\">for</span>(; list_p != NULL; list_p = list_p-&gt;next )\n01980     <span class=\"keywordflow\">if</span>( used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a>[ list_p-&gt;x + list_p-&gt;y * used-&gt;<a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a> ] == <a class=\"code\" href=\"lsd_8c.html#a7\">NOTUSED</a> &amp;&amp;\n01981         angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[ list_p-&gt;x + list_p-&gt;y * angles-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> ] != <a class=\"code\" href=\"lsd_8c.html#a4\">NOTDEF</a> )\n01982        <span class=\"comment\">/* there is no risk of double comparison problems here</span>\n01983 <span class=\"comment\">          because we are only interested in the exact NOTDEF value */</span>\n01984       {\n01985         <span class=\"comment\">/* find the region of connected point and ~equal angle */</span>\n01986         <a class=\"code\" href=\"lsd_8c.html#a47\">region_grow</a>( list_p-&gt;x, list_p-&gt;y, angles, reg, &amp;reg_size,\n01987                      &amp;reg_angle, used, prec );\n01988 \n01989         <span class=\"comment\">/* reject small regions */</span>\n01990         <span class=\"keywordflow\">if</span>( reg_size &lt; min_reg_size ) <span class=\"keywordflow\">continue</span>;\n01991 \n01992         <span class=\"comment\">/* construct rectangular approximation for the region */</span>\n01993         <a class=\"code\" href=\"lsd_8c.html#a46\">region2rect</a>(reg,reg_size,modgrad,reg_angle,prec,p,&amp;rec);\n01994 \n01995         <span class=\"comment\">/* Check if the rectangle exceeds the minimal density of</span>\n01996 <span class=\"comment\">           region points. If not, try to improve the region.</span>\n01997 <span class=\"comment\">           The rectangle will be rejected if the final one does</span>\n01998 <span class=\"comment\">           not fulfill the minimal density condition.</span>\n01999 <span class=\"comment\">           This is an addition to the original LSD algorithm published in</span>\n02000 <span class=\"comment\">           \"LSD: A Fast Line Segment Detector with a False Detection Control\"</span>\n02001 <span class=\"comment\">           by R. Grompone von Gioi, J. Jakubowicz, J.M. Morel, and G. Randall.</span>\n02002 <span class=\"comment\">           The original algorithm is obtained with density_th = 0.0.</span>\n02003 <span class=\"comment\">         */</span>\n02004         <span class=\"keywordflow\">if</span>( !<a class=\"code\" href=\"lsd_8c.html#a50\">refine</a>( reg, &amp;reg_size, modgrad, reg_angle,\n02005                      prec, p, &amp;rec, used, angles, density_th ) ) <span class=\"keywordflow\">continue</span>;\n02006 \n02007         <span class=\"comment\">/* compute NFA value */</span>\n02008         log_nfa = <a class=\"code\" href=\"lsd_8c.html#a48\">rect_improve</a>(&amp;rec,angles,logNT,eps);\n02009         <span class=\"keywordflow\">if</span>( log_nfa &lt;= eps ) <span class=\"keywordflow\">continue</span>;\n02010 \n02011         <span class=\"comment\">/* A New Line Segment was found! */</span>\n02012         ++ls_count;  <span class=\"comment\">/* increase line segment counter */</span>\n02013 \n02014         <span class=\"comment\">/*</span>\n02015 <span class=\"comment\">           The gradient was computed with a 2x2 mask, its value corresponds to</span>\n02016 <span class=\"comment\">           points with an offset of (0.5,0.5), that should be added to output.</span>\n02017 <span class=\"comment\">           The coordinates origin is at the center of pixel (0,0).</span>\n02018 <span class=\"comment\">         */</span>\n02019         rec.<a class=\"code\" href=\"structrect.html#o0\">x1</a> += 0.5; rec.<a class=\"code\" href=\"structrect.html#o1\">y1</a> += 0.5;\n02020         rec.<a class=\"code\" href=\"structrect.html#o2\">x2</a> += 0.5; rec.<a class=\"code\" href=\"structrect.html#o3\">y2</a> += 0.5;\n02021 \n02022         <span class=\"comment\">/* scale the result values if a subsampling was performed */</span>\n02023         <span class=\"keywordflow\">if</span>( scale != 1.0 )\n02024           {\n02025             rec.<a class=\"code\" href=\"structrect.html#o0\">x1</a> /= scale; rec.<a class=\"code\" href=\"structrect.html#o1\">y1</a> /= scale;\n02026             rec.<a class=\"code\" href=\"structrect.html#o2\">x2</a> /= scale; rec.<a class=\"code\" href=\"structrect.html#o3\">y2</a> /= scale;\n02027             rec.<a class=\"code\" href=\"structrect.html#o4\">width</a> /= scale;\n02028           }\n02029 \n02030         <span class=\"comment\">/* add line segment found to output */</span>\n02031         <a class=\"code\" href=\"lsd_8c.html#a18\">add_5tuple</a>(out, rec.<a class=\"code\" href=\"structrect.html#o0\">x1</a>, rec.<a class=\"code\" href=\"structrect.html#o1\">y1</a>, rec.<a class=\"code\" href=\"structrect.html#o2\">x2</a>, rec.<a class=\"code\" href=\"structrect.html#o3\">y2</a>, rec.<a class=\"code\" href=\"structrect.html#o4\">width</a>);\n02032 \n02033         <span class=\"comment\">/* add region number to 'region' image if needed */</span>\n02034         <span class=\"keywordflow\">if</span>( region != NULL )\n02035           <span class=\"keywordflow\">for</span>(i=0; i&lt;reg_size; i++)\n02036             (*region)-&gt;data[reg[i].x+reg[i].y*(*region)-&gt;xsize] = ls_count;\n02037       }\n02038 \n02039 \n02040   <span class=\"comment\">/* free memory */</span>\n02041   <a class=\"code\" href=\"lsd_8c.html#a25\">free_image_double</a>(angles);\n02042   <a class=\"code\" href=\"lsd_8c.html#a25\">free_image_double</a>(modgrad);\n02043   <a class=\"code\" href=\"lsd_8c.html#a19\">free_image_char</a>(used);\n02044   free( (<span class=\"keywordtype\">void</span> *) reg );\n02045   free( (<span class=\"keywordtype\">void</span> *) mem_p );\n02046 \n02047   <span class=\"keywordflow\">return</span> out;\n02048 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8h_a15_cgraph.png\" border=\"0\" usemap=\"#lsd_8h_a15_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8h_a15_cgraph_map\">\n<area href=\"lsd_8c.html#a18\" shape=\"rect\" coords=\"433,8,521,34\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"594,261,645,288\" alt=\"\">\n<area href=\"lsd_8c.html#a19\" shape=\"rect\" coords=\"415,109,538,136\" alt=\"\">\n<area href=\"lsd_8c.html#a25\" shape=\"rect\" coords=\"409,160,545,186\" alt=\"\">\n<area href=\"lsd_8c.html#a29\" shape=\"rect\" coords=\"221,210,351,237\" alt=\"\">\n<area href=\"lsd_8c.html#a16\" shape=\"rect\" coords=\"419,261,534,288\" alt=\"\">\n<area href=\"lsd_8c.html#a30\" shape=\"rect\" coords=\"253,312,319,338\" alt=\"\">\n<area href=\"lsd_8c.html#a21\" shape=\"rect\" coords=\"214,362,358,389\" alt=\"\">\n<area href=\"lsd_8c.html#a24\" shape=\"rect\" coords=\"219,413,353,440\" alt=\"\">\n<area href=\"lsd_8c.html#a48\" shape=\"rect\" coords=\"237,464,335,490\" alt=\"\">\n<area href=\"lsd_8c.html#a50\" shape=\"rect\" coords=\"258,565,314,592\" alt=\"\">\n<area href=\"lsd_8c.html#a46\" shape=\"rect\" coords=\"433,489,521,516\" alt=\"\">\n<area href=\"lsd_8c.html#a47\" shape=\"rect\" coords=\"430,590,523,617\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a17\" doxytag=\"lsd.h::lsd\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a> lsd </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>image</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nLSD Simple Interface. \n<p>\n<dl compact><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=top><em>image</em>&nbsp;</td><td>Input image.</td></tr>\n  </table>\n</dl>\n<dl compact><dt><b>Returns:</b></dt><dd>a 5-tuple list of detected line segments. </dd></dl>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l02077\">2077</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, <a class=\"el\" href=\"lsd_8c-source.html#l02053\">lsd_scale()</a>, and <a class=\"el\" href=\"lsd_8h.html#a0\">ntuple_list</a>.\n<p>\n<div class=\"fragment\"><pre>02078 {\n02079   <span class=\"comment\">/* LSD parameters */</span>\n02080   <span class=\"keywordtype\">double</span> scale = 0.8;       <span class=\"comment\">/* Scale the image by Gaussian filter to 'scale'. */</span>\n02081 \n02082   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a52\">lsd_scale</a>(image,scale);\n02083 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8h_a17_cgraph.png\" border=\"0\" usemap=\"#lsd_8h_a17_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8h_a17_cgraph_map\">\n<area href=\"lsd_8c.html#a52\" shape=\"rect\" coords=\"96,312,173,338\" alt=\"\">\n<area href=\"lsd_8c.html#a51\" shape=\"rect\" coords=\"221,312,378,338\" alt=\"\">\n<area href=\"lsd_8c.html#a18\" shape=\"rect\" coords=\"646,8,734,34\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"808,261,858,288\" alt=\"\">\n<area href=\"lsd_8c.html#a19\" shape=\"rect\" coords=\"629,109,752,136\" alt=\"\">\n<area href=\"lsd_8c.html#a25\" shape=\"rect\" coords=\"622,160,758,186\" alt=\"\">\n<area href=\"lsd_8c.html#a29\" shape=\"rect\" coords=\"434,210,565,237\" alt=\"\">\n<area href=\"lsd_8c.html#a16\" shape=\"rect\" coords=\"633,261,748,288\" alt=\"\">\n<area href=\"lsd_8c.html#a30\" shape=\"rect\" coords=\"466,312,533,338\" alt=\"\">\n<area href=\"lsd_8c.html#a21\" shape=\"rect\" coords=\"428,362,572,389\" alt=\"\">\n<area href=\"lsd_8c.html#a24\" shape=\"rect\" coords=\"433,413,566,440\" alt=\"\">\n<area href=\"lsd_8c.html#a48\" shape=\"rect\" coords=\"450,464,549,490\" alt=\"\">\n<area href=\"lsd_8c.html#a50\" shape=\"rect\" coords=\"472,565,528,592\" alt=\"\">\n<area href=\"lsd_8c.html#a46\" shape=\"rect\" coords=\"646,489,734,516\" alt=\"\">\n<area href=\"lsd_8c.html#a47\" shape=\"rect\" coords=\"644,590,737,617\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a16\" doxytag=\"lsd.h::lsd_scale\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a> lsd_scale </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\"><a class=\"el\" href=\"structimage__double__s.html\">image_double</a>&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>image</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>scale</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nLSD Simple Interface with Scale. \n<p>\n<dl compact><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=top><em>image</em>&nbsp;</td><td>Input image.</td></tr>\n    <tr><td valign=top><em>scale</em>&nbsp;</td><td>When different than 1.0, LSD will scale the image by Gaussian filtering. Example: is scale=0.8, the input image will be subsampled to 80% of its size, and then the line segment detector will be applied. Suggested value: 0.8</td></tr>\n  </table>\n</dl>\n<dl compact><dt><b>Returns:</b></dt><dd>a 5-tuple list of detected line segments. </dd></dl>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l02053\">2053</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, and <a class=\"el\" href=\"lsd_8h.html#a0\">ntuple_list</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l02077\">lsd()</a>.\n<p>\n<div class=\"fragment\"><pre>02054 {\n02055   <span class=\"comment\">/* LSD parameters */</span>\n02056   <span class=\"keywordtype\">double</span> sigma_scale = 0.6; <span class=\"comment\">/* Sigma for Gaussian filter is computed as</span>\n02057 <span class=\"comment\">                                sigma = sigma_scale/scale.                    */</span>\n02058   <span class=\"keywordtype\">double</span> quant = 2.0;       <span class=\"comment\">/* Bound to the quantization error on the</span>\n02059 <span class=\"comment\">                                gradient norm.                                */</span>\n02060   <span class=\"keywordtype\">double</span> ang_th = 22.5;     <span class=\"comment\">/* Gradient angle tolerance in degrees.           */</span>\n02061   <span class=\"keywordtype\">double</span> eps = 0.0;         <span class=\"comment\">/* Detection threshold, -log10(NFA).              */</span>\n02062   <span class=\"keywordtype\">double</span> density_th = 0.7;  <span class=\"comment\">/* Minimal density of region points in rectangle. */</span>\n02063   <span class=\"keywordtype\">int</span> n_bins = 1024;        <span class=\"comment\">/* Number of bins in pseudo-ordering of gradient</span>\n02064 <span class=\"comment\">                               modulus.                                       */</span>\n02065   <span class=\"keywordtype\">double</span> max_grad = 255.0;  <span class=\"comment\">/* Gradient modulus in the highest bin. The</span>\n02066 <span class=\"comment\">                               default value corresponds to the highest</span>\n02067 <span class=\"comment\">                               gradient modulus on images with gray</span>\n02068 <span class=\"comment\">                               levels in [0,255].                             */</span>\n02069 \n02070   <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"lsd_8c.html#a51\">LineSegmentDetection</a>( image, scale, sigma_scale, quant, ang_th, eps,\n02071                                density_th, n_bins, max_grad, NULL );\n02072 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8h_a16_cgraph.png\" border=\"0\" usemap=\"#lsd_8h_a16_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8h_a16_cgraph_map\">\n<area href=\"lsd_8c.html#a51\" shape=\"rect\" coords=\"133,312,290,338\" alt=\"\">\n<area href=\"lsd_8c.html#a18\" shape=\"rect\" coords=\"558,8,646,34\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"720,261,770,288\" alt=\"\">\n<area href=\"lsd_8c.html#a19\" shape=\"rect\" coords=\"541,109,664,136\" alt=\"\">\n<area href=\"lsd_8c.html#a25\" shape=\"rect\" coords=\"534,160,670,186\" alt=\"\">\n<area href=\"lsd_8c.html#a29\" shape=\"rect\" coords=\"346,210,477,237\" alt=\"\">\n<area href=\"lsd_8c.html#a16\" shape=\"rect\" coords=\"545,261,660,288\" alt=\"\">\n<area href=\"lsd_8c.html#a30\" shape=\"rect\" coords=\"378,312,445,338\" alt=\"\">\n<area href=\"lsd_8c.html#a21\" shape=\"rect\" coords=\"340,362,484,389\" alt=\"\">\n<area href=\"lsd_8c.html#a24\" shape=\"rect\" coords=\"345,413,478,440\" alt=\"\">\n<area href=\"lsd_8c.html#a48\" shape=\"rect\" coords=\"362,464,461,490\" alt=\"\">\n<area href=\"lsd_8c.html#a50\" shape=\"rect\" coords=\"384,565,440,592\" alt=\"\">\n<area href=\"lsd_8c.html#a46\" shape=\"rect\" coords=\"558,489,646,516\" alt=\"\">\n<area href=\"lsd_8c.html#a47\" shape=\"rect\" coords=\"556,590,649,617\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a7\" doxytag=\"lsd.h::new_image_char\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structimage__char__s.html\">image_char</a> new_image_char </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>xsize</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>ysize</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCreate a new image_char of size 'xsize' times 'ysize'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00291\">291</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00082\">image_char_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h.html#a1\">image_char</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00083\">image_char_s::xsize</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00083\">image_char_s::ysize</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00316\">new_image_char_ini()</a>.\n<p>\n<div class=\"fragment\"><pre>00292 {\n00293   <a class=\"code\" href=\"structimage__char__s.html\">image_char</a> image;\n00294 \n00295   <span class=\"comment\">/* check parameters */</span>\n00296   <span class=\"keywordflow\">if</span>( xsize == 0 || ysize == 0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"new_image_char: invalid image size.\"</span>);\n00297 \n00298   <span class=\"comment\">/* get memory */</span>\n00299   image = (<a class=\"code\" href=\"structimage__char__s.html\">image_char</a>) malloc( <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structimage__char__s.html\">image_char_s</a>) );\n00300   <span class=\"keywordflow\">if</span>( image == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00301   image-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> = (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span> *) calloc( (size_t) (xsize*ysize),\n00302                                           <span class=\"keyword\">sizeof</span>(<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span>) );\n00303   <span class=\"keywordflow\">if</span>( image-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00304 \n00305   <span class=\"comment\">/* set image size */</span>\n00306   image-&gt;<a class=\"code\" href=\"structimage__char__s.html#o1\">xsize</a> = xsize;\n00307   image-&gt;<a class=\"code\" href=\"structimage__char__s.html#o2\">ysize</a> = ysize;\n00308 \n00309   <span class=\"keywordflow\">return</span> image;\n00310 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8h_a7_cgraph.png\" border=\"0\" usemap=\"#lsd_8h_a7_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8h_a7_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"181,8,232,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a8\" doxytag=\"lsd.h::new_image_char_ini\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structimage__char__s.html\">image_char</a> new_image_char_ini </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>xsize</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>ysize</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>unsigned char&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>fill_value</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCreate a new image_char of size 'xsize' times 'ysize', initialized to the value 'fill_value'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00316\">316</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00082\">image_char_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h.html#a1\">image_char</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00291\">new_image_char()</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>.\n<p>\n<div class=\"fragment\"><pre>00318 {\n00319   <a class=\"code\" href=\"structimage__char__s.html\">image_char</a> image = <a class=\"code\" href=\"lsd_8c.html#a20\">new_image_char</a>(xsize,ysize); <span class=\"comment\">/* create image */</span>\n00320   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> N = xsize*ysize;\n00321   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> i;\n00322 \n00323   <span class=\"comment\">/* check parameters */</span>\n00324   <span class=\"keywordflow\">if</span>( image == NULL || image-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a> == NULL )\n00325     <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"new_image_char_ini: invalid image.\"</span>);\n00326 \n00327   <span class=\"comment\">/* initialize */</span>\n00328   <span class=\"keywordflow\">for</span>(i=0; i&lt;N; i++) image-&gt;<a class=\"code\" href=\"structimage__char__s.html#o0\">data</a>[i] = fill_value;\n00329 \n00330   <span class=\"keywordflow\">return</span> image;\n00331 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8h_a8_cgraph.png\" border=\"0\" usemap=\"#lsd_8h_a8_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8h_a8_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"376,33,426,59\" alt=\"\">\n<area href=\"lsd_8c.html#a20\" shape=\"rect\" coords=\"204,58,326,85\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a13\" doxytag=\"lsd.h::new_image_double\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structimage__double__s.html\">image_double</a> new_image_double </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>xsize</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>ysize</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCreate a new image_double of size 'xsize' times 'ysize'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00398\">398</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00122\">image_double_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::xsize</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00123\">image_double_s::ysize</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00652\">ll_angle()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00422\">new_image_double_ini()</a>.\n<p>\n<div class=\"fragment\"><pre>00399 {\n00400   <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> image;\n00401 \n00402   <span class=\"comment\">/* check parameters */</span>\n00403   <span class=\"keywordflow\">if</span>( xsize == 0 || ysize == 0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"new_image_double: invalid image size.\"</span>);\n00404 \n00405   <span class=\"comment\">/* get memory */</span>\n00406   image = (<a class=\"code\" href=\"structimage__double__s.html\">image_double</a>) malloc( <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structimage__double__s.html\">image_double_s</a>) );\n00407   <span class=\"keywordflow\">if</span>( image == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00408   image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> = (<span class=\"keywordtype\">double</span> *) calloc( (size_t) (xsize*ysize), <span class=\"keyword\">sizeof</span>(<span class=\"keywordtype\">double</span>) );\n00409   <span class=\"keywordflow\">if</span>( image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a> == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00410 \n00411   <span class=\"comment\">/* set image size */</span>\n00412   image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o1\">xsize</a> = xsize;\n00413   image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o2\">ysize</a> = ysize;\n00414 \n00415   <span class=\"keywordflow\">return</span> image;\n00416 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8h_a13_cgraph.png\" border=\"0\" usemap=\"#lsd_8h_a13_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8h_a13_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"194,8,245,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a14\" doxytag=\"lsd.h::new_image_double_ini\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structimage__double__s.html\">image_double</a> new_image_double_ini </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>xsize</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>ysize</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>double&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>fill_value</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCreate a new image_double of size 'xsize' times 'ysize', initialized to the value 'fill_value'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00422\">422</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00122\">image_double_s::data</a>, <a class=\"el\" href=\"lsd_8h.html#a3\">image_double</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00398\">new_image_double()</a>.\n<p>\n<div class=\"fragment\"><pre>00424 {\n00425   <a class=\"code\" href=\"structimage__double__s.html\">image_double</a> image = <a class=\"code\" href=\"lsd_8c.html#a26\">new_image_double</a>(xsize,ysize); <span class=\"comment\">/* create image */</span>\n00426   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> N = xsize*ysize;\n00427   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> i;\n00428 \n00429   <span class=\"comment\">/* initialize */</span>\n00430   <span class=\"keywordflow\">for</span>(i=0; i&lt;N; i++) image-&gt;<a class=\"code\" href=\"structimage__double__s.html#o0\">data</a>[i] = fill_value;\n00431 \n00432   <span class=\"keywordflow\">return</span> image;\n00433 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8h_a14_cgraph.png\" border=\"0\" usemap=\"#lsd_8h_a14_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8h_a14_cgraph_map\">\n<area href=\"lsd_8c.html#a26\" shape=\"rect\" coords=\"217,8,353,34\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"402,8,453,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a10\" doxytag=\"lsd.h::new_image_int\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structimage__int__s.html\">image_int</a> new_image_int </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>xsize</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>ysize</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCreate a new image_int of size 'xsize' times 'ysize'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00347\">347</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00102\">image_int_s::data</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h.html#a2\">image_int</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00103\">image_int_s::xsize</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00103\">image_int_s::ysize</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00371\">new_image_int_ini()</a>.\n<p>\n<div class=\"fragment\"><pre>00348 {\n00349   <a class=\"code\" href=\"structimage__int__s.html\">image_int</a> image;\n00350 \n00351   <span class=\"comment\">/* check parameters */</span>\n00352   <span class=\"keywordflow\">if</span>( xsize == 0 || ysize == 0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"new_image_int: invalid image size.\"</span>);\n00353 \n00354   <span class=\"comment\">/* get memory */</span>\n00355   image = (<a class=\"code\" href=\"structimage__int__s.html\">image_int</a>) malloc( <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structimage__int__s.html\">image_int_s</a>) );\n00356   <span class=\"keywordflow\">if</span>( image == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00357   image-&gt;<a class=\"code\" href=\"structimage__int__s.html#o0\">data</a> = (<span class=\"keywordtype\">int</span> *) calloc( (size_t) (xsize*ysize), <span class=\"keyword\">sizeof</span>(<span class=\"keywordtype\">int</span>) );\n00358   <span class=\"keywordflow\">if</span>( image-&gt;<a class=\"code\" href=\"structimage__int__s.html#o0\">data</a> == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00359 \n00360   <span class=\"comment\">/* set image size */</span>\n00361   image-&gt;<a class=\"code\" href=\"structimage__int__s.html#o1\">xsize</a> = xsize;\n00362   image-&gt;<a class=\"code\" href=\"structimage__int__s.html#o2\">ysize</a> = ysize;\n00363 \n00364   <span class=\"keywordflow\">return</span> image;\n00365 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8h_a10_cgraph.png\" border=\"0\" usemap=\"#lsd_8h_a10_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8h_a10_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"168,8,218,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a11\" doxytag=\"lsd.h::new_image_int_ini\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structimage__int__s.html\">image_int</a> new_image_int_ini </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>xsize</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>unsigned int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>ysize</em>, </td>\n        </tr>\n        <tr>\n          <td></td>\n          <td></td>\n          <td class=\"md\" nowrap>int&nbsp;</td>\n          <td class=\"mdname\" nowrap> <em>fill_value</em></td>\n        </tr>\n        <tr>\n          <td></td>\n          <td class=\"md\">)&nbsp;</td>\n          <td class=\"md\" colspan=\"2\"></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCreate a new image_int of size 'xsize' times 'ysize', initialized to the value 'fill_value'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00371\">371</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00102\">image_int_s::data</a>, <a class=\"el\" href=\"lsd_8h.html#a2\">image_int</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00347\">new_image_int()</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>.\n<p>\n<div class=\"fragment\"><pre>00373 {\n00374   <a class=\"code\" href=\"structimage__int__s.html\">image_int</a> image = <a class=\"code\" href=\"lsd_8c.html#a23\">new_image_int</a>(xsize,ysize); <span class=\"comment\">/* create image */</span>\n00375   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> N = xsize*ysize;\n00376   <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> i;\n00377 \n00378   <span class=\"comment\">/* initialize */</span>\n00379   <span class=\"keywordflow\">for</span>(i=0; i&lt;N; i++) image-&gt;<a class=\"code\" href=\"structimage__int__s.html#o0\">data</a>[i] = fill_value;\n00380 \n00381   <span class=\"keywordflow\">return</span> image;\n00382 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8h_a11_cgraph.png\" border=\"0\" usemap=\"#lsd_8h_a11_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8h_a11_cgraph_map\">\n<area href=\"lsd_8c.html#a23\" shape=\"rect\" coords=\"189,8,301,34\" alt=\"\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"349,8,400,34\" alt=\"\">\n</map>\n<a class=\"anchor\" name=\"a5\" doxytag=\"lsd.h::new_ntuple_list\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> <a class=\"el\" href=\"structntuple__list__s.html\">ntuple_list</a> new_ntuple_list </td>\n          <td class=\"md\" valign=\"top\">(&nbsp;</td>\n          <td class=\"md\" nowrap valign=\"top\">unsigned int&nbsp;</td>\n          <td class=\"mdname1\" valign=\"top\" nowrap> <em>dim</em>          </td>\n          <td class=\"md\" valign=\"top\">&nbsp;)&nbsp;</td>\n          <td class=\"md\" nowrap></td>\n        </tr>\n\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\nCreate an n-tuple list and allocate memory for one element. \n<p>\n<dl compact><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=top><em>dim</em>&nbsp;</td><td>the dimension (n) of the n-tuple. </td></tr>\n  </table>\n</dl>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00206\">206</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferences <a class=\"el\" href=\"lsd_8h-source.html#l00059\">ntuple_list_s::dim</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00133\">error()</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00058\">ntuple_list_s::max_size</a>, <a class=\"el\" href=\"lsd_8h.html#a0\">ntuple_list</a>, <a class=\"el\" href=\"lsd_8h-source.html#l00057\">ntuple_list_s::size</a>, and <a class=\"el\" href=\"lsd_8h-source.html#l00060\">ntuple_list_s::values</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>.\n<p>\n<div class=\"fragment\"><pre>00207 {\n00208   <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a> n_tuple;\n00209 \n00210   <span class=\"comment\">/* check parameters */</span>\n00211   <span class=\"keywordflow\">if</span>( dim == 0 ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"new_ntuple_list: 'dim' must be positive.\"</span>);\n00212 \n00213   <span class=\"comment\">/* get memory for list structure */</span>\n00214   n_tuple = (<a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list</a>) malloc( <span class=\"keyword\">sizeof</span>(<span class=\"keyword\">struct</span> <a class=\"code\" href=\"structntuple__list__s.html\">ntuple_list_s</a>) );\n00215   <span class=\"keywordflow\">if</span>( n_tuple == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00216 \n00217   <span class=\"comment\">/* initialize list */</span>\n00218   n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o0\">size</a> = 0;\n00219   n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o1\">max_size</a> = 1;\n00220   n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o2\">dim</a> = dim;\n00221 \n00222   <span class=\"comment\">/* get memory for tuples */</span>\n00223   n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> = (<span class=\"keywordtype\">double</span> *) malloc( dim*n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o1\">max_size</a> * <span class=\"keyword\">sizeof</span>(<span class=\"keywordtype\">double</span>) );\n00224   <span class=\"keywordflow\">if</span>( n_tuple-&gt;<a class=\"code\" href=\"structntuple__list__s.html#o3\">values</a> == NULL ) <a class=\"code\" href=\"lsd_8c.html#a12\">error</a>(<span class=\"stringliteral\">\"not enough memory.\"</span>);\n00225 \n00226   <span class=\"keywordflow\">return</span> n_tuple;\n00227 }\n</pre></div>    </td>\n  </tr>\n</table>\n\n<p>\nHere is the call graph for this function:<p><center><img src=\"lsd_8h_a5_cgraph.png\" border=\"0\" usemap=\"#lsd_8h_a5_cgraph_map\" alt=\"\"></center>\n<map name=\"lsd_8h_a5_cgraph_map\">\n<area href=\"lsd_8c.html#a12\" shape=\"rect\" coords=\"170,8,221,34\" alt=\"\">\n</map>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:48 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/structcoorlist.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: coorlist struct Reference</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindex\" href=\"globals.html\">Globals</a></div>\n<h1>coorlist Struct Reference</h1>Collaboration diagram for coorlist:<p><center><img src=\"structcoorlist__coll__graph.png\" border=\"0\" usemap=\"#coorlist__coll__map\" alt=\"Collaboration graph\"></center>\n<center><font size=\"2\">[<a href=\"graph_legend.html\">legend</a>]</font></center><hr><a name=\"_details\"></a><h2>Detailed Description</h2>\nChained list of coordinates. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00114\">114</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.<table border=0 cellpadding=0 cellspacing=0>\n<tr><td></td></tr>\n<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structcoorlist.html#o0\">x</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structcoorlist.html#o1\">y</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top><a class=\"el\" href=\"structcoorlist.html\">coorlist</a> *&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structcoorlist.html#o2\">next</a></td></tr>\n\n</table>\n<hr><h2>Field Documentation</h2>\n<a class=\"anchor\" name=\"o2\" doxytag=\"coorlist::next\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> struct <a class=\"el\" href=\"structcoorlist.html\">coorlist</a>* <a class=\"el\" href=\"structcoorlist.html#o2\">coorlist::next</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00117\">117</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o0\" doxytag=\"coorlist::x\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> int <a class=\"el\" href=\"structcoorlist.html#o0\">coorlist::x</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00116\">116</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o1\" doxytag=\"coorlist::y\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> int <a class=\"el\" href=\"structcoorlist.html#o1\">coorlist::y</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00116\">116</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.    </td>\n  </tr>\n</table>\n<hr>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a></ul>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:49 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/structimage__char__s.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: image_char_s struct Reference</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindex\" href=\"globals.html\">Globals</a></div>\n<h1>image_char_s Struct Reference</h1><code>#include &lt;<a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>&gt;</code>\n<p>\n<hr><a name=\"_details\"></a><h2>Detailed Description</h2>\nchar image data type \n<p>\nThe pixel value at (x,y) is accessed by:<p>\nimage-&gt;data[ x + y * image-&gt;xsize ]<p>\nwith x and y integer. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8h-source.html#l00080\">80</a> of file <a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>.<table border=0 cellpadding=0 cellspacing=0>\n<tr><td></td></tr>\n<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>unsigned char *&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structimage__char__s.html#o0\">data</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>unsigned int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structimage__char__s.html#o1\">xsize</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>unsigned int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structimage__char__s.html#o2\">ysize</a></td></tr>\n\n</table>\n<hr><h2>Field Documentation</h2>\n<a class=\"anchor\" name=\"o0\" doxytag=\"image_char_s::data\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> unsigned char* <a class=\"el\" href=\"structimage__char__s.html#o0\">image_char_s::data</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8h-source.html#l00082\">82</a> of file <a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00280\">free_image_char()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00291\">new_image_char()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00316\">new_image_char_ini()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01592\">region_grow()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o1\" doxytag=\"image_char_s::xsize\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> unsigned int <a class=\"el\" href=\"structimage__char__s.html#o1\">image_char_s::xsize</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8h-source.html#l00083\">83</a> of file <a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00291\">new_image_char()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01592\">region_grow()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o2\" doxytag=\"image_char_s::ysize\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> unsigned int <a class=\"el\" href=\"structimage__char__s.html#o2\">image_char_s::ysize</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8h-source.html#l00083\">83</a> of file <a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00291\">new_image_char()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01592\">region_grow()</a>.    </td>\n  </tr>\n</table>\n<hr>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a></ul>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:49 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/structimage__double__s.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: image_double_s struct Reference</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindex\" href=\"globals.html\">Globals</a></div>\n<h1>image_double_s Struct Reference</h1><code>#include &lt;<a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>&gt;</code>\n<p>\n<hr><a name=\"_details\"></a><h2>Detailed Description</h2>\ndouble image data type \n<p>\nThe pixel value at (x,y) is accessed by:<p>\nimage-&gt;data[ x + y * image-&gt;xsize ]<p>\nwith x and y integer. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8h-source.html#l00120\">120</a> of file <a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>.<table border=0 cellpadding=0 cellspacing=0>\n<tr><td></td></tr>\n<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double *&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structimage__double__s.html#o0\">data</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>unsigned int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structimage__double__s.html#o1\">xsize</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>unsigned int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structimage__double__s.html#o2\">ysize</a></td></tr>\n\n</table>\n<hr><h2>Field Documentation</h2>\n<a class=\"anchor\" name=\"o0\" doxytag=\"image_double_s::data\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double* <a class=\"el\" href=\"structimage__double__s.html#o0\">image_double_s::data</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8h-source.html#l00122\">122</a> of file <a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00387\">free_image_double()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01456\">get_theta()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00781\">isaligned()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00652\">ll_angle()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00398\">new_image_double()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00422\">new_image_double_ini()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01592\">region_grow()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o1\" doxytag=\"image_double_s::xsize\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> unsigned int <a class=\"el\" href=\"structimage__double__s.html#o1\">image_double_s::xsize</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8h-source.html#l00123\">123</a> of file <a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01456\">get_theta()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00781\">isaligned()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00652\">ll_angle()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00398\">new_image_double()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01370\">rect_nfa()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01592\">region_grow()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o2\" doxytag=\"image_double_s::ysize\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> unsigned int <a class=\"el\" href=\"structimage__double__s.html#o2\">image_double_s::ysize</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8h-source.html#l00123\">123</a> of file <a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00781\">isaligned()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00652\">ll_angle()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00398\">new_image_double()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01370\">rect_nfa()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01592\">region_grow()</a>.    </td>\n  </tr>\n</table>\n<hr>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a></ul>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:49 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/structimage__int__s.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: image_int_s struct Reference</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindex\" href=\"globals.html\">Globals</a></div>\n<h1>image_int_s Struct Reference</h1><code>#include &lt;<a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>&gt;</code>\n<p>\n<hr><a name=\"_details\"></a><h2>Detailed Description</h2>\nint image data type \n<p>\nThe pixel value at (x,y) is accessed by:<p>\nimage-&gt;data[ x + y * image-&gt;xsize ]<p>\nwith x and y integer. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8h-source.html#l00100\">100</a> of file <a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>.<table border=0 cellpadding=0 cellspacing=0>\n<tr><td></td></tr>\n<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>int *&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structimage__int__s.html#o0\">data</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>unsigned int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structimage__int__s.html#o1\">xsize</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>unsigned int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structimage__int__s.html#o2\">ysize</a></td></tr>\n\n</table>\n<hr><h2>Field Documentation</h2>\n<a class=\"anchor\" name=\"o0\" doxytag=\"image_int_s::data\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> int* <a class=\"el\" href=\"structimage__int__s.html#o0\">image_int_s::data</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8h-source.html#l00102\">102</a> of file <a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00336\">free_image_int()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00347\">new_image_int()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00371\">new_image_int_ini()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o1\" doxytag=\"image_int_s::xsize\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> unsigned int <a class=\"el\" href=\"structimage__int__s.html#o1\">image_int_s::xsize</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8h-source.html#l00103\">103</a> of file <a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00347\">new_image_int()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o2\" doxytag=\"image_int_s::ysize\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> unsigned int <a class=\"el\" href=\"structimage__int__s.html#o2\">image_int_s::ysize</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8h-source.html#l00103\">103</a> of file <a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00347\">new_image_int()</a>.    </td>\n  </tr>\n</table>\n<hr>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a></ul>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:49 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/structntuple__list__s.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: ntuple_list_s struct Reference</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindex\" href=\"globals.html\">Globals</a></div>\n<h1>ntuple_list_s Struct Reference</h1><code>#include &lt;<a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>&gt;</code>\n<p>\n<hr><a name=\"_details\"></a><h2>Detailed Description</h2>\n'list of n-tuple' data type \n<p>\nThe i component, of the n-tuple number j, of an n-tuple list 'ntl' is accessed with:<p>\nntl-&gt;values[ i + j * ntl-&gt;dim ]<p>\nThe dimension of the n-tuple (n) is:<p>\nntl-&gt;dim<p>\nThe number of number of n-tuples in the list is:<p>\nntl-&gt;size<p>\nThe maximum number of n-tuples that can be stored in the list with the allocated memory at a given time is given by:<p>\nntl-&gt;max_size \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8h-source.html#l00055\">55</a> of file <a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>.<table border=0 cellpadding=0 cellspacing=0>\n<tr><td></td></tr>\n<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>unsigned int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structntuple__list__s.html#o0\">size</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>unsigned int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structntuple__list__s.html#o1\">max_size</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>unsigned int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structntuple__list__s.html#o2\">dim</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double *&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structntuple__list__s.html#o3\">values</a></td></tr>\n\n</table>\n<hr><h2>Field Documentation</h2>\n<a class=\"anchor\" name=\"o2\" doxytag=\"ntuple_list_s::dim\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> unsigned int <a class=\"el\" href=\"structntuple__list__s.html#o2\">ntuple_list_s::dim</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8h-source.html#l00059\">59</a> of file <a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00250\">add_5tuple()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00232\">enlarge_ntuple_list()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00448\">gaussian_kernel()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00206\">new_ntuple_list()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o1\" doxytag=\"ntuple_list_s::max_size\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> unsigned int <a class=\"el\" href=\"structntuple__list__s.html#o1\">ntuple_list_s::max_size</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8h-source.html#l00058\">58</a> of file <a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00250\">add_5tuple()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00232\">enlarge_ntuple_list()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00448\">gaussian_kernel()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00206\">new_ntuple_list()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o0\" doxytag=\"ntuple_list_s::size\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> unsigned int <a class=\"el\" href=\"structntuple__list__s.html#o0\">ntuple_list_s::size</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8h-source.html#l00057\">57</a> of file <a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00250\">add_5tuple()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00448\">gaussian_kernel()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00206\">new_ntuple_list()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o3\" doxytag=\"ntuple_list_s::values\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double* <a class=\"el\" href=\"structntuple__list__s.html#o3\">ntuple_list_s::values</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8h-source.html#l00060\">60</a> of file <a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l00250\">add_5tuple()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00232\">enlarge_ntuple_list()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00194\">free_ntuple_list()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00448\">gaussian_kernel()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l00511\">gaussian_sampler()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l00206\">new_ntuple_list()</a>.    </td>\n  </tr>\n</table>\n<hr>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"lsd_8h-source.html\">lsd.h</a></ul>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:49 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/structpoint.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: point struct Reference</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindex\" href=\"globals.html\">Globals</a></div>\n<h1>point Struct Reference</h1><hr><a name=\"_details\"></a><h2>Detailed Description</h2>\nA point (or pixel). \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00123\">123</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.<table border=0 cellpadding=0 cellspacing=0>\n<tr><td></td></tr>\n<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structpoint.html#o0\">x</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structpoint.html#o1\">y</a></td></tr>\n\n</table>\n<hr><h2>Field Documentation</h2>\n<a class=\"anchor\" name=\"o0\" doxytag=\"point::x\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> int <a class=\"el\" href=\"structpoint.html#o0\">point::x</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00123\">123</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01456\">get_theta()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01592\">region_grow()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o1\" doxytag=\"point::y\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> int <a class=\"el\" href=\"structpoint.html#o1\">point::y</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l00123\">123</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01456\">get_theta()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01592\">region_grow()</a>.    </td>\n  </tr>\n</table>\n<hr>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a></ul>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:49 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/structrect.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: rect struct Reference</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindex\" href=\"globals.html\">Globals</a></div>\n<h1>rect Struct Reference</h1><hr><a name=\"_details\"></a><h2>Detailed Description</h2>\nRectangle structure: line segment with width. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01057\">1057</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.<table border=0 cellpadding=0 cellspacing=0>\n<tr><td></td></tr>\n<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect.html#o0\">x1</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect.html#o1\">y1</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect.html#o2\">x2</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect.html#o3\">y2</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect.html#o4\">width</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect.html#o5\">x</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect.html#o6\">y</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect.html#o7\">theta</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect.html#o8\">dx</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect.html#o9\">dy</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect.html#o10\">prec</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect.html#o11\">p</a></td></tr>\n\n</table>\n<hr><h2>Field Documentation</h2>\n<a class=\"anchor\" name=\"o8\" doxytag=\"rect::dx\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double <a class=\"el\" href=\"structrect.html#o8\">rect::dx</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01063\">1063</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01071\">rect_copy()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01644\">rect_improve()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01299\">ri_ini()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o9\" doxytag=\"rect::dy\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double <a class=\"el\" href=\"structrect.html#o9\">rect::dy</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01063\">1063</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01071\">rect_copy()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01644\">rect_improve()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01299\">ri_ini()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o11\" doxytag=\"rect::p\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double <a class=\"el\" href=\"structrect.html#o11\">rect::p</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01065\">1065</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01071\">rect_copy()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01644\">rect_improve()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01370\">rect_nfa()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o10\" doxytag=\"rect::prec\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double <a class=\"el\" href=\"structrect.html#o10\">rect::prec</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01064\">1064</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01071\">rect_copy()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01644\">rect_improve()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01370\">rect_nfa()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o7\" doxytag=\"rect::theta\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double <a class=\"el\" href=\"structrect.html#o7\">rect::theta</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01062\">1062</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01071\">rect_copy()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01370\">rect_nfa()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o4\" doxytag=\"rect::width\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double <a class=\"el\" href=\"structrect.html#o4\">rect::width</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01060\">1060</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01071\">rect_copy()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01644\">rect_improve()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01299\">ri_ini()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o5\" doxytag=\"rect::x\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double <a class=\"el\" href=\"structrect.html#o5\">rect::x</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01061\">1061</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01071\">rect_copy()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o0\" doxytag=\"rect::x1\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double <a class=\"el\" href=\"structrect.html#o0\">rect::x1</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01059\">1059</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01071\">rect_copy()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01644\">rect_improve()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01299\">ri_ini()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o2\" doxytag=\"rect::x2\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double <a class=\"el\" href=\"structrect.html#o2\">rect::x2</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01059\">1059</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01071\">rect_copy()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01644\">rect_improve()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01299\">ri_ini()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o6\" doxytag=\"rect::y\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double <a class=\"el\" href=\"structrect.html#o6\">rect::y</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01061\">1061</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01071\">rect_copy()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o1\" doxytag=\"rect::y1\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double <a class=\"el\" href=\"structrect.html#o1\">rect::y1</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01059\">1059</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01071\">rect_copy()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01644\">rect_improve()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01299\">ri_ini()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o3\" doxytag=\"rect::y2\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double <a class=\"el\" href=\"structrect.html#o3\">rect::y2</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01059\">1059</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01913\">LineSegmentDetection()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01071\">rect_copy()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01644\">rect_improve()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01757\">reduce_region_radius()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01835\">refine()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01499\">region2rect()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01299\">ri_ini()</a>.    </td>\n  </tr>\n</table>\n<hr>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a></ul>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:49 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doc/structrect__iter.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\">\n<title>LSD: rect_iter struct Reference</title>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\">\n</head><body>\n<!-- Generated by Doxygen 1.3.4 -->\n<div class=\"qindex\"><a class=\"qindex\" href=\"index.html\">Main&nbsp;Page</a> | <a class=\"qindex\" href=\"annotated.html\">Data&nbsp;Structures</a> | <a class=\"qindex\" href=\"files.html\">File&nbsp;List</a> | <a class=\"qindex\" href=\"functions.html\">Data&nbsp;Fields</a> | <a class=\"qindex\" href=\"globals.html\">Globals</a></div>\n<h1>rect_iter Struct Reference</h1><hr><a name=\"_details\"></a><h2>Detailed Description</h2>\nRectangle points iterator. \n<p>\nThe integer coordinates of pixels inside a rectangle are iteratively explored. This structure keep track of the process and functions <a class=\"el\" href=\"lsd_8c.html#a43\">ri_ini()</a>, <a class=\"el\" href=\"lsd_8c.html#a42\">ri_inc()</a>, <a class=\"el\" href=\"lsd_8c.html#a41\">ri_end()</a>, and <a class=\"el\" href=\"lsd_8c.html#a40\">ri_del()</a> are used in the process. An example of how to use the iterator is as follows: <div class=\"fragment\"><pre>      <span class=\"keyword\">struct </span><a class=\"code\" href=\"structrect.html\">rect</a> * rec = XXX; <span class=\"comment\">// some rectangle</span>\n      <a class=\"code\" href=\"structrect__iter.html\">rect_iter</a> * i;\n      <span class=\"keywordflow\">for</span>( i=<a class=\"code\" href=\"lsd_8c.html#a43\">ri_ini</a>(rec); !<a class=\"code\" href=\"lsd_8c.html#a41\">ri_end</a>(i); <a class=\"code\" href=\"lsd_8c.html#a42\">ri_inc</a>(i) )\n        {\n          <span class=\"comment\">// your code, using 'i-&gt;x' and 'i-&gt;y' as coordinates</span>\n        }\n      <a class=\"code\" href=\"lsd_8c.html#a40\">ri_del</a>(i); <span class=\"comment\">// delete iterator</span>\n</pre></div>The pixels are explored 'column' by 'column', where we call 'column' a set of pixels with the same x value that are inside the rectangle. The following is an schematic representation of a rectangle, the 'column' being explored is marked by colons, and the current pixel being explored is 'x,y'. <div class=\"fragment\"><pre>\n\n              vx[1],vy[1]\n                 *   *\n                *       *\n               *           *\n              *               ye\n             *                :  *\n        vx[0],vy[0]           :     *\n               *              :        *\n                  *          x,y          *\n                     *        :              *\n                        *     :            vx[2],vy[2]\n                           *  :                *\n        y                     ys              *\n        ^                        *           *\n        |                           *       *\n        |                              *   *\n        +---&gt; x                      vx[3],vy[3]\n\n    </pre></div>The first 'column' to be explored is the one with the smaller x value. Each 'column' is explored starting from the pixel of the 'column' (inside the rectangle) with the smaller y value.<p>\nThe four corners of the rectangle are stored in order that rotates around the corners at the arrays 'vx[]' and 'vy[]'. The first point is always the one with smaller x value.<p>\n'x' and 'y' are the coordinates of the pixel being explored. 'ys' and 'ye' are the start and end values of the current column being explored. So, 'ys' &lt; 'ye'. \n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01147\">1147</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.<table border=0 cellpadding=0 cellspacing=0>\n<tr><td></td></tr>\n<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect__iter.html#o0\">vx</a> [4]</td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect__iter.html#o1\">vy</a> [4]</td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect__iter.html#o2\">ys</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>double&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect__iter.html#o3\">ye</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect__iter.html#o4\">x</a></td></tr>\n\n<tr><td class=\"memItemLeft\" nowrap align=right valign=top>int&nbsp;</td><td class=\"memItemRight\" valign=bottom><a class=\"el\" href=\"structrect__iter.html#o5\">y</a></td></tr>\n\n</table>\n<hr><h2>Field Documentation</h2>\n<a class=\"anchor\" name=\"o0\" doxytag=\"rect_iter::vx\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double <a class=\"el\" href=\"structrect__iter.html#o0\">rect_iter::vx</a>[4]\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01149\">1149</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01213\">ri_end()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01229\">ri_inc()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01299\">ri_ini()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o1\" doxytag=\"rect_iter::vy\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double <a class=\"el\" href=\"structrect__iter.html#o1\">rect_iter::vy</a>[4]\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01150\">1150</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01229\">ri_inc()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01299\">ri_ini()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o4\" doxytag=\"rect_iter::x\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> int <a class=\"el\" href=\"structrect__iter.html#o4\">rect_iter::x</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01152\">1152</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01370\">rect_nfa()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01213\">ri_end()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01229\">ri_inc()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01299\">ri_ini()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o5\" doxytag=\"rect_iter::y\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> int <a class=\"el\" href=\"structrect__iter.html#o5\">rect_iter::y</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01152\">1152</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01370\">rect_nfa()</a>, <a class=\"el\" href=\"lsd_8c-source.html#l01229\">ri_inc()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01299\">ri_ini()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o3\" doxytag=\"rect_iter::ye\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double <a class=\"el\" href=\"structrect__iter.html#o3\">rect_iter::ye</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01151\">1151</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01229\">ri_inc()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01299\">ri_ini()</a>.    </td>\n  </tr>\n</table>\n<a class=\"anchor\" name=\"o2\" doxytag=\"rect_iter::ys\" ></a><p>\n<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">\n  <tr>\n    <td class=\"mdRow\">\n      <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n        <tr>\n          <td class=\"md\" nowrap valign=\"top\"> double <a class=\"el\" href=\"structrect__iter.html#o2\">rect_iter::ys</a>\n      </table>\n    </td>\n  </tr>\n</table>\n<table cellspacing=5 cellpadding=0 border=0>\n  <tr>\n    <td>\n      &nbsp;\n    </td>\n    <td>\n\n<p>\n\n<p>\nDefinition at line <a class=\"el\" href=\"lsd_8c-source.html#l01151\">1151</a> of file <a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a>.\n<p>\nReferenced by <a class=\"el\" href=\"lsd_8c-source.html#l01229\">ri_inc()</a>, and <a class=\"el\" href=\"lsd_8c-source.html#l01299\">ri_ini()</a>.    </td>\n  </tr>\n</table>\n<hr>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"lsd_8c-source.html\">lsd.c</a></ul>\n<hr size=\"1\"><address style=\"align: right;\"><small>Generated on Fri Dec 3 10:18:49 2010 for LSD by\n<a href=\"http://www.doxygen.org/index.html\">\n<img src=\"doxygen.png\" alt=\"doxygen\" align=\"middle\" border=0 > \n</a>1.3.4 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "thirdparty/LSD/doxygen.config",
    "content": "# Doxyfile 1.3.4\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) for a project\n#\n# All text after a hash (#) is considered a comment and will be ignored\n# The format is:\n#       TAG = value [value, ...]\n# For lists items can also be appended using:\n#       TAG += value [value, ...]\n# Values that contain spaces should be placed between quotes (\" \")\n\n#---------------------------------------------------------------------------\n# Project related configuration options\n#---------------------------------------------------------------------------\n\n# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \n# by quotes) that should identify the project.\n\nPROJECT_NAME           = LSD\n\n# The PROJECT_NUMBER tag can be used to enter a project or revision number. \n# This could be handy for archiving the generated documentation or \n# if some version control system is used.\n\nPROJECT_NUMBER         = \n\n# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \n# base path where the generated documentation will be put. \n# If a relative path is entered, it will be relative to the location \n# where doxygen was started. If left blank the current directory will be used.\n\nOUTPUT_DIRECTORY       = \n\n# The OUTPUT_LANGUAGE tag is used to specify the language in which all \n# documentation generated by doxygen is written. Doxygen will use this \n# information to generate all constant output in the proper language. \n# The default language is English, other supported languages are: \n# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, \n# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en \n# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese, \n# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.\n\nOUTPUT_LANGUAGE        = English\n\n# This tag can be used to specify the encoding used in the generated output. \n# The encoding is not always determined by the language that is chosen, \n# but also whether or not the output is meant for Windows or non-Windows users. \n# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES \n# forces the Windows encoding (this is the default for the Windows binary), \n# whereas setting the tag to NO uses a Unix-style encoding (the default for \n# all platforms other than Windows).\n\nUSE_WINDOWS_ENCODING   = NO\n\n# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \n# include brief member descriptions after the members that are listed in \n# the file and class documentation (similar to JavaDoc). \n# Set to NO to disable this.\n\nBRIEF_MEMBER_DESC      = YES\n\n# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \n# the brief description of a member or function before the detailed description. \n# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \n# brief descriptions will be completely suppressed.\n\nREPEAT_BRIEF           = YES\n\n# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \n# Doxygen will generate a detailed section even if there is only a brief \n# description.\n\nALWAYS_DETAILED_SEC    = NO\n\n# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited \n# members of a class in the documentation of that class as if those members were \n# ordinary class members. Constructors, destructors and assignment operators of \n# the base classes will not be shown.\n\nINLINE_INHERITED_MEMB  = NO\n\n# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \n# path before files name in the file list and in the header files. If set \n# to NO the shortest path that makes the file name unique will be used.\n\nFULL_PATH_NAMES        = NO\n\n# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \n# can be used to strip a user-defined part of the path. Stripping is \n# only done if one of the specified strings matches the left-hand part of \n# the path. It is allowed to use relative paths in the argument list.\n\nSTRIP_FROM_PATH        = \n\n# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \n# (but less readable) file names. This can be useful is your file systems \n# doesn't support long names like on DOS, Mac, or CD-ROM.\n\nSHORT_NAMES            = NO\n\n# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \n# will interpret the first line (until the first dot) of a JavaDoc-style \n# comment as the brief description. If set to NO, the JavaDoc \n# comments will behave just like the Qt-style comments (thus requiring an \n# explict @brief command for a brief description.\n\nJAVADOC_AUTOBRIEF      = YES\n\n# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \n# treat a multi-line C++ special comment block (i.e. a block of //! or /// \n# comments) as a brief description. This used to be the default behaviour. \n# The new default is to treat a multi-line C++ comment block as a detailed \n# description. Set this tag to YES if you prefer the old behaviour instead.\n\nMULTILINE_CPP_IS_BRIEF = NO\n\n# If the DETAILS_AT_TOP tag is set to YES then Doxygen \n# will output the detailed description near the top, like JavaDoc.\n# If set to NO, the detailed description appears after the member \n# documentation.\n\nDETAILS_AT_TOP         = YES\n\n# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \n# member inherits the documentation from any documented member that it \n# reimplements.\n\nINHERIT_DOCS           = YES\n\n# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \n# tag is set to YES, then doxygen will reuse the documentation of the first \n# member in the group (if any) for the other members of the group. By default \n# all members of a group must be documented explicitly.\n\nDISTRIBUTE_GROUP_DOC   = NO\n\n# The TAB_SIZE tag can be used to set the number of spaces in a tab. \n# Doxygen uses this value to replace tabs by spaces in code fragments.\n\nTAB_SIZE               = 8\n\n# This tag can be used to specify a number of aliases that acts \n# as commands in the documentation. An alias has the form \"name=value\". \n# For example adding \"sideeffect=\\par Side Effects:\\n\" will allow you to \n# put the command \\sideeffect (or @sideeffect) in the documentation, which \n# will result in a user-defined paragraph with heading \"Side Effects:\". \n# You can put \\n's in the value part of an alias to insert newlines.\n\nALIASES                = \n\n# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources \n# only. Doxygen will then generate output that is more tailored for C. \n# For instance, some of the names that are used will be different. The list \n# of all members will be omitted, etc.\n\nOPTIMIZE_OUTPUT_FOR_C  = YES\n\n# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources \n# only. Doxygen will then generate output that is more tailored for Java. \n# For instance, namespaces will be presented as packages, qualified scopes \n# will look different, etc.\n\nOPTIMIZE_OUTPUT_JAVA   = NO\n\n# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \n# the same type (for instance a group of public functions) to be put as a \n# subgroup of that type (e.g. under the Public Functions section). Set it to \n# NO to prevent subgrouping. Alternatively, this can be done per class using \n# the \\nosubgrouping command.\n\nSUBGROUPING            = YES\n\n#---------------------------------------------------------------------------\n# Build related configuration options\n#---------------------------------------------------------------------------\n\n# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \n# documentation are documented, even if no documentation was available. \n# Private class members and static file members will be hidden unless \n# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\n\nEXTRACT_ALL            = YES\n\n# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \n# will be included in the documentation.\n\nEXTRACT_PRIVATE        = YES\n\n# If the EXTRACT_STATIC tag is set to YES all static members of a file \n# will be included in the documentation.\n\nEXTRACT_STATIC         = YES\n\n# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \n# defined locally in source files will be included in the documentation. \n# If set to NO only classes defined in header files are included.\n\nEXTRACT_LOCAL_CLASSES  = YES\n\n# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \n# undocumented members of documented classes, files or namespaces. \n# If set to NO (the default) these members will be included in the \n# various overviews, but no documentation section is generated. \n# This option has no effect if EXTRACT_ALL is enabled.\n\nHIDE_UNDOC_MEMBERS     = NO\n\n# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \n# undocumented classes that are normally visible in the class hierarchy. \n# If set to NO (the default) these classes will be included in the various \n# overviews. This option has no effect if EXTRACT_ALL is enabled.\n\nHIDE_UNDOC_CLASSES     = NO\n\n# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \n# friend (class|struct|union) declarations. \n# If set to NO (the default) these declarations will be included in the \n# documentation.\n\nHIDE_FRIEND_COMPOUNDS  = NO\n\n# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \n# documentation blocks found inside the body of a function. \n# If set to NO (the default) these blocks will be appended to the \n# function's detailed documentation block.\n\nHIDE_IN_BODY_DOCS      = NO\n\n# The INTERNAL_DOCS tag determines if documentation \n# that is typed after a \\internal command is included. If the tag is set \n# to NO (the default) then the documentation will be excluded. \n# Set it to YES to include the internal documentation.\n\nINTERNAL_DOCS          = NO\n\n# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \n# file names in lower-case letters. If set to YES upper-case letters are also \n# allowed. This is useful if you have classes or files whose names only differ \n# in case and if your file system supports case sensitive file names. Windows \n# users are advised to set this option to NO.\n\nCASE_SENSE_NAMES       = YES\n\n# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \n# will show members with their full class and namespace scopes in the \n# documentation. If set to YES the scope will be hidden.\n\nHIDE_SCOPE_NAMES       = NO\n\n# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \n# will put a list of the files that are included by a file in the documentation \n# of that file.\n\nSHOW_INCLUDE_FILES     = YES\n\n# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \n# is inserted in the documentation for inline members.\n\nINLINE_INFO            = YES\n\n# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \n# will sort the (detailed) documentation of file and class members \n# alphabetically by member name. If set to NO the members will appear in \n# declaration order.\n\nSORT_MEMBER_DOCS       = YES\n\n# The GENERATE_TODOLIST tag can be used to enable (YES) or \n# disable (NO) the todo list. This list is created by putting \\todo \n# commands in the documentation.\n\nGENERATE_TODOLIST      = YES\n\n# The GENERATE_TESTLIST tag can be used to enable (YES) or \n# disable (NO) the test list. This list is created by putting \\test \n# commands in the documentation.\n\nGENERATE_TESTLIST      = YES\n\n# The GENERATE_BUGLIST tag can be used to enable (YES) or \n# disable (NO) the bug list. This list is created by putting \\bug \n# commands in the documentation.\n\nGENERATE_BUGLIST       = YES\n\n# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \n# disable (NO) the deprecated list. This list is created by putting \n# \\deprecated commands in the documentation.\n\nGENERATE_DEPRECATEDLIST= YES\n\n# The ENABLED_SECTIONS tag can be used to enable conditional \n# documentation sections, marked by \\if sectionname ... \\endif.\n\nENABLED_SECTIONS       = \n\n# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \n# the initial value of a variable or define consists of for it to appear in \n# the documentation. If the initializer consists of more lines than specified \n# here it will be hidden. Use a value of 0 to hide initializers completely. \n# The appearance of the initializer of individual variables and defines in the \n# documentation can be controlled using \\showinitializer or \\hideinitializer \n# command in the documentation regardless of this setting.\n\nMAX_INITIALIZER_LINES  = 30\n\n# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \n# at the bottom of the documentation of classes and structs. If set to YES the \n# list will mention the files that were used to generate the documentation.\n\nSHOW_USED_FILES        = YES\n\n#---------------------------------------------------------------------------\n# configuration options related to warning and progress messages\n#---------------------------------------------------------------------------\n\n# The QUIET tag can be used to turn on/off the messages that are generated \n# by doxygen. Possible values are YES and NO. If left blank NO is used.\n\nQUIET                  = NO\n\n# The WARNINGS tag can be used to turn on/off the warning messages that are \n# generated by doxygen. Possible values are YES and NO. If left blank \n# NO is used.\n\nWARNINGS               = YES\n\n# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \n# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \n# automatically be disabled.\n\nWARN_IF_UNDOCUMENTED   = YES\n\n# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \n# potential errors in the documentation, such as not documenting some \n# parameters in a documented function, or documenting parameters that \n# don't exist or using markup commands wrongly.\n\nWARN_IF_DOC_ERROR      = YES\n\n# The WARN_FORMAT tag determines the format of the warning messages that \n# doxygen can produce. The string should contain the $file, $line, and $text \n# tags, which will be replaced by the file and line number from which the \n# warning originated and the warning text.\n\nWARN_FORMAT            = \"$file:$line: $text\"\n\n# The WARN_LOGFILE tag can be used to specify a file to which warning \n# and error messages should be written. If left blank the output is written \n# to stderr.\n\nWARN_LOGFILE           = \n\n#---------------------------------------------------------------------------\n# configuration options related to the input files\n#---------------------------------------------------------------------------\n\n# The INPUT tag can be used to specify the files and/or directories that contain \n# documented source files. You may enter file names like \"myfile.cpp\" or \n# directories like \"/usr/src/myproject\". Separate the files or directories \n# with spaces.\n\nINPUT                  = lsd.h lsd.c\n\n# If the value of the INPUT tag contains directories, you can use the \n# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \n# and *.h) to filter out the source-files in the directories. If left \n# blank the following patterns are tested: \n# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp \n# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc\n\nFILE_PATTERNS          = \n\n# The RECURSIVE tag can be used to turn specify whether or not subdirectories \n# should be searched for input files as well. Possible values are YES and NO. \n# If left blank NO is used.\n\nRECURSIVE              = NO\n\n# The EXCLUDE tag can be used to specify files and/or directories that should \n# excluded from the INPUT source files. This way you can easily exclude a \n# subdirectory from a directory tree whose root is specified with the INPUT tag.\n\nEXCLUDE                = \n\n# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories \n# that are symbolic links (a Unix filesystem feature) are excluded from the input.\n\nEXCLUDE_SYMLINKS       = NO\n\n# If the value of the INPUT tag contains directories, you can use the \n# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \n# certain files from those directories.\n\nEXCLUDE_PATTERNS       = \n\n# The EXAMPLE_PATH tag can be used to specify one or more files or \n# directories that contain example code fragments that are included (see \n# the \\include command).\n\nEXAMPLE_PATH           = \n\n# If the value of the EXAMPLE_PATH tag contains directories, you can use the \n# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \n# and *.h) to filter out the source-files in the directories. If left \n# blank all files are included.\n\nEXAMPLE_PATTERNS       = \n\n# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \n# searched for input files to be used with the \\include or \\dontinclude \n# commands irrespective of the value of the RECURSIVE tag. \n# Possible values are YES and NO. If left blank NO is used.\n\nEXAMPLE_RECURSIVE      = NO\n\n# The IMAGE_PATH tag can be used to specify one or more files or \n# directories that contain image that are included in the documentation (see \n# the \\image command).\n\nIMAGE_PATH             = \n\n# The INPUT_FILTER tag can be used to specify a program that doxygen should \n# invoke to filter for each input file. Doxygen will invoke the filter program \n# by executing (via popen()) the command <filter> <input-file>, where <filter> \n# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \n# input file. Doxygen will then use the output that the filter program writes \n# to standard output.\n\nINPUT_FILTER           = \n\n# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \n# INPUT_FILTER) will be used to filter the input files when producing source \n# files to browse (i.e. when SOURCE_BROWSER is set to YES).\n\nFILTER_SOURCE_FILES    = NO\n\n#---------------------------------------------------------------------------\n# configuration options related to source browsing\n#---------------------------------------------------------------------------\n\n# If the SOURCE_BROWSER tag is set to YES then a list of source files will \n# be generated. Documented entities will be cross-referenced with these sources.\n\nSOURCE_BROWSER         = YES\n\n# Setting the INLINE_SOURCES tag to YES will include the body \n# of functions and classes directly in the documentation.\n\nINLINE_SOURCES         = YES\n\n# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \n# doxygen to hide any special comment blocks from generated source code \n# fragments. Normal C and C++ comments will always remain visible.\n\nSTRIP_CODE_COMMENTS    = NO\n\n# If the REFERENCED_BY_RELATION tag is set to YES (the default) \n# then for each documented function all documented \n# functions referencing it will be listed.\n\nREFERENCED_BY_RELATION = YES\n\n# If the REFERENCES_RELATION tag is set to YES (the default) \n# then for each documented function all documented entities \n# called/used by that function will be listed.\n\nREFERENCES_RELATION    = YES\n\n# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \n# will generate a verbatim copy of the header file for each class for \n# which an include is specified. Set to NO to disable this.\n\nVERBATIM_HEADERS       = YES\n\n#---------------------------------------------------------------------------\n# configuration options related to the alphabetical class index\n#---------------------------------------------------------------------------\n\n# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \n# of all compounds will be generated. Enable this if the project \n# contains a lot of classes, structs, unions or interfaces.\n\nALPHABETICAL_INDEX     = NO\n\n# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \n# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \n# in which this list will be split (can be a number in the range [1..20])\n\nCOLS_IN_ALPHA_INDEX    = 5\n\n# In case all classes in a project start with a common prefix, all \n# classes will be put under the same header in the alphabetical index. \n# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \n# should be ignored while generating the index headers.\n\nIGNORE_PREFIX          = \n\n#---------------------------------------------------------------------------\n# configuration options related to the HTML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \n# generate HTML output.\n\nGENERATE_HTML          = YES\n\n# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \n# If a relative path is entered the value of OUTPUT_DIRECTORY will be \n# put in front of it. If left blank `html' will be used as the default path.\n\nHTML_OUTPUT            = doc\n\n# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \n# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \n# doxygen will generate files with .html extension.\n\nHTML_FILE_EXTENSION    = .html\n\n# The HTML_HEADER tag can be used to specify a personal HTML header for \n# each generated HTML page. If it is left blank doxygen will generate a \n# standard header.\n\nHTML_HEADER            = \n\n# The HTML_FOOTER tag can be used to specify a personal HTML footer for \n# each generated HTML page. If it is left blank doxygen will generate a \n# standard footer.\n\nHTML_FOOTER            = \n\n# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \n# style sheet that is used by each HTML page. It can be used to \n# fine-tune the look of the HTML output. If the tag is left blank doxygen \n# will generate a default style sheet\n\nHTML_STYLESHEET        = \n\n# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \n# files or namespaces will be aligned in HTML using tables. If set to \n# NO a bullet list will be used.\n\nHTML_ALIGN_MEMBERS     = YES\n\n# If the GENERATE_HTMLHELP tag is set to YES, additional index files \n# will be generated that can be used as input for tools like the \n# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) \n# of the generated HTML documentation.\n\nGENERATE_HTMLHELP      = NO\n\n# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \n# be used to specify the file name of the resulting .chm file. You \n# can add a path in front of the file if the result should not be \n# written to the html output dir.\n\nCHM_FILE               = \n\n# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \n# be used to specify the location (absolute path including file name) of \n# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \n# the HTML help compiler on the generated index.hhp.\n\nHHC_LOCATION           = \n\n# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \n# controls if a separate .chi index file is generated (YES) or that \n# it should be included in the master .chm file (NO).\n\nGENERATE_CHI           = NO\n\n# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \n# controls whether a binary table of contents is generated (YES) or a \n# normal table of contents (NO) in the .chm file.\n\nBINARY_TOC             = NO\n\n# The TOC_EXPAND flag can be set to YES to add extra items for group members \n# to the contents of the HTML help documentation and to the tree view.\n\nTOC_EXPAND             = NO\n\n# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \n# top of each HTML page. The value NO (the default) enables the index and \n# the value YES disables it.\n\nDISABLE_INDEX          = NO\n\n# This tag can be used to set the number of enum values (range [1..20]) \n# that doxygen will group on one line in the generated HTML documentation.\n\nENUM_VALUES_PER_LINE   = 4\n\n# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be\n# generated containing a tree-like index structure (just like the one that \n# is generated for HTML Help). For this to work a browser that supports \n# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \n# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \n# probably better off using the HTML help feature.\n\nGENERATE_TREEVIEW      = NO\n\n# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \n# used to set the initial width (in pixels) of the frame in which the tree \n# is shown.\n\nTREEVIEW_WIDTH         = 180\n\n#---------------------------------------------------------------------------\n# configuration options related to the LaTeX output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \n# generate Latex output.\n\nGENERATE_LATEX         = NO\n\n# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \n# If a relative path is entered the value of OUTPUT_DIRECTORY will be \n# put in front of it. If left blank `latex' will be used as the default path.\n\nLATEX_OUTPUT           = latex\n\n# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \n# invoked. If left blank `latex' will be used as the default command name.\n\nLATEX_CMD_NAME         = latex\n\n# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \n# generate index for LaTeX. If left blank `makeindex' will be used as the \n# default command name.\n\nMAKEINDEX_CMD_NAME     = makeindex\n\n# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \n# LaTeX documents. This may be useful for small projects and may help to \n# save some trees in general.\n\nCOMPACT_LATEX          = NO\n\n# The PAPER_TYPE tag can be used to set the paper type that is used \n# by the printer. Possible values are: a4, a4wide, letter, legal and \n# executive. If left blank a4wide will be used.\n\nPAPER_TYPE             = a4wide\n\n# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \n# packages that should be included in the LaTeX output.\n\nEXTRA_PACKAGES         = \n\n# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \n# the generated latex document. The header should contain everything until \n# the first chapter. If it is left blank doxygen will generate a \n# standard header. Notice: only use this tag if you know what you are doing!\n\nLATEX_HEADER           = \n\n# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \n# is prepared for conversion to pdf (using ps2pdf). The pdf file will \n# contain links (just like the HTML output) instead of page references \n# This makes the output suitable for online browsing using a pdf viewer.\n\nPDF_HYPERLINKS         = NO\n\n# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \n# plain latex in the generated Makefile. Set this option to YES to get a \n# higher quality PDF documentation.\n\nUSE_PDFLATEX           = NO\n\n# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\\\batchmode. \n# command to the generated LaTeX files. This will instruct LaTeX to keep \n# running if errors occur, instead of asking the user for help. \n# This option is also used when generating formulas in HTML.\n\nLATEX_BATCHMODE        = NO\n\n# If LATEX_HIDE_INDICES is set to YES then doxygen will not \n# include the index chapters (such as File Index, Compound Index, etc.) \n# in the output.\n\nLATEX_HIDE_INDICES     = NO\n\n#---------------------------------------------------------------------------\n# configuration options related to the RTF output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \n# The RTF output is optimised for Word 97 and may not look very pretty with \n# other RTF readers or editors.\n\nGENERATE_RTF           = NO\n\n# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \n# If a relative path is entered the value of OUTPUT_DIRECTORY will be \n# put in front of it. If left blank `rtf' will be used as the default path.\n\nRTF_OUTPUT             = rtf\n\n# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \n# RTF documents. This may be useful for small projects and may help to \n# save some trees in general.\n\nCOMPACT_RTF            = NO\n\n# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \n# will contain hyperlink fields. The RTF file will \n# contain links (just like the HTML output) instead of page references. \n# This makes the output suitable for online browsing using WORD or other \n# programs which support those fields. \n# Note: wordpad (write) and others do not support links.\n\nRTF_HYPERLINKS         = NO\n\n# Load stylesheet definitions from file. Syntax is similar to doxygen's \n# config file, i.e. a series of assigments. You only have to provide \n# replacements, missing definitions are set to their default value.\n\nRTF_STYLESHEET_FILE    = \n\n# Set optional variables used in the generation of an rtf document. \n# Syntax is similar to doxygen's config file.\n\nRTF_EXTENSIONS_FILE    = \n\n#---------------------------------------------------------------------------\n# configuration options related to the man page output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \n# generate man pages\n\nGENERATE_MAN           = NO\n\n# The MAN_OUTPUT tag is used to specify where the man pages will be put. \n# If a relative path is entered the value of OUTPUT_DIRECTORY will be \n# put in front of it. If left blank `man' will be used as the default path.\n\nMAN_OUTPUT             = man\n\n# The MAN_EXTENSION tag determines the extension that is added to \n# the generated man pages (default is the subroutine's section .3)\n\nMAN_EXTENSION          = .3\n\n# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \n# then it will generate one additional man file for each entity \n# documented in the real man page(s). These additional files \n# only source the real man page, but without them the man command \n# would be unable to find the correct page. The default is NO.\n\nMAN_LINKS              = NO\n\n#---------------------------------------------------------------------------\n# configuration options related to the XML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_XML tag is set to YES Doxygen will \n# generate an XML file that captures the structure of \n# the code including all documentation. Note that this \n# feature is still experimental and incomplete at the \n# moment.\n\nGENERATE_XML           = NO\n\n# The XML_OUTPUT tag is used to specify where the XML pages will be put. \n# If a relative path is entered the value of OUTPUT_DIRECTORY will be \n# put in front of it. If left blank `xml' will be used as the default path.\n\nXML_OUTPUT             = xml\n\n# The XML_SCHEMA tag can be used to specify an XML schema, \n# which can be used by a validating XML parser to check the \n# syntax of the XML files.\n\nXML_SCHEMA             = \n\n# The XML_DTD tag can be used to specify an XML DTD, \n# which can be used by a validating XML parser to check the \n# syntax of the XML files.\n\nXML_DTD                = \n\n#---------------------------------------------------------------------------\n# configuration options for the AutoGen Definitions output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \n# generate an AutoGen Definitions (see autogen.sf.net) file \n# that captures the structure of the code including all \n# documentation. Note that this feature is still experimental \n# and incomplete at the moment.\n\nGENERATE_AUTOGEN_DEF   = NO\n\n#---------------------------------------------------------------------------\n# configuration options related to the Perl module output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_PERLMOD tag is set to YES Doxygen will \n# generate a Perl module file that captures the structure of \n# the code including all documentation. Note that this \n# feature is still experimental and incomplete at the \n# moment.\n\nGENERATE_PERLMOD       = NO\n\n# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \n# the necessary Makefile rules, Perl scripts and LaTeX code to be able \n# to generate PDF and DVI output from the Perl module output.\n\nPERLMOD_LATEX          = NO\n\n# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \n# nicely formatted so it can be parsed by a human reader.  This is useful \n# if you want to understand what is going on.  On the other hand, if this \n# tag is set to NO the size of the Perl module output will be much smaller \n# and Perl will parse it just the same.\n\nPERLMOD_PRETTY         = YES\n\n# The names of the make variables in the generated doxyrules.make file \n# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \n# This is useful so different doxyrules.make files included by the same \n# Makefile don't overwrite each other's variables.\n\nPERLMOD_MAKEVAR_PREFIX = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the preprocessor   \n#---------------------------------------------------------------------------\n\n# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \n# evaluate all C-preprocessor directives found in the sources and include \n# files.\n\nENABLE_PREPROCESSING   = YES\n\n# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \n# names in the source code. If set to NO (the default) only conditional \n# compilation will be performed. Macro expansion can be done in a controlled \n# way by setting EXPAND_ONLY_PREDEF to YES.\n\nMACRO_EXPANSION        = NO\n\n# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \n# then the macro expansion is limited to the macros specified with the \n# PREDEFINED and EXPAND_AS_PREDEFINED tags.\n\nEXPAND_ONLY_PREDEF     = NO\n\n# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \n# in the INCLUDE_PATH (see below) will be search if a #include is found.\n\nSEARCH_INCLUDES        = YES\n\n# The INCLUDE_PATH tag can be used to specify one or more directories that \n# contain include files that are not input files but should be processed by \n# the preprocessor.\n\nINCLUDE_PATH           = \n\n# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \n# patterns (like *.h and *.hpp) to filter out the header-files in the \n# directories. If left blank, the patterns specified with FILE_PATTERNS will \n# be used.\n\nINCLUDE_FILE_PATTERNS  = \n\n# The PREDEFINED tag can be used to specify one or more macro names that \n# are defined before the preprocessor is started (similar to the -D option of \n# gcc). The argument of the tag is a list of macros of the form: name \n# or name=definition (no spaces). If the definition and the = are \n# omitted =1 is assumed.\n\nPREDEFINED             = \n\n# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \n# this tag can be used to specify a list of macro names that should be expanded. \n# The macro definition that is found in the sources will be used. \n# Use the PREDEFINED tag if you want to use a different macro definition.\n\nEXPAND_AS_DEFINED      = \n\n# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \n# doxygen's preprocessor will remove all function-like macros that are alone \n# on a line, have an all uppercase name, and do not end with a semicolon. Such \n# function macros are typically used for boiler-plate code, and will confuse the \n# parser if not removed.\n\nSKIP_FUNCTION_MACROS   = YES\n\n#---------------------------------------------------------------------------\n# Configuration::addtions related to external references   \n#---------------------------------------------------------------------------\n\n# The TAGFILES option can be used to specify one or more tagfiles. \n# Optionally an initial location of the external documentation \n# can be added for each tagfile. The format of a tag file without \n# this location is as follows: \n#   TAGFILES = file1 file2 ... \n# Adding location for the tag files is done as follows: \n#   TAGFILES = file1=loc1 \"file2 = loc2\" ... \n# where \"loc1\" and \"loc2\" can be relative or absolute paths or \n# URLs. If a location is present for each tag, the installdox tool \n# does not have to be run to correct the links.\n# Note that each tag file must have a unique name\n# (where the name does NOT include the path)\n# If a tag file is not located in the directory in which doxygen \n# is run, you must also specify the path to the tagfile here.\n\nTAGFILES               = \n\n# When a file name is specified after GENERATE_TAGFILE, doxygen will create \n# a tag file that is based on the input files it reads.\n\nGENERATE_TAGFILE       = \n\n# If the ALLEXTERNALS tag is set to YES all external classes will be listed \n# in the class index. If set to NO only the inherited external classes \n# will be listed.\n\nALLEXTERNALS           = NO\n\n# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \n# in the modules index. If set to NO, only the current project's groups will \n# be listed.\n\nEXTERNAL_GROUPS        = YES\n\n# The PERL_PATH should be the absolute path and name of the perl script \n# interpreter (i.e. the result of `which perl').\n\nPERL_PATH              = /usr/bin/perl\n\n#---------------------------------------------------------------------------\n# Configuration options related to the dot tool   \n#---------------------------------------------------------------------------\n\n# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \n# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or \n# super classes. Setting the tag to NO turns the diagrams off. Note that this \n# option is superceded by the HAVE_DOT option below. This is only a fallback. It is \n# recommended to install and use dot, since it yields more powerful graphs.\n\nCLASS_DIAGRAMS         = YES\n\n# If set to YES, the inheritance and collaboration graphs will hide \n# inheritance and usage relations if the target is undocumented \n# or is not a class.\n\nHIDE_UNDOC_RELATIONS   = YES\n\n# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \n# available from the path. This tool is part of Graphviz, a graph visualization \n# toolkit from AT&T and Lucent Bell Labs. The other options in this section \n# have no effect if this option is set to NO (the default)\n\nHAVE_DOT               = YES\n\n# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \n# will generate a graph for each documented class showing the direct and \n# indirect inheritance relations. Setting this tag to YES will force the \n# the CLASS_DIAGRAMS tag to NO.\n\nCLASS_GRAPH            = YES\n\n# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \n# will generate a graph for each documented class showing the direct and \n# indirect implementation dependencies (inheritance, containment, and \n# class references variables) of the class with other documented classes.\n\nCOLLABORATION_GRAPH    = YES\n\n# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \n# collaboration diagrams in a style similiar to the OMG's Unified Modeling \n# Language.\n\nUML_LOOK               = NO\n\n# If set to YES, the inheritance and collaboration graphs will show the \n# relations between templates and their instances.\n\nTEMPLATE_RELATIONS     = NO\n\n# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \n# tags are set to YES then doxygen will generate a graph for each documented \n# file showing the direct and indirect include dependencies of the file with \n# other documented files.\n\nINCLUDE_GRAPH          = YES\n\n# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \n# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \n# documented header file showing the documented files that directly or \n# indirectly include this file.\n\nINCLUDED_BY_GRAPH      = YES\n\n# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will \n# generate a call dependency graph for every global function or class method. \n# Note that enabling this option will significantly increase the time of a run. \n# So in most cases it will be better to enable call graphs for selected \n# functions only using the \\callgraph command.\n\nCALL_GRAPH             = YES\n\n# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \n# will graphical hierarchy of all classes instead of a textual one.\n\nGRAPHICAL_HIERARCHY    = YES\n\n# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \n# generated by dot. Possible values are png, jpg, or gif\n# If left blank png will be used.\n\nDOT_IMAGE_FORMAT       = png\n\n# The tag DOT_PATH can be used to specify the path where the dot tool can be \n# found. If left blank, it is assumed the dot tool can be found on the path.\n\nDOT_PATH               = \n\n# The DOTFILE_DIRS tag can be used to specify one or more directories that \n# contain dot files that are included in the documentation (see the \n# \\dotfile command).\n\nDOTFILE_DIRS           = \n\n# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width \n# (in pixels) of the graphs generated by dot. If a graph becomes larger than \n# this value, doxygen will try to truncate the graph, so that it fits within \n# the specified constraint. Beware that most browsers cannot cope with very \n# large images.\n\nMAX_DOT_GRAPH_WIDTH    = 1024\n\n# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height \n# (in pixels) of the graphs generated by dot. If a graph becomes larger than \n# this value, doxygen will try to truncate the graph, so that it fits within \n# the specified constraint. Beware that most browsers cannot cope with very \n# large images.\n\nMAX_DOT_GRAPH_HEIGHT   = 1024\n\n# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \n# graphs generated by dot. A depth value of 3 means that only nodes reachable \n# from the root by following a path via at most 3 edges will be shown. Nodes that \n# lay further from the root node will be omitted. Note that setting this option to \n# 1 or 2 may greatly reduce the computation time needed for large code bases. Also \n# note that a graph may be further truncated if the graph's image dimensions are \n# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). \n# If 0 is used for the depth value (the default), the graph is not depth-constrained.\n\nMAX_DOT_GRAPH_DEPTH    = 0\n\n# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \n# generate a legend page explaining the meaning of the various boxes and \n# arrows in the dot generated graphs.\n\nGENERATE_LEGEND        = YES\n\n# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \n# remove the intermediate dot files that are used to generate \n# the various graphs.\n\nDOT_CLEANUP            = YES\n\n#---------------------------------------------------------------------------\n# Configuration::addtions related to the search engine   \n#---------------------------------------------------------------------------\n\n# The SEARCHENGINE tag specifies whether or not a search engine should be \n# used. If set to NO the values of all tags below this one will be ignored.\n\nSEARCHENGINE           = NO\n"
  },
  {
    "path": "thirdparty/LSD/lsd.c",
    "content": "/*----------------------------------------------------------------------------\n\n  LSD - Line Segment Detector on digital images\n\n  Copyright 2007-2010 rafael grompone von gioi (grompone@gmail.com)\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as\n  published by the Free Software Foundation, either version 3 of the\n  License, or (at your option) any later version.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program. If not, see <http://www.gnu.org/licenses/>.\n\n  ----------------------------------------------------------------------------*/\n\n/*----------------------------------------------------------------------------*/\n/** @file lsd.c\n    LSD module code\n    @author rafael grompone von gioi (grompone@gmail.com)\n */\n/*----------------------------------------------------------------------------*/\n\n/*----------------------------------------------------------------------------*/\n/** @mainpage LSD code documentation\n\n    This is an implementation of the Line Segment Detector described\n    in the paper:\n\n      \"LSD: A Fast Line Segment Detector with a False Detection Control\"\n      by Rafael Grompone von Gioi, Jeremie Jakubowicz, Jean-Michel Morel,\n      and Gregory Randall, IEEE Transactions on Pattern Analysis and\n      Machine Intelligence, vol. 32, no. 4, pp. 722-732, April, 2010.\n\n    and in more details in the CMLA Technical Report:\n\n      \"LSD: A Line Segment Detector, Technical Report\",\n      by Rafael Grompone von Gioi, Jeremie Jakubowicz, Jean-Michel Morel,\n      Gregory Randall, CMLA, ENS Cachan, 2010.\n\n    The version implemented here includes some further improvements\n    described on the LSD page at www.ipol.im. That same page includes\n    more information, including this code and an online demo version:\n\n      http://www.ipol.im/pub/algo/gjmr_line_segment_detector\n\n    The module's main function is lsd().\n\n    The source code is contained in two files: lsd.h and lsd.c.\n\n    HISTORY:\n    - version 1.5 - dic 2010: Changes in 'refine', -W option added,\n                              and more comments added.\n    - version 1.4 - jul 2010: lsd_scale interface added and doxygen doc.\n    - version 1.3 - feb 2010: Multiple bug correction and improved code.\n    - version 1.2 - dic 2009: First full Ansi C Language version.\n    - version 1.1 - sep 2009: Systematic subsampling to scale 0.8 and\n                              correction to partially handle\"angle problem\".\n    - version 1.0 - jan 2009: First complete Megawave2 and Ansi C Language\n                              version.\n\n    @author rafael grompone von gioi (grompone@gmail.com)\n */\n/*----------------------------------------------------------------------------*/\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <math.h>\n#include <limits.h>\n#include <float.h>\n#include \"lsd.h\"\n\n/** ln(10) */\n#ifndef M_LN10\n#define M_LN10 2.30258509299404568402\n#endif /* !M_LN10 */\n\n/** PI */\n#ifndef M_PI\n#define M_PI   3.14159265358979323846\n#endif /* !M_PI */\n\n#ifndef FALSE\n#define FALSE 0\n#endif /* !FALSE */\n\n#ifndef TRUE\n#define TRUE 1\n#endif /* !TRUE */\n\n/** Label for pixels with undefined gradient. */\n#define NOTDEF -1024.0\n\n/** 3/2 pi */\n#define M_3_2_PI 4.71238898038\n\n/** 2 pi */\n#define M_2__PI  6.28318530718\n\n/** Label for pixels not used in yet. */\n#define NOTUSED 0\n\n/** Label for pixels already used in detection. */\n#define USED    1\n\n/*----------------------------------------------------------------------------*/\n/** Chained list of coordinates.\n */\nstruct coorlist\n{\n  int x,y;\n  struct coorlist * next;\n};\n\n/*----------------------------------------------------------------------------*/\n/** A point (or pixel).\n */\nstruct point {int x,y;};\n\n\n/*----------------------------------------------------------------------------*/\n/*------------------------- Miscellaneous functions --------------------------*/\n/*----------------------------------------------------------------------------*/\n\n/*----------------------------------------------------------------------------*/\n/** Fatal error, print a message to standard-error output and exit.\n */\nstatic void error(char * msg)\n{\n  fprintf(stderr,\"LSD Error: %s\\n\",msg);\n  exit(EXIT_FAILURE);\n}\n\n/*----------------------------------------------------------------------------*/\n/** Doubles relative error factor\n */\n#define RELATIVE_ERROR_FACTOR 100.0\n\n/*----------------------------------------------------------------------------*/\n/** Compare doubles by relative error.\n\n    The resulting rounding error after floating point computations\n    depend on the specific operations done. The same number computed by\n    different algorithms could present different rounding errors. For a\n    useful comparison, an estimation of the relative rounding error\n    should be considered and compared to a factor times EPS. The factor\n    should be related to the cumulated rounding error in the chain of\n    computation. Here, as a simplification, a fixed factor is used.\n */\nstatic int double_equal(double a, double b)\n{\n  double abs_diff,aa,bb,abs_max;\n\n  /* trivial case */\n  if( a == b ) return TRUE;\n\n  abs_diff = fabs(a-b);\n  aa = fabs(a);\n  bb = fabs(b);\n  abs_max = aa > bb ? aa : bb;\n\n  /* DBL_MIN is the smallest normalized number, thus, the smallest\n     number whose relative error is bounded by DBL_EPSILON. For\n     smaller numbers, the same quantization steps as for DBL_MIN\n     are used. Then, for smaller numbers, a meaningful \"relative\"\n     error should be computed by dividing the difference by DBL_MIN. */\n  if( abs_max < DBL_MIN ) abs_max = DBL_MIN;\n\n  /* equal if relative error <= factor x eps */\n  return (abs_diff / abs_max) <= (RELATIVE_ERROR_FACTOR * DBL_EPSILON);\n}\n\n/*----------------------------------------------------------------------------*/\n/** Computes Euclidean distance between point (x1,y1) and point (x2,y2).\n */\nstatic double dist(double x1, double y1, double x2, double y2)\n{\n  return sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) );\n}\n\n\n/*----------------------------------------------------------------------------*/\n/*----------------------- 'list of n-tuple' data type ------------------------*/\n/*----------------------------------------------------------------------------*/\n\n/*----------------------------------------------------------------------------*/\n/** Free memory used in n-tuple 'in'.\n */\nvoid free_ntuple_list(ntuple_list in)\n{\n  if( in == NULL || in->values == NULL )\n    error(\"free_ntuple_list: invalid n-tuple input.\");\n  free( (void *) in->values );\n  free( (void *) in );\n}\n\n/*----------------------------------------------------------------------------*/\n/** Create an n-tuple list and allocate memory for one element.\n    @param dim the dimension (n) of the n-tuple.\n */\nntuple_list new_ntuple_list(unsigned int dim)\n{\n  ntuple_list n_tuple;\n\n  /* check parameters */\n  if( dim == 0 ) error(\"new_ntuple_list: 'dim' must be positive.\");\n\n  /* get memory for list structure */\n  n_tuple = (ntuple_list) malloc( sizeof(struct ntuple_list_s) );\n  if( n_tuple == NULL ) error(\"not enough memory.\");\n\n  /* initialize list */\n  n_tuple->size = 0;\n  n_tuple->max_size = 1;\n  n_tuple->dim = dim;\n\n  /* get memory for tuples */\n  n_tuple->values = (double *) malloc( dim*n_tuple->max_size * sizeof(double) );\n  if( n_tuple->values == NULL ) error(\"not enough memory.\");\n\n  return n_tuple;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Enlarge the allocated memory of an n-tuple list.\n */\nstatic void enlarge_ntuple_list(ntuple_list n_tuple)\n{\n  /* check parameters */\n  if( n_tuple == NULL || n_tuple->values == NULL || n_tuple->max_size == 0 )\n    error(\"enlarge_ntuple_list: invalid n-tuple.\");\n\n  /* duplicate number of tuples */\n  n_tuple->max_size *= 2;\n\n  /* realloc memory */\n  n_tuple->values = (double *) realloc( (void *) n_tuple->values,\n                      n_tuple->dim * n_tuple->max_size * sizeof(double) );\n  if( n_tuple->values == NULL ) error(\"not enough memory.\");\n}\n\n/*----------------------------------------------------------------------------*/\n/** Add a 5-tuple to an n-tuple list.\n */\nstatic void add_5tuple( ntuple_list out, double v1, double v2,\n                        double v3, double v4, double v5 )\n{\n  /* check parameters */\n  if( out == NULL ) error(\"add_5tuple: invalid n-tuple input.\");\n  if( out->dim != 5 ) error(\"add_5tuple: the n-tuple must be a 5-tuple.\");\n\n  /* if needed, alloc more tuples to 'out' */\n  if( out->size == out->max_size ) enlarge_ntuple_list(out);\n  if( out->values == NULL ) error(\"add_5tuple: invalid n-tuple input.\");\n\n  /* add new 5-tuple */\n  out->values[ out->size * out->dim + 0 ] = v1;\n  out->values[ out->size * out->dim + 1 ] = v2;\n  out->values[ out->size * out->dim + 2 ] = v3;\n  out->values[ out->size * out->dim + 3 ] = v4;\n  out->values[ out->size * out->dim + 4 ] = v5;\n\n  /* update number of tuples counter */\n  out->size++;\n}\n\n\n/*----------------------------------------------------------------------------*/\n/*----------------------------- Image Data Types -----------------------------*/\n/*----------------------------------------------------------------------------*/\n\n/*----------------------------------------------------------------------------*/\n/** Free memory used in image_char 'i'.\n */\nvoid free_image_char(image_char i)\n{\n  if( i == NULL || i->data == NULL )\n    error(\"free_image_char: invalid input image.\");\n  free( (void *) i->data );\n  free( (void *) i );\n}\n\n/*----------------------------------------------------------------------------*/\n/** Create a new image_char of size 'xsize' times 'ysize'.\n */\nimage_char new_image_char(unsigned int xsize, unsigned int ysize)\n{\n  image_char image;\n\n  /* check parameters */\n  if( xsize == 0 || ysize == 0 ) error(\"new_image_char: invalid image size.\");\n\n  /* get memory */\n  image = (image_char) malloc( sizeof(struct image_char_s) );\n  if( image == NULL ) error(\"not enough memory.\");\n  image->data = (unsigned char *) calloc( (size_t) (xsize*ysize),\n                                          sizeof(unsigned char) );\n  if( image->data == NULL ) error(\"not enough memory.\");\n\n  /* set image size */\n  image->xsize = xsize;\n  image->ysize = ysize;\n\n  return image;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Create a new image_char of size 'xsize' times 'ysize',\n    initialized to the value 'fill_value'.\n */\nimage_char new_image_char_ini( unsigned int xsize, unsigned int ysize,\n                               unsigned char fill_value )\n{\n  image_char image = new_image_char(xsize,ysize); /* create image */\n  unsigned int N = xsize*ysize;\n  unsigned int i;\n\n  /* check parameters */\n  if( image == NULL || image->data == NULL )\n    error(\"new_image_char_ini: invalid image.\");\n\n  /* initialize */\n  for(i=0; i<N; i++) image->data[i] = fill_value;\n\n  return image;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Free memory used in image_int 'i'.\n */\nvoid free_image_int(image_int i)\n{\n  if( i == NULL || i->data == NULL )\n    error(\"free_image_int: invalid input image.\");\n  free( (void *) i->data );\n  free( (void *) i );\n}\n\n/*----------------------------------------------------------------------------*/\n/** Create a new image_int of size 'xsize' times 'ysize'.\n */\nimage_int new_image_int(unsigned int xsize, unsigned int ysize)\n{\n  image_int image;\n\n  /* check parameters */\n  if( xsize == 0 || ysize == 0 ) error(\"new_image_int: invalid image size.\");\n\n  /* get memory */\n  image = (image_int) malloc( sizeof(struct image_int_s) );\n  if( image == NULL ) error(\"not enough memory.\");\n  image->data = (int *) calloc( (size_t) (xsize*ysize), sizeof(int) );\n  if( image->data == NULL ) error(\"not enough memory.\");\n\n  /* set image size */\n  image->xsize = xsize;\n  image->ysize = ysize;\n\n  return image;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Create a new image_int of size 'xsize' times 'ysize',\n    initialized to the value 'fill_value'.\n */\nimage_int new_image_int_ini( unsigned int xsize, unsigned int ysize,\n                             int fill_value )\n{\n  image_int image = new_image_int(xsize,ysize); /* create image */\n  unsigned int N = xsize*ysize;\n  unsigned int i;\n\n  /* initialize */\n  for(i=0; i<N; i++) image->data[i] = fill_value;\n\n  return image;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Free memory used in image_double 'i'.\n */\nvoid free_image_double(image_double i)\n{\n  if( i == NULL || i->data == NULL )\n    error(\"free_image_double: invalid input image.\");\n  free( (void *) i->data );\n  free( (void *) i );\n}\n\n/*----------------------------------------------------------------------------*/\n/** Create a new image_double of size 'xsize' times 'ysize'.\n */\nimage_double new_image_double(unsigned int xsize, unsigned int ysize)\n{\n  image_double image;\n\n  /* check parameters */\n  if( xsize == 0 || ysize == 0 ) error(\"new_image_double: invalid image size.\");\n\n  /* get memory */\n  image = (image_double) malloc( sizeof(struct image_double_s) );\n  if( image == NULL ) error(\"not enough memory.\");\n  image->data = (double *) calloc( (size_t) (xsize*ysize), sizeof(double) );\n  if( image->data == NULL ) error(\"not enough memory.\");\n\n  /* set image size */\n  image->xsize = xsize;\n  image->ysize = ysize;\n\n  return image;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Create a new image_double of size 'xsize' times 'ysize',\n    initialized to the value 'fill_value'.\n */\nimage_double new_image_double_ini( unsigned int xsize, unsigned int ysize,\n                                   double fill_value )\n{\n  image_double image = new_image_double(xsize,ysize); /* create image */\n  unsigned int N = xsize*ysize;\n  unsigned int i;\n\n  /* initialize */\n  for(i=0; i<N; i++) image->data[i] = fill_value;\n\n  return image;\n}\n\n\n/*----------------------------------------------------------------------------*/\n/*----------------------------- Gaussian filter ------------------------------*/\n/*----------------------------------------------------------------------------*/\n\n/*----------------------------------------------------------------------------*/\n/** Compute a Gaussian kernel of length 'kernel->dim',\n    standard deviation 'sigma', and centered at value 'mean'.\n\n    For example, if mean=0.5, the Gaussian will be centered\n    in the middle point between values 'kernel->values[0]'\n    and 'kernel->values[1]'.\n */\nstatic void gaussian_kernel(ntuple_list kernel, double sigma, double mean)\n{\n  double sum = 0.0;\n  double val;\n  unsigned int i;\n\n  /* check parameters */\n  if( kernel == NULL || kernel->values == NULL )\n    error(\"gaussian_kernel: invalid n-tuple 'kernel'.\");\n  if( sigma <= 0.0 ) error(\"gaussian_kernel: 'sigma' must be positive.\");\n\n  /* compute Gaussian kernel */\n  if( kernel->max_size < 1 ) enlarge_ntuple_list(kernel);\n  kernel->size = 1;\n  for(i=0;i<kernel->dim;i++)\n    {\n      val = ( (double) i - mean ) / sigma;\n      kernel->values[i] = exp( -0.5 * val * val );\n      sum += kernel->values[i];\n    }\n\n  /* normalization */\n  if( sum >= 0.0 ) for(i=0;i<kernel->dim;i++) kernel->values[i] /= sum;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Scale the input image 'in' by a factor 'scale' by Gaussian sub-sampling.\n\n    For example, scale=0.8 will give a result at 80% of the original size.\n\n    The image is convolved with a Gaussian kernel\n    @f[\n        G(x,y) = \\frac{1}{2\\pi\\sigma^2} e^{-\\frac{x^2+y^2}{2\\sigma^2}}\n    @f]\n    before the sub-sampling to prevent aliasing.\n\n    The standard deviation sigma given by:\n    -  sigma = sigma_scale / scale,   if scale <  1.0\n    -  sigma = sigma_scale,           if scale >= 1.0\n\n    To be able to sub-sample at non-integer steps, some interpolation\n    is needed. In this implementation, the interpolation is done by\n    the Gaussian kernel, so both operations (filtering and sampling)\n    are done at the same time. The Gaussian kernel is computed\n    centered on the coordinates of the required sample. In this way,\n    when applied, it gives directly the result of convolving the image\n    with the kernel and interpolated to that particular position.\n\n    A fast algorithm is done using the separability of the Gaussian\n    kernel. Applying the 2D Gaussian kernel is equivalent to applying\n    first a horizontal 1D Gaussian kernel and then a vertical 1D\n    Gaussian kernel (or the other way round). The reason is that\n    @f[\n        G(x,y) = G(x) * G(y)\n    @f]\n    where\n    @f[\n        G(x) = \\frac{1}{\\sqrt{2\\pi}\\sigma} e^{-\\frac{x^2}{2\\sigma^2}}.\n    @f]\n    The algorithm first apply a combined Gaussian kernel and sampling\n    in the x axis, and then the combined Gaussian kernel and sampling\n    in the y axis.\n */\nstatic image_double gaussian_sampler( image_double in, double scale,\n                                      double sigma_scale )\n{\n  image_double aux,out;\n  ntuple_list kernel;\n  unsigned int N,M,h,n,x,y,i;\n  int xc,yc,j,double_x_size,double_y_size;\n  double sigma,xx,yy,sum,prec;\n\n  /* check parameters */\n  if( in == NULL || in->data == NULL || in->xsize == 0 || in->ysize == 0 )\n    error(\"gaussian_sampler: invalid image.\");\n  if( scale <= 0.0 ) error(\"gaussian_sampler: 'scale' must be positive.\");\n  if( sigma_scale <= 0.0 )\n    error(\"gaussian_sampler: 'sigma_scale' must be positive.\");\n\n  /* get memory for images */\n  if( in->xsize * scale > (double) UINT_MAX ||\n      in->ysize * scale > (double) UINT_MAX )\n    error(\"gaussian_sampler: the output image size exceeds the handled size.\");\n  N = (unsigned int) floor( in->xsize * scale );\n  M = (unsigned int) floor( in->ysize * scale );\n  aux = new_image_double(N,in->ysize);\n  out = new_image_double(N,M);\n\n  /* sigma, kernel size and memory for the kernel */\n  sigma = scale < 1.0 ? sigma_scale / scale : sigma_scale;\n  /*\n     The size of the kernel is selected to guarantee that the\n     the first discarded term is at least 10^prec times smaller\n     than the central value. For that, h should be larger than x, with\n       e^(-x^2/2sigma^2) = 1/10^prec.\n     Then,\n       x = sigma * sqrt( 2 * prec * ln(10) ).\n   */\n  prec = 3.0;\n  h = (unsigned int) ceil( sigma * sqrt( 2.0 * prec * log(10.0) ) );\n  n = 1+2*h; /* kernel size */\n  kernel = new_ntuple_list(n);\n\n  /* auxiliary double image size variables */\n  double_x_size = (int) (2 * in->xsize);\n  double_y_size = (int) (2 * in->ysize);\n\n  /* First subsampling: x axis */\n  for(x=0;x<aux->xsize;x++)\n    {\n      /*\n         x   is the coordinate in the new image.\n         xx  is the corresponding x-value in the original size image.\n         xc  is the integer value, the pixel coordinate of xx.\n       */\n      xx = (double) x / scale;\n      /* coordinate (0.0,0.0) is in the center of pixel (0,0),\n         so the pixel with xc=0 get the values of xx from -0.5 to 0.5 */\n      xc = (int) floor( xx + 0.5 );\n      gaussian_kernel( kernel, sigma, (double) h + xx - (double) xc );\n      /* the kernel must be computed for each x because the fine\n         offset xx-xc is different in each case */\n\n      for(y=0;y<aux->ysize;y++)\n        {\n          sum = 0.0;\n          for(i=0;i<kernel->dim;i++)\n            {\n              j = xc - h + i;\n\n              /* symmetry boundary condition */\n              while( j < 0 ) j += double_x_size;\n              while( j >= double_x_size ) j -= double_x_size;\n              if( j >= (int) in->xsize ) j = double_x_size-1-j;\n\n              sum += in->data[ j + y * in->xsize ] * kernel->values[i];\n            }\n          aux->data[ x + y * aux->xsize ] = sum;\n        }\n    }\n\n  /* Second subsampling: y axis */\n  for(y=0;y<out->ysize;y++)\n    {\n      /*\n         y   is the coordinate in the new image.\n         yy  is the corresponding x-value in the original size image.\n         yc  is the integer value, the pixel coordinate of xx.\n       */\n      yy = (double) y / scale;\n      /* coordinate (0.0,0.0) is in the center of pixel (0,0),\n         so the pixel with yc=0 get the values of yy from -0.5 to 0.5 */\n      yc = (int) floor( yy + 0.5 );\n      gaussian_kernel( kernel, sigma, (double) h + yy - (double) yc );\n      /* the kernel must be computed for each y because the fine\n         offset yy-yc is different in each case */\n\n      for(x=0;x<out->xsize;x++)\n        {\n          sum = 0.0;\n          for(i=0;i<kernel->dim;i++)\n            {\n              j = yc - h + i;\n\n              /* symmetry boundary condition */\n              while( j < 0 ) j += double_y_size;\n              while( j >= double_y_size ) j -= double_y_size;\n              if( j >= (int) in->ysize ) j = double_y_size-1-j;\n\n              sum += aux->data[ x + j * aux->xsize ] * kernel->values[i];\n            }\n          out->data[ x + y * out->xsize ] = sum;\n        }\n    }\n\n  /* free memory */\n  free_ntuple_list(kernel);\n  free_image_double(aux);\n\n  return out;\n}\n\n\n/*----------------------------------------------------------------------------*/\n/*--------------------------------- Gradient ---------------------------------*/\n/*----------------------------------------------------------------------------*/\n\n/*----------------------------------------------------------------------------*/\n/** Computes the direction of the level line of 'in' at each point.\n\n    The result is:\n    - an image_double with the angle at each pixel, or NOTDEF if not defined.\n    - the image_double 'modgrad' (a pointer is passed as argument)\n      with the gradient magnitude at each point.\n    - a list of pixels 'list_p' roughly ordered by decreasing\n      gradient magnitude. (The order is made by classifying points\n      into bins by gradient magnitude. The parameters 'n_bins' and\n      'max_grad' specify the number of bins and the gradient modulus\n      at the highest bin. The pixels in the list would be in\n      decreasing gradient magnitude, up to a precision of the size of\n      the bins.)\n    - a pointer 'mem_p' to the memory used by 'list_p' to be able to\n      free the memory when it is not used anymore.\n */\nstatic image_double ll_angle( image_double in, double threshold,\n                              struct coorlist ** list_p, void ** mem_p,\n                              image_double * modgrad, unsigned int n_bins,\n                              double max_grad )\n{\n  image_double g;\n  unsigned int n,p,x,y,adr,i;\n  double com1,com2,gx,gy,norm,norm2;\n  /* the rest of the variables are used for pseudo-ordering\n     the gradient magnitude values */\n  int list_count = 0;\n  struct coorlist * list;\n  struct coorlist ** range_l_s; /* array of pointers to start of bin list */\n  struct coorlist ** range_l_e; /* array of pointers to end of bin list */\n  struct coorlist * start;\n  struct coorlist * end;\n\n  /* check parameters */\n  if( in == NULL || in->data == NULL || in->xsize == 0 || in->ysize == 0 )\n    error(\"ll_angle: invalid image.\");\n  if( threshold < 0.0 ) error(\"ll_angle: 'threshold' must be positive.\");\n  if( list_p == NULL ) error(\"ll_angle: NULL pointer 'list_p'.\");\n  if( mem_p == NULL ) error(\"ll_angle: NULL pointer 'mem_p'.\");\n  if( modgrad == NULL ) error(\"ll_angle: NULL pointer 'modgrad'.\");\n  if( n_bins == 0 ) error(\"ll_angle: 'n_bins' must be positive.\");\n  if( max_grad <= 0.0 ) error(\"ll_angle: 'max_grad' must be positive.\");\n\n  /* image size shortcuts */\n  n = in->ysize;\n  p = in->xsize;\n\n  /* allocate output image */\n  g = new_image_double(in->xsize,in->ysize);\n\n  /* get memory for the image of gradient modulus */\n  *modgrad = new_image_double(in->xsize,in->ysize);\n\n  /* get memory for \"ordered\" list of pixels */\n  list = (struct coorlist *) calloc( (size_t) (n*p), sizeof(struct coorlist) );\n  *mem_p = (void *) list;\n  range_l_s = (struct coorlist **) calloc( (size_t) n_bins,\n                                           sizeof(struct coorlist *) );\n  range_l_e = (struct coorlist **) calloc( (size_t) n_bins,\n                                           sizeof(struct coorlist *) );\n  if( list == NULL || range_l_s == NULL || range_l_e == NULL )\n    error(\"not enough memory.\");\n  for(i=0;i<n_bins;i++) range_l_s[i] = range_l_e[i] = NULL;\n\n  /* 'undefined' on the down and right boundaries */\n  for(x=0;x<p;x++) g->data[(n-1)*p+x] = NOTDEF;\n  for(y=0;y<n;y++) g->data[p*y+p-1]   = NOTDEF;\n\n  /* compute gradient on the remaining pixels */\n  for(x=0;x<p-1;x++)\n    for(y=0;y<n-1;y++)\n      {\n        adr = y*p+x;\n\n        /*\n           Norm 2 computation using 2x2 pixel window:\n             A B\n             C D\n           and\n             com1 = D-A,  com2 = B-C.\n           Then\n             gx = B+D - (A+C)   horizontal difference\n             gy = C+D - (A+B)   vertical difference\n           com1 and com2 are just to avoid 2 additions.\n         */\n        com1 = in->data[adr+p+1] - in->data[adr];\n        com2 = in->data[adr+1]   - in->data[adr+p];\n\n        gx = com1+com2; /* gradient x component */\n        gy = com1-com2; /* gradient y component */\n        norm2 = gx*gx+gy*gy;\n        norm = sqrt( norm2 / 4.0 ); /* gradient norm */\n\n        (*modgrad)->data[adr] = norm; /* store gradient norm */\n\n        if( norm <= threshold ) /* norm too small, gradient no defined */\n          g->data[adr] = NOTDEF; /* gradient angle not defined */\n        else\n          {\n            /* gradient angle computation */\n            g->data[adr] = atan2(gx,-gy);\n\n            /* store the point in the right bin according to its norm */\n            i = (unsigned int) (norm * (double) n_bins / max_grad);\n            if( i >= n_bins ) i = n_bins-1;\n            if( range_l_e[i] == NULL )\n              range_l_s[i] = range_l_e[i] = list+list_count++;\n            else\n              {\n                range_l_e[i]->next = list+list_count;\n                range_l_e[i] = list+list_count++;\n              }\n            range_l_e[i]->x = (int) x;\n            range_l_e[i]->y = (int) y;\n            range_l_e[i]->next = NULL;\n          }\n      }\n\n  /* Make the list of pixels (almost) ordered by norm value.\n     It starts by the larger bin, so the list starts by the\n     pixels with higher gradient value. Pixels would be ordered\n     by norm value, up to a precision given by max_grad/n_bins.\n   */\n  for(i=n_bins-1; i>0 && range_l_s[i]==NULL; i--);\n  start = range_l_s[i];\n  end = range_l_e[i];\n  if( start != NULL )\n    for(i--;i>0; i--)\n      if( range_l_s[i] != NULL )\n        {\n          end->next = range_l_s[i];\n          end = range_l_e[i];\n        }\n  *list_p = start;\n\n  /* free memory */\n  free( (void *) range_l_s );\n  free( (void *) range_l_e );\n\n  return g;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Is point (x,y) aligned to angle theta, up to precision 'prec'?\n */\nstatic int isaligned( int x, int y, image_double angles, double theta,\n                      double prec )\n{\n  double a;\n\n  /* check parameters */\n  if( angles == NULL || angles->data == NULL )\n    error(\"isaligned: invalid image 'angles'.\");\n  if( x < 0 || y < 0 || x >= (int) angles->xsize || y >= (int) angles->ysize )\n    error(\"isaligned: (x,y) out of the image.\");\n  if( prec < 0.0 ) error(\"isaligned: 'prec' must be positive.\");\n\n  /* angle at pixel (x,y) */\n  a = angles->data[ x + y * angles->xsize ];\n\n  /* pixels whose level-line angle is not defined\n     are considered as NON-aligned */\n  if( a == NOTDEF ) return FALSE;  /* there is no need to call the function\n                                      'double_equal' here because there is\n                                      no risk of problems related to the\n                                      comparison doubles, we are only\n                                      interested in the exact NOTDEF value */\n\n  /* it is assumed that 'theta' and 'a' are in the range [-pi,pi] */\n  theta -= a;\n  if( theta < 0.0 ) theta = -theta;\n  if( theta > M_3_2_PI )\n    {\n      theta -= M_2__PI;\n      if( theta < 0.0 ) theta = -theta;\n    }\n\n  return theta < prec;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Absolute value angle difference.\n */\nstatic double angle_diff(double a, double b)\n{\n  a -= b;\n  while( a <= -M_PI ) a += M_2__PI;\n  while( a >   M_PI ) a -= M_2__PI;\n  if( a < 0.0 ) a = -a;\n  return a;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Signed angle difference.\n */\nstatic double angle_diff_signed(double a, double b)\n{\n  a -= b;\n  while( a <= -M_PI ) a += M_2__PI;\n  while( a >   M_PI ) a -= M_2__PI;\n  return a;\n}\n\n\n/*----------------------------------------------------------------------------*/\n/*----------------------------- NFA computation ------------------------------*/\n/*----------------------------------------------------------------------------*/\n\n/*----------------------------------------------------------------------------*/\n/** Computes the natural logarithm of the absolute value of\n    the gamma function of x using the Lanczos approximation.\n    See http://www.rskey.org/gamma.htm\n\n    The formula used is\n    @f[\n      \\Gamma(x) = \\frac{ \\sum_{n=0}^{N} q_n x^n }{ \\Pi_{n=0}^{N} (x+n) }\n                  (x+5.5)^{x+0.5} e^{-(x+5.5)}\n    @f]\n    so\n    @f[\n      \\log\\Gamma(x) = \\log\\left( \\sum_{n=0}^{N} q_n x^n \\right)\n                      + (x+0.5) \\log(x+5.5) - (x+5.5) - \\sum_{n=0}^{N} \\log(x+n)\n    @f]\n    and\n      q0 = 75122.6331530,\n      q1 = 80916.6278952,\n      q2 = 36308.2951477,\n      q3 = 8687.24529705,\n      q4 = 1168.92649479,\n      q5 = 83.8676043424,\n      q6 = 2.50662827511.\n */\nstatic double log_gamma_lanczos(double x)\n{\n  static double q[7] = { 75122.6331530, 80916.6278952, 36308.2951477,\n                         8687.24529705, 1168.92649479, 83.8676043424,\n                         2.50662827511 };\n  double a = (x+0.5) * log(x+5.5) - (x+5.5);\n  double b = 0.0;\n  int n;\n\n  for(n=0;n<7;n++)\n    {\n      a -= log( x + (double) n );\n      b += q[n] * pow( x, (double) n );\n    }\n  return a + log(b);\n}\n\n/*----------------------------------------------------------------------------*/\n/** Computes the natural logarithm of the absolute value of\n    the gamma function of x using Windschitl method.\n    See http://www.rskey.org/gamma.htm\n\n    The formula used is\n    @f[\n        \\Gamma(x) = \\sqrt{\\frac{2\\pi}{x}} \\left( \\frac{x}{e}\n                    \\sqrt{ x\\sinh(1/x) + \\frac{1}{810x^6} } \\right)^x\n    @f]\n    so\n    @f[\n        \\log\\Gamma(x) = 0.5\\log(2\\pi) + (x-0.5)\\log(x) - x\n                      + 0.5x\\log\\left( x\\sinh(1/x) + \\frac{1}{810x^6} \\right).\n    @f]\n    This formula is a good approximation when x > 15.\n */\nstatic double log_gamma_windschitl(double x)\n{\n  return 0.918938533204673 + (x-0.5)*log(x) - x\n         + 0.5*x*log( x*sinh(1/x) + 1/(810.0*pow(x,6.0)) );\n}\n\n/*----------------------------------------------------------------------------*/\n/** Computes the natural logarithm of the absolute value of\n    the gamma function of x. When x>15 use log_gamma_windschitl(),\n    otherwise use log_gamma_lanczos().\n */\n#define log_gamma(x) ((x)>15.0?log_gamma_windschitl(x):log_gamma_lanczos(x))\n\n/*----------------------------------------------------------------------------*/\n/** Size of the table to store already computed inverse values.\n */\n#define TABSIZE 100000\n\n/*----------------------------------------------------------------------------*/\n/** Computes -log10(NFA).\n\n    NFA stands for Number of False Alarms:\n    @f[\n        \\mathrm{NFA} = NT \\cdot B(n,k,p)\n    @f]\n\n    - NT       - number of tests\n    - B(n,k,p) - tail of binomial distribution with parameters n,k and p:\n    @f[\n        B(n,k,p) = \\sum_{j=k}^n\n                   \\left(\\begin{array}{c}n\\\\j\\end{array}\\right)\n                   p^{j} (1-p)^{n-j}\n    @f]\n\n    The value -log10(NFA) is equivalent but more intuitive than NFA:\n    - -1 corresponds to 10 mean false alarms\n    -  0 corresponds to 1 mean false alarm\n    -  1 corresponds to 0.1 mean false alarms\n    -  2 corresponds to 0.01 mean false alarms\n    -  ...\n\n    Used this way, the bigger the value, better the detection,\n    and a logarithmic scale is used.\n\n    @param n,k,p binomial parameters.\n    @param logNT logarithm of Number of Tests\n\n    The computation is based in the gamma function by the following\n    relation:\n    @f[\n        \\left(\\begin{array}{c}n\\\\k\\end{array}\\right)\n        = \\frac{ \\Gamma(n+1) }{ \\Gamma(k+1) \\cdot \\Gamma(n-k+1) }.\n    @f]\n    We use efficient algorithms to compute the logarithm of\n    the gamma function.\n\n    To make the computation faster, not all the sum is computed, part\n    of the terms are neglected based on a bound to the error obtained\n    (an error of 10% in the result is accepted).\n */\nstatic double nfa(int n, int k, double p, double logNT)\n{\n  static double inv[TABSIZE];   /* table to keep computed inverse values */\n  double tolerance = 0.1;       /* an error of 10% in the result is accepted */\n  double log1term,term,bin_term,mult_term,bin_tail,err,p_term;\n  int i;\n\n  /* check parameters */\n  if( n<0 || k<0 || k>n || p<=0.0 || p>=1.0 )\n    error(\"nfa: wrong n, k or p values.\");\n\n  /* trivial cases */\n  if( n==0 || k==0 ) return -logNT;\n  if( n==k ) return -logNT - (double) n * log10(p);\n\n  /* probability term */\n  p_term = p / (1.0-p);\n\n  /* compute the first term of the series */\n  /*\n     binomial_tail(n,k,p) = sum_{i=k}^n bincoef(n,i) * p^i * (1-p)^{n-i}\n     where bincoef(n,i) are the binomial coefficients.\n     But\n       bincoef(n,k) = gamma(n+1) / ( gamma(k+1) * gamma(n-k+1) ).\n     We use this to compute the first term. Actually the log of it.\n   */\n  log1term = log_gamma( (double) n + 1.0 ) - log_gamma( (double) k + 1.0 )\n           - log_gamma( (double) (n-k) + 1.0 )\n           + (double) k * log(p) + (double) (n-k) * log(1.0-p);\n  term = exp(log1term);\n\n  /* in some cases no more computations are needed */\n  if( double_equal(term,0.0) )              /* the first term is almost zero */\n    {\n      if( (double) k > (double) n * p )     /* at begin or end of the tail?  */\n        return -log1term / M_LN10 - logNT;  /* end: use just the first term  */\n      else\n        return -logNT;                      /* begin: the tail is roughly 1  */\n    }\n\n  /* compute more terms if needed */\n  bin_tail = term;\n  for(i=k+1;i<=n;i++)\n    {\n      /*\n         As\n           term_i = bincoef(n,i) * p^i * (1-p)^(n-i)\n         and\n           bincoef(n,i)/bincoef(n,i-1) = n-1+1 / i,\n         then,\n           term_i / term_i-1 = (n-i+1)/i * p/(1-p)\n         and\n           term_i = term_i-1 * (n-i+1)/i * p/(1-p).\n         1/i is stored in a table as they are computed,\n         because divisions are expensive.\n         p/(1-p) is computed only once and stored in 'p_term'.\n       */\n      bin_term = (double) (n-i+1) * ( i<TABSIZE ?\n                   ( inv[i]!=0.0 ? inv[i] : ( inv[i] = 1.0 / (double) i ) ) :\n                   1.0 / (double) i );\n\n      mult_term = bin_term * p_term;\n      term *= mult_term;\n      bin_tail += term;\n      if(bin_term<1.0)\n        {\n          /* When bin_term<1 then mult_term_j<mult_term_i for j>i.\n             Then, the error on the binomial tail when truncated at\n             the i term can be bounded by a geometric series of form\n             term_i * sum mult_term_i^j.                            */\n          err = term * ( ( 1.0 - pow( mult_term, (double) (n-i+1) ) ) /\n                         (1.0-mult_term) - 1.0 );\n\n          /* One wants an error at most of tolerance*final_result, or:\n             tolerance * abs(-log10(bin_tail)-logNT).\n             Now, the error that can be accepted on bin_tail is\n             given by tolerance*final_result divided by the derivative\n             of -log10(x) when x=bin_tail. that is:\n             tolerance * abs(-log10(bin_tail)-logNT) / (1/bin_tail)\n             Finally, we truncate the tail if the error is less than:\n             tolerance * abs(-log10(bin_tail)-logNT) * bin_tail        */\n          if( err < tolerance * fabs(-log10(bin_tail)-logNT) * bin_tail ) break;\n        }\n    }\n  return -log10(bin_tail) - logNT;\n}\n\n\n/*----------------------------------------------------------------------------*/\n/*--------------------------- Rectangle structure ----------------------------*/\n/*----------------------------------------------------------------------------*/\n\n/*----------------------------------------------------------------------------*/\n/** Rectangle structure: line segment with width.\n */\nstruct rect\n{\n  double x1,y1,x2,y2;  /* first and second point of the line segment */\n  double width;        /* rectangle width */\n  double x,y;          /* center of the rectangle */\n  double theta;        /* angle */\n  double dx,dy;        /* vector with the line segment angle */\n  double prec;         /* tolerance angle */\n  double p;            /* probability of a point with angle within 'prec' */\n};\n\n/*----------------------------------------------------------------------------*/\n/** Copy one rectangle structure to another.\n */\nstatic void rect_copy(struct rect * in, struct rect * out)\n{\n  /* check parameters */\n  if( in == NULL || out == NULL ) error(\"rect_copy: invalid 'in' or 'out'.\");\n\n  /* copy values */\n  out->x1 = in->x1;\n  out->y1 = in->y1;\n  out->x2 = in->x2;\n  out->y2 = in->y2;\n  out->width = in->width;\n  out->x = in->x;\n  out->y = in->y;\n  out->theta = in->theta;\n  out->dx = in->dx;\n  out->dy = in->dy;\n  out->prec = in->prec;\n  out->p = in->p;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Rectangle points iterator.\n\n    The integer coordinates of pixels inside a rectangle are\n    iteratively explored. This structure keep track of the process and\n    functions ri_ini(), ri_inc(), ri_end(), and ri_del() are used in\n    the process. An example of how to use the iterator is as follows:\n    \\code\n\n      struct rect * rec = XXX; // some rectangle\n      rect_iter * i;\n      for( i=ri_ini(rec); !ri_end(i); ri_inc(i) )\n        {\n          // your code, using 'i->x' and 'i->y' as coordinates\n        }\n      ri_del(i); // delete iterator\n\n    \\endcode\n    The pixels are explored 'column' by 'column', where we call\n    'column' a set of pixels with the same x value that are inside the\n    rectangle. The following is an schematic representation of a\n    rectangle, the 'column' being explored is marked by colons, and\n    the current pixel being explored is 'x,y'.\n    \\verbatim\n\n              vx[1],vy[1]\n                 *   *\n                *       *\n               *           *\n              *               ye\n             *                :  *\n        vx[0],vy[0]           :     *\n               *              :        *\n                  *          x,y          *\n                     *        :              *\n                        *     :            vx[2],vy[2]\n                           *  :                *\n        y                     ys              *\n        ^                        *           *\n        |                           *       *\n        |                              *   *\n        +---> x                      vx[3],vy[3]\n\n    \\endverbatim\n    The first 'column' to be explored is the one with the smaller x\n    value. Each 'column' is explored starting from the pixel of the\n    'column' (inside the rectangle) with the smaller y value.\n\n    The four corners of the rectangle are stored in order that rotates\n    around the corners at the arrays 'vx[]' and 'vy[]'. The first\n    point is always the one with smaller x value.\n\n    'x' and 'y' are the coordinates of the pixel being explored. 'ys'\n    and 'ye' are the start and end values of the current column being\n    explored. So, 'ys' < 'ye'.\n */\ntypedef struct\n{\n  double vx[4];  /* rectangle's corner X coordinates in circular order */\n  double vy[4];  /* rectangle's corner Y coordinates in circular order */\n  double ys,ye;  /* start and end Y values of current 'column' */\n  int x,y;       /* coordinates of currently explored pixel */\n} rect_iter;\n\n/*----------------------------------------------------------------------------*/\n/** Interpolate y value corresponding to 'x' value given, in\n    the line 'x1,y1' to 'x2,y2'; if 'x1=x2' return the smaller\n    of 'y1' and 'y2'.\n\n    The following restrictions are required:\n    - x1 <= x2\n    - x1 <= x\n    - x  <= x2\n */\nstatic double inter_low(double x, double x1, double y1, double x2, double y2)\n{\n  /* check parameters */\n  if( x1 > x2 || x < x1 || x > x2 )\n    error(\"inter_low: unsuitable input, 'x1>x2' or 'x<x1' or 'x>x2'.\");\n\n  /* interpolation */\n  if( double_equal(x1,x2) && y1<y2 ) return y1;\n  if( double_equal(x1,x2) && y1>y2 ) return y2;\n  return y1 + (x-x1) * (y2-y1) / (x2-x1);\n}\n\n/*----------------------------------------------------------------------------*/\n/** Interpolate y value corresponding to 'x' value given, in\n    the line 'x1,y1' to 'x2,y2'; if 'x1=x2' return the larger\n    of 'y1' and 'y2'.\n\n    The following restrictions are required:\n    - x1 <= x2\n    - x1 <= x\n    - x  <= x2\n */\nstatic double inter_hi(double x, double x1, double y1, double x2, double y2)\n{\n  /* check parameters */\n  if( x1 > x2 || x < x1 || x > x2 )\n    error(\"inter_hi: unsuitable input, 'x1>x2' or 'x<x1' or 'x>x2'.\");\n\n  /* interpolation */\n  if( double_equal(x1,x2) && y1<y2 ) return y2;\n  if( double_equal(x1,x2) && y1>y2 ) return y1;\n  return y1 + (x-x1) * (y2-y1) / (x2-x1);\n}\n\n/*----------------------------------------------------------------------------*/\n/** Free memory used by a rectangle iterator.\n */\nstatic void ri_del(rect_iter * iter)\n{\n  if( iter == NULL ) error(\"ri_del: NULL iterator.\");\n  free( (void *) iter );\n}\n\n/*----------------------------------------------------------------------------*/\n/** Check if the iterator finished the full iteration.\n\n    See details in \\ref rect_iter\n */\nstatic int ri_end(rect_iter * i)\n{\n  /* check input */\n  if( i == NULL ) error(\"ri_end: NULL iterator.\");\n\n  /* if the current x value is larger than the larger\n     x value in the rectangle (vx[2]), we know the full\n     exploration of the rectangle is finished. */\n  return (double)(i->x) > i->vx[2];\n}\n\n/*----------------------------------------------------------------------------*/\n/** Increment a rectangle iterator.\n\n    See details in \\ref rect_iter\n */\nstatic void ri_inc(rect_iter * i)\n{\n  /* check input */\n  if( i == NULL ) error(\"ri_inc: NULL iterator.\");\n\n  /* if not at end of exploration,\n     increase y value for next pixel in the 'column' */\n  if( !ri_end(i) ) i->y++;\n\n  /* if the end of the current 'column' is reached,\n     and it is not the end of exploration,\n     advance to the next 'column' */\n  while( (double) (i->y) > i->ye && !ri_end(i) )\n    {\n      /* increase x, next 'column' */\n      i->x++;\n\n      /* if end of exploration, return */\n      if( ri_end(i) ) return;\n\n      /* update lower y limit (start) for the new 'column'.\n\n         We need to interpolate the y value that corresponds to the\n         lower side of the rectangle. The first thing is to decide if\n         the corresponding side is\n\n           vx[0],vy[0] to vx[3],vy[3] or\n           vx[3],vy[3] to vx[2],vy[2]\n\n         Then, the side is interpolated for the x value of the\n         'column'. But, if the side is vertical (as it could happen if\n         the rectangle is vertical and we are dealing with the first\n         or last 'columns') then we pick the lower value of the side\n         by using 'inter_low'.\n       */\n      if( (double) i->x < i->vx[3] )\n        i->ys = inter_low((double)i->x,i->vx[0],i->vy[0],i->vx[3],i->vy[3]);\n      else\n        i->ys = inter_low((double)i->x,i->vx[3],i->vy[3],i->vx[2],i->vy[2]);\n\n      /* update upper y limit (end) for the new 'column'.\n\n         We need to interpolate the y value that corresponds to the\n         upper side of the rectangle. The first thing is to decide if\n         the corresponding side is\n\n           vx[0],vy[0] to vx[1],vy[1] or\n           vx[1],vy[1] to vx[2],vy[2]\n\n         Then, the side is interpolated for the x value of the\n         'column'. But, if the side is vertical (as it could happen if\n         the rectangle is vertical and we are dealing with the first\n         or last 'columns') then we pick the lower value of the side\n         by using 'inter_low'.\n       */\n      if( (double)i->x < i->vx[1] )\n        i->ye = inter_hi((double)i->x,i->vx[0],i->vy[0],i->vx[1],i->vy[1]);\n      else\n        i->ye = inter_hi((double)i->x,i->vx[1],i->vy[1],i->vx[2],i->vy[2]);\n\n      /* new y */\n      i->y = (int) ceil(i->ys);\n    }\n}\n\n/*----------------------------------------------------------------------------*/\n/** Create and initialize a rectangle iterator.\n\n    See details in \\ref rect_iter\n */\nstatic rect_iter * ri_ini(struct rect * r)\n{\n  double vx[4],vy[4];\n  int n,offset;\n  rect_iter * i;\n\n  /* check parameters */\n  if( r == NULL ) error(\"ri_ini: invalid rectangle.\");\n\n  /* get memory */\n  i = (rect_iter *) malloc(sizeof(rect_iter));\n  if( i == NULL ) error(\"ri_ini: Not enough memory.\");\n\n  /* build list of rectangle corners ordered\n     in a circular way around the rectangle */\n  vx[0] = r->x1 - r->dy * r->width / 2.0;\n  vy[0] = r->y1 + r->dx * r->width / 2.0;\n  vx[1] = r->x2 - r->dy * r->width / 2.0;\n  vy[1] = r->y2 + r->dx * r->width / 2.0;\n  vx[2] = r->x2 + r->dy * r->width / 2.0;\n  vy[2] = r->y2 - r->dx * r->width / 2.0;\n  vx[3] = r->x1 + r->dy * r->width / 2.0;\n  vy[3] = r->y1 - r->dx * r->width / 2.0;\n\n  /* compute rotation of index of corners needed so that the first\n     point has the smaller x.\n\n     if one side is vertical, thus two corners have the same smaller x\n     value, the one with the largest y value is selected as the first.\n   */\n  if( r->x1 < r->x2 && r->y1 <= r->y2 ) offset = 0;\n  else if( r->x1 >= r->x2 && r->y1 < r->y2 ) offset = 1;\n  else if( r->x1 > r->x2 && r->y1 >= r->y2 ) offset = 2;\n  else offset = 3;\n\n  /* apply rotation of index. */\n  for(n=0; n<4; n++)\n    {\n      i->vx[n] = vx[(offset+n)%4];\n      i->vy[n] = vy[(offset+n)%4];\n    }\n\n  /* Set a initial condition.\n\n     The values are set to values that will cause 'ri_inc' (that will\n     be called immediately) to initialize correctly the first 'column'\n     and compute the limits 'ys' and 'ye'.\n\n     'y' is set to the integer value of vy[0], the starting corner.\n\n     'ys' and 'ye' are set to very small values, so 'ri_inc' will\n     notice that it needs to start a new 'column'.\n\n     The smaller integer coordinate inside of the rectangle is\n     'ceil(vx[0])'. The current 'x' value is set to that value minus\n     one, so 'ri_inc' (that will increase x by one) will advance to\n     the first 'column'.\n   */\n  i->x = (int) ceil(i->vx[0]) - 1;\n  i->y = (int) ceil(i->vy[0]);\n  i->ys = i->ye = -DBL_MAX;\n\n  /* advance to the first pixel */\n  ri_inc(i);\n\n  return i;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Compute a rectangle's NFA value.\n */\nstatic double rect_nfa(struct rect * rec, image_double angles, double logNT)\n{\n  rect_iter * i;\n  int pts = 0;\n  int alg = 0;\n\n  /* check parameters */\n  if( rec == NULL ) error(\"rect_nfa: invalid rectangle.\");\n  if( angles == NULL ) error(\"rect_nfa: invalid 'angles'.\");\n\n  /* compute the total number of pixels and of aligned points in 'rec' */\n  for(i=ri_ini(rec); !ri_end(i); ri_inc(i)) /* rectangle iterator */\n    if( i->x >= 0 && i->y >= 0 &&\n        i->x < (int) angles->xsize && i->y < (int) angles->ysize )\n      {\n        ++pts; /* total number of pixels counter */\n        if( isaligned(i->x, i->y, angles, rec->theta, rec->prec) )\n          ++alg; /* aligned points counter */\n      }\n  ri_del(i); /* delete iterator */\n\n  return nfa(pts,alg,rec->p,logNT); /* compute NFA value */\n}\n\n\n/*----------------------------------------------------------------------------*/\n/*---------------------------------- Regions ---------------------------------*/\n/*----------------------------------------------------------------------------*/\n\n/*----------------------------------------------------------------------------*/\n/** Compute region's angle as the principal inertia axis of the region.\n\n    The following is the region inertia matrix A:\n    @f[\n\n        A = \\left(\\begin{array}{cc}\n                                    Ixx & Ixy \\\\\n                                    Ixy & Iyy \\\\\n             \\end{array}\\right)\n\n    @f]\n    where\n\n      Ixx =   sum_i G(i).(y_i - cx)^2\n\n      Iyy =   sum_i G(i).(x_i - cy)^2\n\n      Ixy = - sum_i G(i).(x_i - cx).(y_i - cy)\n\n    and\n    - G(i) is the gradient norm at pixel i, used as pixel's weight.\n    - x_i and y_i are the coordinates of pixel i.\n    - cx and cy are the coordinates of the center of th region.\n\n    lambda1 and lambda2 are the eigenvalues of matrix A,\n    with lambda1 >= lambda2. They are found by solving the\n    characteristic polynomial:\n\n      det( lambda I - A) = 0\n\n    that gives:\n\n      lambda1 = ( Ixx + Iyy + sqrt( (Ixx-Iyy)^2 + 4.0*Ixy*Ixy) ) / 2\n\n      lambda2 = ( Ixx + Iyy - sqrt( (Ixx-Iyy)^2 + 4.0*Ixy*Ixy) ) / 2\n\n    To get the line segment direction we want to get the angle the\n    eigenvector assotiated to the smaller eigenvalue. We have to solve\n    a,b in:\n\n      a.Ixx + b.Ixy = a.lambda2\n\n      a.Ixy + b.Iyy = b.lambda2\n\n    We want the angle theta = atan(b/a). It can be computed with\n    any of the two equations:\n\n      theta = atan( (lambda2-Ixx) / Ixy )\n\n    or\n\n      theta = atan( Ixy / (lambda2-Iyy) )\n\n    When |Ixx| > |Iyy| we use the first, otherwise the second (just to\n    get better numeric precision).\n */\nstatic double get_theta( struct point * reg, int reg_size, double x, double y,\n                         image_double modgrad, double reg_angle, double prec )\n{\n  double lambda,theta,weight;\n  double Ixx = 0.0;\n  double Iyy = 0.0;\n  double Ixy = 0.0;\n  int i;\n\n  /* check parameters */\n  if( reg == NULL ) error(\"get_theta: invalid region.\");\n  if( reg_size <= 1 ) error(\"get_theta: region size <= 1.\");\n  if( modgrad == NULL || modgrad->data == NULL )\n    error(\"get_theta: invalid 'modgrad'.\");\n  if( prec < 0.0 ) error(\"get_theta: 'prec' must be positive.\");\n\n  /* compute inertia matrix */\n  for(i=0; i<reg_size; i++)\n    {\n      weight = modgrad->data[ reg[i].x + reg[i].y * modgrad->xsize ];\n      Ixx += ( (double) reg[i].y - y ) * ( (double) reg[i].y - y ) * weight;\n      Iyy += ( (double) reg[i].x - x ) * ( (double) reg[i].x - x ) * weight;\n      Ixy -= ( (double) reg[i].x - x ) * ( (double) reg[i].y - y ) * weight;\n    }\n  if( double_equal(Ixx,0.0) && double_equal(Iyy,0.0) && double_equal(Ixy,0.0) )\n    error(\"get_theta: null inertia matrix.\");\n\n  /* compute smallest eigenvalue */\n  lambda = 0.5 * ( Ixx + Iyy - sqrt( (Ixx-Iyy)*(Ixx-Iyy) + 4.0*Ixy*Ixy ) );\n\n  /* compute angle */\n  theta = fabs(Ixx)>fabs(Iyy) ? atan2(lambda-Ixx,Ixy) : atan2(Ixy,lambda-Iyy);\n\n  /* The previous procedure don't cares about orientation,\n     so it could be wrong by 180 degrees. Here is corrected if necessary. */\n  if( angle_diff(theta,reg_angle) > prec ) theta += M_PI;\n\n  return theta;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Computes a rectangle that covers a region of points.\n */\nstatic void region2rect( struct point * reg, int reg_size,\n                         image_double modgrad, double reg_angle,\n                         double prec, double p, struct rect * rec )\n{\n  double x,y,dx,dy,l,w,theta,weight,sum,l_min,l_max,w_min,w_max;\n  int i;\n\n  /* check parameters */\n  if( reg == NULL ) error(\"region2rect: invalid region.\");\n  if( reg_size <= 1 ) error(\"region2rect: region size <= 1.\");\n  if( modgrad == NULL || modgrad->data == NULL )\n    error(\"region2rect: invalid image 'modgrad'.\");\n  if( rec == NULL ) error(\"region2rect: invalid 'rec'.\");\n\n  /* center of the region:\n\n     It is computed as the weighted sum of the coordinates\n     of all the pixels in the region. The norm of the gradient\n     is used as the weight of a pixel. The sum is as follows:\n       cx = \\sum_i G(i).x_i\n       cy = \\sum_i G(i).y_i\n     where G(i) is the norm of the gradient of pixel i\n     and x_i,y_i are its coordinates.\n   */\n  x = y = sum = 0.0;\n  for(i=0; i<reg_size; i++)\n    {\n      weight = modgrad->data[ reg[i].x + reg[i].y * modgrad->xsize ];\n      x += (double) reg[i].x * weight;\n      y += (double) reg[i].y * weight;\n      sum += weight;\n    }\n  if( sum <= 0.0 ) error(\"region2rect: weights sum equal to zero.\");\n  x /= sum;\n  y /= sum;\n\n  /* theta */\n  theta = get_theta(reg,reg_size,x,y,modgrad,reg_angle,prec);\n\n  /* length and width:\n\n     'l' and 'w' are computed as the distance from the center of the\n     region to pixel i, projected along the rectangle axis (dx,dy) and\n     to the orthogonal axis (-dy,dx), respectively.\n\n     The length of the rectangle goes from l_min to l_max, where l_min\n     and l_max are the minimum and maximum values of l in the region.\n     Analogously, the width is selected from w_min to w_max, where\n     w_min and w_max are the minimum and maximum of w for the pixels\n     in the region.\n   */\n  dx = cos(theta);\n  dy = sin(theta);\n  l_min = l_max = w_min = w_max = 0.0;\n  for(i=0; i<reg_size; i++)\n    {\n      l =  ( (double) reg[i].x - x) * dx + ( (double) reg[i].y - y) * dy;\n      w = -( (double) reg[i].x - x) * dy + ( (double) reg[i].y - y) * dx;\n\n      if( l > l_max ) l_max = l;\n      if( l < l_min ) l_min = l;\n      if( w > w_max ) w_max = w;\n      if( w < w_min ) w_min = w;\n    }\n\n  /* store values */\n  rec->x1 = x + l_min * dx;\n  rec->y1 = y + l_min * dy;\n  rec->x2 = x + l_max * dx;\n  rec->y2 = y + l_max * dy;\n  rec->width = w_max - w_min;\n  rec->x = x;\n  rec->y = y;\n  rec->theta = theta;\n  rec->dx = dx;\n  rec->dy = dy;\n  rec->prec = prec;\n  rec->p = p;\n\n  /* we impose a minimal width of one pixel\n\n     A sharp horizontal or vertical step would produce a perfectly\n     horizontal or vertical region. The width computed would be\n     zero. But that corresponds to a one pixels width transition in\n     the image.\n   */\n  if( rec->width < 1.0 ) rec->width = 1.0;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Build a region of pixels that share the same angle, up to a\n    tolerance 'prec', starting at point (x,y).\n */\nstatic void region_grow( int x, int y, image_double angles, struct point * reg,\n                         int * reg_size, double * reg_angle, image_char used,\n                         double prec )\n{\n  double sumdx,sumdy;\n  int xx,yy,i;\n\n  /* check parameters */\n  if( x < 0 || y < 0 || x >= (int) angles->xsize || y >= (int) angles->ysize )\n    error(\"region_grow: (x,y) out of the image.\");\n  if( angles == NULL || angles->data == NULL )\n    error(\"region_grow: invalid image 'angles'.\");\n  if( reg == NULL ) error(\"region_grow: invalid 'reg'.\");\n  if( reg_size == NULL ) error(\"region_grow: invalid pointer 'reg_size'.\");\n  if( reg_angle == NULL ) error(\"region_grow: invalid pointer 'reg_angle'.\");\n  if( used == NULL || used->data == NULL )\n    error(\"region_grow: invalid image 'used'.\");\n\n  /* first point of the region */\n  *reg_size = 1;\n  reg[0].x = x;\n  reg[0].y = y;\n  *reg_angle = angles->data[x+y*angles->xsize];  /* region's angle */\n  sumdx = cos(*reg_angle);\n  sumdy = sin(*reg_angle);\n  used->data[x+y*used->xsize] = USED;\n\n  /* try neighbors as new region points */\n  for(i=0; i<*reg_size; i++)\n    for(xx=reg[i].x-1; xx<=reg[i].x+1; xx++)\n      for(yy=reg[i].y-1; yy<=reg[i].y+1; yy++)\n        if( xx>=0 && yy>=0 && xx<(int)used->xsize && yy<(int)used->ysize &&\n            used->data[xx+yy*used->xsize] != USED &&\n            isaligned(xx,yy,angles,*reg_angle,prec) )\n          {\n            /* add point */\n            used->data[xx+yy*used->xsize] = USED;\n            reg[*reg_size].x = xx;\n            reg[*reg_size].y = yy;\n            ++(*reg_size);\n\n            /* update region's angle */\n            sumdx += cos( angles->data[xx+yy*angles->xsize] );\n            sumdy += sin( angles->data[xx+yy*angles->xsize] );\n            *reg_angle = atan2(sumdy,sumdx);\n          }\n}\n\n/*----------------------------------------------------------------------------*/\n/** Try some rectangles variations to improve NFA value. Only if the\n    rectangle is not meaningful (i.e., log_nfa <= eps).\n */\nstatic double rect_improve( struct rect * rec, image_double angles,\n                            double logNT, double eps )\n{\n  struct rect r;\n  double log_nfa,log_nfa_new;\n  double delta = 0.5;\n  double delta_2 = delta / 2.0;\n  int n;\n\n  log_nfa = rect_nfa(rec,angles,logNT);\n\n  if( log_nfa > eps ) return log_nfa;\n\n  /* try finer precisions */\n  rect_copy(rec,&r);\n  for(n=0; n<5; n++)\n    {\n      r.p /= 2.0;\n      r.prec = r.p * M_PI;\n      log_nfa_new = rect_nfa(&r,angles,logNT);\n      if( log_nfa_new > log_nfa )\n        {\n          log_nfa = log_nfa_new;\n          rect_copy(&r,rec);\n        }\n    }\n\n  if( log_nfa > eps ) return log_nfa;\n\n  /* try to reduce width */\n  rect_copy(rec,&r);\n  for(n=0; n<5; n++)\n    {\n      if( (r.width - delta) >= 0.5 )\n        {\n          r.width -= delta;\n          log_nfa_new = rect_nfa(&r,angles,logNT);\n          if( log_nfa_new > log_nfa )\n            {\n              rect_copy(&r,rec);\n              log_nfa = log_nfa_new;\n            }\n        }\n    }\n\n  if( log_nfa > eps ) return log_nfa;\n\n  /* try to reduce one side of the rectangle */\n  rect_copy(rec,&r);\n  for(n=0; n<5; n++)\n    {\n      if( (r.width - delta) >= 0.5 )\n        {\n          r.x1 += -r.dy * delta_2;\n          r.y1 +=  r.dx * delta_2;\n          r.x2 += -r.dy * delta_2;\n          r.y2 +=  r.dx * delta_2;\n          r.width -= delta;\n          log_nfa_new = rect_nfa(&r,angles,logNT);\n          if( log_nfa_new > log_nfa )\n            {\n              rect_copy(&r,rec);\n              log_nfa = log_nfa_new;\n            }\n        }\n    }\n\n  if( log_nfa > eps ) return log_nfa;\n\n  /* try to reduce the other side of the rectangle */\n  rect_copy(rec,&r);\n  for(n=0; n<5; n++)\n    {\n      if( (r.width - delta) >= 0.5 )\n        {\n          r.x1 -= -r.dy * delta_2;\n          r.y1 -=  r.dx * delta_2;\n          r.x2 -= -r.dy * delta_2;\n          r.y2 -=  r.dx * delta_2;\n          r.width -= delta;\n          log_nfa_new = rect_nfa(&r,angles,logNT);\n          if( log_nfa_new > log_nfa )\n            {\n              rect_copy(&r,rec);\n              log_nfa = log_nfa_new;\n            }\n        }\n    }\n\n  if( log_nfa > eps ) return log_nfa;\n\n  /* try even finer precisions */\n  rect_copy(rec,&r);\n  for(n=0; n<5; n++)\n    {\n      r.p /= 2.0;\n      r.prec = r.p * M_PI;\n      log_nfa_new = rect_nfa(&r,angles,logNT);\n      if( log_nfa_new > log_nfa )\n        {\n          log_nfa = log_nfa_new;\n          rect_copy(&r,rec);\n        }\n    }\n\n  return log_nfa;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Reduce the region size, by elimination the points far from the\n    starting point, until that leads to rectangle with the right\n    density of region points or to discard the region if too small.\n */\nstatic int reduce_region_radius( struct point * reg, int * reg_size,\n                                 image_double modgrad, double reg_angle,\n                                 double prec, double p, struct rect * rec,\n                                 image_char used, image_double angles,\n                                 double density_th )\n{\n  double density,rad1,rad2,rad,xc,yc;\n  int i;\n\n  /* check parameters */\n  if( reg == NULL ) error(\"reduce_region_radius: invalid pointer 'reg'.\");\n  if( reg_size == NULL )\n    error(\"reduce_region_radius: invalid pointer 'reg_size'.\");\n  if( prec < 0.0 ) error(\"reduce_region_radius: 'prec' must be positive.\");\n  if( rec == NULL ) error(\"reduce_region_radius: invalid pointer 'rec'.\");\n  if( used == NULL || used->data == NULL )\n    error(\"reduce_region_radius: invalid image 'used'.\");\n  if( angles == NULL || angles->data == NULL )\n    error(\"reduce_region_radius: invalid image 'angles'.\");\n\n  /* compute region points density */\n  density = (double) *reg_size /\n                         ( dist(rec->x1,rec->y1,rec->x2,rec->y2) * rec->width );\n\n  /* if the density criterion is satisfied there is nothing to do */\n  if( density >= density_th ) return TRUE;\n\n  /* compute region's radius */\n  xc = (double) reg[0].x;\n  yc = (double) reg[0].y;\n  rad1 = dist( xc, yc, rec->x1, rec->y1 );\n  rad2 = dist( xc, yc, rec->x2, rec->y2 );\n  rad = rad1 > rad2 ? rad1 : rad2;\n\n  /* while the density criterion is not satisfied, remove farther pixels */\n  while( density < density_th )\n    {\n      rad *= 0.75; /* reduce region's radius to 75% of its value */\n\n      /* remove points from the region and update 'used' map */\n      for(i=0; i<*reg_size; i++)\n        if( dist( xc, yc, (double) reg[i].x, (double) reg[i].y ) > rad )\n          {\n            /* point not kept, mark it as NOTUSED */\n            used->data[ reg[i].x + reg[i].y * used->xsize ] = NOTUSED;\n            /* remove point from the region */\n            reg[i].x = reg[*reg_size-1].x; /* if i==*reg_size-1 copy itself */\n            reg[i].y = reg[*reg_size-1].y;\n            --(*reg_size);\n            --i; /* to avoid skipping one point */\n          }\n\n      /* reject if the region is too small.\n         2 is the minimal region size for 'region2rect' to work. */\n      if( *reg_size < 2 ) return FALSE;\n\n      /* re-compute rectangle */\n      region2rect(reg,*reg_size,modgrad,reg_angle,prec,p,rec);\n\n      /* re-compute region points density */\n      density = (double) *reg_size /\n                         ( dist(rec->x1,rec->y1,rec->x2,rec->y2) * rec->width );\n    }\n\n  /* if this point is reached, the density criterion is satisfied */\n  return TRUE;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Refine a rectangle.\n\n    For that, an estimation of the angle tolerance is performed by the\n    standard deviation of the angle at points near the region's\n    starting point. Then, a new region is grown starting from the same\n    point, but using the estimated angle tolerance. If this fails to\n    produce a rectangle with the right density of region points,\n    'reduce_region_radius' is called to try to satisfy this condition.\n */\nstatic int refine( struct point * reg, int * reg_size, image_double modgrad,\n                   double reg_angle, double prec, double p, struct rect * rec,\n                   image_char used, image_double angles, double density_th )\n{\n  double angle,ang_d,mean_angle,tau,density,xc,yc,ang_c,sum,s_sum;\n  int i,n;\n\n  /* check parameters */\n  if( reg == NULL ) error(\"refine: invalid pointer 'reg'.\");\n  if( reg_size == NULL ) error(\"refine: invalid pointer 'reg_size'.\");\n  if( prec < 0.0 ) error(\"refine: 'prec' must be positive.\");\n  if( rec == NULL ) error(\"refine: invalid pointer 'rec'.\");\n  if( used == NULL || used->data == NULL )\n    error(\"refine: invalid image 'used'.\");\n  if( angles == NULL || angles->data == NULL )\n    error(\"refine: invalid image 'angles'.\");\n\n  /* compute region points density */\n  density = (double) *reg_size /\n                         ( dist(rec->x1,rec->y1,rec->x2,rec->y2) * rec->width );\n\n  /* if the density criterion is satisfied there is nothing to do */\n  if( density >= density_th ) return TRUE;\n\n  /*------ First try: reduce angle tolerance ------*/\n\n  /* compute the new mean angle and tolerance */\n  xc = (double) reg[0].x;\n  yc = (double) reg[0].y;\n  ang_c = angles->data[ reg[0].x + reg[0].y * angles->xsize ];\n  sum = s_sum = 0.0;\n  n = 0;\n  for(i=0; i<*reg_size; i++)\n    {\n      used->data[ reg[i].x + reg[i].y * used->xsize ] = NOTUSED;\n      if( dist( xc, yc, (double) reg[i].x, (double) reg[i].y ) < rec->width )\n        {\n          angle = angles->data[ reg[i].x + reg[i].y * angles->xsize ];\n          ang_d = angle_diff_signed(angle,ang_c);\n          sum += ang_d;\n          s_sum += ang_d * ang_d;\n          ++n;\n        }\n    }\n  mean_angle = sum / (double) n;\n  tau = 2.0 * sqrt( (s_sum - 2.0 * mean_angle * sum) / (double) n\n                         + mean_angle*mean_angle ); /* 2 * standard deviation */\n\n  /* find a new region from the same starting point and new angle tolerance */\n  region_grow(reg[0].x,reg[0].y,angles,reg,reg_size,&reg_angle,used,tau);\n\n  /* if the region is too small, reject */\n  if( *reg_size < 2 ) return FALSE;\n\n  /* re-compute rectangle */\n  region2rect(reg,*reg_size,modgrad,reg_angle,prec,p,rec);\n\n  /* re-compute region points density */\n  density = (double) *reg_size /\n                      ( dist(rec->x1,rec->y1,rec->x2,rec->y2) * rec->width );\n\n  /*------ Second try: reduce region radius ------*/\n  if( density < density_th )\n    return reduce_region_radius( reg, reg_size, modgrad, reg_angle, prec, p,\n                                 rec, used, angles, density_th );\n\n  /* if this point is reached, the density criterion is satisfied */\n  return TRUE;\n}\n\n\n/*----------------------------------------------------------------------------*/\n/*-------------------------- Line Segment Detector ---------------------------*/\n/*----------------------------------------------------------------------------*/\n\n/*----------------------------------------------------------------------------*/\n/** LSD full interface.\n */\nntuple_list LineSegmentDetection( image_double image, double scale,\n                                  double sigma_scale, double quant,\n                                  double ang_th, double eps, double density_th,\n                                  int n_bins, double max_grad,\n                                  image_int * region )\n{\n  ntuple_list out = new_ntuple_list(5);\n  image_double scaled_image,angles,modgrad;\n  image_char used;\n  struct coorlist * list_p;\n  void * mem_p;\n  struct rect rec;\n  struct point * reg;\n  int reg_size,min_reg_size,i;\n  unsigned int xsize,ysize;\n  double rho,reg_angle,prec,p,log_nfa,logNT;\n  int ls_count = 0;                   /* line segments are numbered 1,2,3,... */\n\n\n  /* check parameters */\n  if( image==NULL || image->data==NULL || image->xsize==0 || image->ysize==0 )\n    error(\"invalid image input.\");\n  if( scale <= 0.0 ) error(\"'scale' value must be positive.\");\n  if( sigma_scale <= 0.0 ) error(\"'sigma_scale' value must be positive.\");\n  if( quant < 0.0 ) error(\"'quant' value must be positive.\");\n  if( ang_th <= 0.0 || ang_th >= 180.0 )\n    error(\"'ang_th' value must be in the range (0,180).\");\n  if( density_th < 0.0 || density_th > 1.0 )\n    error(\"'density_th' value must be in the range [0,1].\");\n  if( n_bins <= 0 ) error(\"'n_bins' value must be positive.\");\n  if( max_grad <= 0.0 ) error(\"'max_grad' value must be positive.\");\n\n\n  /* angle tolerance */\n  prec = M_PI * ang_th / 180.0;\n  p = ang_th / 180.0;\n  rho = quant / sin(prec); /* gradient magnitude threshold */\n\n\n  /* scale image (if necessary) and compute angle at each pixel */\n  if( scale != 1.0 )\n    {\n      scaled_image = gaussian_sampler( image, scale, sigma_scale );\n      angles = ll_angle( scaled_image, rho, &list_p, &mem_p,\n                         &modgrad, (unsigned int) n_bins, max_grad );\n      free_image_double(scaled_image);\n    }\n  else\n    angles = ll_angle( image, rho, &list_p, &mem_p, &modgrad,\n                       (unsigned int) n_bins, max_grad );\n  xsize = angles->xsize;\n  ysize = angles->ysize;\n  logNT = 5.0 * ( log10( (double) xsize ) + log10( (double) ysize ) ) / 2.0;\n  min_reg_size = (int) (-logNT/log10(p)); /* minimal number of points in region\n                                             that can give a meaningful event */\n\n\n  /* initialize some structures */\n  if( region != NULL ) /* image to output pixel region number, if asked */\n    *region = new_image_int_ini(angles->xsize,angles->ysize,0);\n  used = new_image_char_ini(xsize,ysize,NOTUSED);\n  reg = (struct point *) calloc( (size_t) (xsize*ysize), sizeof(struct point) );\n  if( reg == NULL ) error(\"not enough memory!\");\n\n\n  /* search for line segments */\n  for(; list_p != NULL; list_p = list_p->next )\n    if( used->data[ list_p->x + list_p->y * used->xsize ] == NOTUSED &&\n        angles->data[ list_p->x + list_p->y * angles->xsize ] != NOTDEF )\n       /* there is no risk of double comparison problems here\n          because we are only interested in the exact NOTDEF value */\n      {\n        /* find the region of connected point and ~equal angle */\n        region_grow( list_p->x, list_p->y, angles, reg, &reg_size,\n                     &reg_angle, used, prec );\n\n        /* reject small regions */\n        if( reg_size < min_reg_size ) continue;\n\n        /* construct rectangular approximation for the region */\n        region2rect(reg,reg_size,modgrad,reg_angle,prec,p,&rec);\n\n        /* Check if the rectangle exceeds the minimal density of\n           region points. If not, try to improve the region.\n           The rectangle will be rejected if the final one does\n           not fulfill the minimal density condition.\n           This is an addition to the original LSD algorithm published in\n           \"LSD: A Fast Line Segment Detector with a False Detection Control\"\n           by R. Grompone von Gioi, J. Jakubowicz, J.M. Morel, and G. Randall.\n           The original algorithm is obtained with density_th = 0.0.\n         */\n        if( !refine( reg, &reg_size, modgrad, reg_angle,\n                     prec, p, &rec, used, angles, density_th ) ) continue;\n\n        /* compute NFA value */\n        log_nfa = rect_improve(&rec,angles,logNT,eps);\n        if( log_nfa <= eps ) continue;\n\n        /* A New Line Segment was found! */\n        ++ls_count;  /* increase line segment counter */\n\n        /*\n           The gradient was computed with a 2x2 mask, its value corresponds to\n           points with an offset of (0.5,0.5), that should be added to output.\n           The coordinates origin is at the center of pixel (0,0).\n         */\n        rec.x1 += 0.5; rec.y1 += 0.5;\n        rec.x2 += 0.5; rec.y2 += 0.5;\n\n        /* scale the result values if a subsampling was performed */\n        if( scale != 1.0 )\n          {\n            rec.x1 /= scale; rec.y1 /= scale;\n            rec.x2 /= scale; rec.y2 /= scale;\n            rec.width /= scale;\n          }\n\n        /* add line segment found to output */\n        add_5tuple(out, rec.x1, rec.y1, rec.x2, rec.y2, rec.width);\n\n        /* add region number to 'region' image if needed */\n        if( region != NULL )\n          for(i=0; i<reg_size; i++)\n            (*region)->data[reg[i].x+reg[i].y*(*region)->xsize] = ls_count;\n      }\n\n\n  /* free memory */\n  free_image_double(angles);\n  free_image_double(modgrad);\n  free_image_char(used);\n  free( (void *) reg );\n  free( (void *) mem_p );\n\n  return out;\n}\n\n/*----------------------------------------------------------------------------*/\n/** LSD Simple Interface with Scale.\n */\nntuple_list lsd_scale(image_double image, double scale)\n{\n  /* LSD parameters */\n  double sigma_scale = 0.6; /* Sigma for Gaussian filter is computed as\n                                sigma = sigma_scale/scale.                    */\n  double quant = 2.0;       /* Bound to the quantization error on the\n                                gradient norm.                                */\n  double ang_th = 22.5;     /* Gradient angle tolerance in degrees.           */\n  double eps = 0.0;         /* Detection threshold, -log10(NFA).              */\n  double density_th = 0.7;  /* Minimal density of region points in rectangle. */\n  int n_bins = 1024;        /* Number of bins in pseudo-ordering of gradient\n                               modulus.                                       */\n  double max_grad = 255.0;  /* Gradient modulus in the highest bin. The\n                               default value corresponds to the highest\n                               gradient modulus on images with gray\n                               levels in [0,255].                             */\n\n  return LineSegmentDetection( image, scale, sigma_scale, quant, ang_th, eps,\n                               density_th, n_bins, max_grad, NULL );\n}\n\n/*----------------------------------------------------------------------------*/\n/** LSD Simple Interface.\n */\nntuple_list lsd(image_double image)\n{\n  /* LSD parameters */\n  double scale = 0.8;       /* Scale the image by Gaussian filter to 'scale'. */\n\n  return lsd_scale(image,scale);\n}\n/*----------------------------------------------------------------------------*/\n"
  },
  {
    "path": "thirdparty/LSD/lsd.h",
    "content": "/*----------------------------------------------------------------------------\n\n  LSD - Line Segment Detector on digital images\n\n  Copyright 2007-2010 rafael grompone von gioi (grompone@gmail.com)\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as\n  published by the Free Software Foundation, either version 3 of the\n  License, or (at your option) any later version.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program. If not, see <http://www.gnu.org/licenses/>.\n\n  ----------------------------------------------------------------------------*/\n\n/*----------------------------------------------------------------------------*/\n/** @file lsd.h\n    LSD module header\n    @author rafael grompone von gioi (grompone@gmail.com)\n */\n/*----------------------------------------------------------------------------*/\n#ifndef LSD_HEADER\n#define LSD_HEADER\n\n\n/*----------------------------------------------------------------------------*/\n/*----------------------- 'list of n-tuple' data type ------------------------*/\n/*----------------------------------------------------------------------------*/\n/** 'list of n-tuple' data type\n\n    The i component, of the n-tuple number j, of an n-tuple list 'ntl'\n    is accessed with:\n\n      ntl->values[ i + j * ntl->dim ]\n\n    The dimension of the n-tuple (n) is:\n\n      ntl->dim\n\n    The number of number of n-tuples in the list is:\n\n      ntl->size\n\n    The maximum number of n-tuples that can be stored in the\n    list with the allocated memory at a given time is given by:\n\n      ntl->max_size\n */\ntypedef struct ntuple_list_s\n{\n  unsigned int size;\n  unsigned int max_size;\n  unsigned int dim;\n  double * values;\n} * ntuple_list;\n\nvoid free_ntuple_list(ntuple_list in);\nntuple_list new_ntuple_list(unsigned int dim);\n\n\n/*----------------------------------------------------------------------------*/\n/*----------------------------- Image Data Types -----------------------------*/\n/*----------------------------------------------------------------------------*/\n\n/*----------------------------------------------------------------------------*/\n/** char image data type\n\n    The pixel value at (x,y) is accessed by:\n\n      image->data[ x + y * image->xsize ]\n\n    with x and y integer.\n */\ntypedef struct image_char_s\n{\n  unsigned char * data;\n  unsigned int xsize,ysize;\n} * image_char;\n\nvoid free_image_char(image_char i);\nimage_char new_image_char(unsigned int xsize, unsigned int ysize);\nimage_char new_image_char_ini( unsigned int xsize, unsigned int ysize,\n                               unsigned char fill_value );\n\n/*----------------------------------------------------------------------------*/\n/** int image data type\n\n    The pixel value at (x,y) is accessed by:\n\n      image->data[ x + y * image->xsize ]\n\n    with x and y integer.\n */\ntypedef struct image_int_s\n{\n  int * data;\n  unsigned int xsize,ysize;\n} * image_int;\n\nvoid free_image_int(image_int i);\nimage_int new_image_int(unsigned int xsize, unsigned int ysize);\nimage_int new_image_int_ini( unsigned int xsize, unsigned int ysize,\n                             int fill_value );\n\n/*----------------------------------------------------------------------------*/\n/** double image data type\n\n    The pixel value at (x,y) is accessed by:\n\n      image->data[ x + y * image->xsize ]\n\n    with x and y integer.\n */\ntypedef struct image_double_s\n{\n  double * data;\n  unsigned int xsize,ysize;\n} * image_double;\n\nvoid free_image_double(image_double i);\nimage_double new_image_double(unsigned int xsize, unsigned int ysize);\nimage_double new_image_double_ini( unsigned int xsize, unsigned int ysize,\n                                   double fill_value );\n\n\n/*----------------------------------------------------------------------------*/\n/*-------------------------- Line Segment Detector ---------------------------*/\n/*----------------------------------------------------------------------------*/\n\n/*----------------------------------------------------------------------------*/\n/* LSD Full Interface                                                         */\n/*----------------------------------------------------------------------------*/\n/** LSD Full Interface\n\n    @param image       Input image.\n\n    @param scale       When different than 1.0, LSD will scale the image by\n                       Gaussian filtering.\n                       Example: is scale=0.8, the input image will be subsampled\n                       to 80% of its size, and then the line segment detector\n                       will be applied.\n                       Suggested value: 0.8\n\n    @param sigma_scale When scale!=1.0, the sigma of the Gaussian filter is:\n                       sigma = sigma_scale / scale,   if scale <  1.0\n                       sigma = sigma_scale,           if scale >= 1.0\n                       Suggested value: 0.6\n\n    @param quant       Bound to the quantization error on the gradient norm.\n                       Example: if gray level is quantized to integer steps,\n                       the gradient (computed by finite differences) error\n                       due to quantization will be bounded by 2.0, as the\n                       worst case is when the error are 1 and -1, that\n                       gives an error of 2.0.\n                       Suggested value: 2.0\n\n    @param ang_th      Gradient angle tolerance in the region growing\n                       algorithm, in degrees.\n                       Suggested value: 22.5\n\n    @param eps         Detection threshold, -log10(NFA).\n                       The bigger, the more strict the detector is,\n                       and will result in less detections.\n                       (Note that the 'minus sign' makes that this\n                       behavior is opposite to the one of NFA.)\n                       The value -log10(NFA) is equivalent but more\n                       intuitive than NFA:\n                       - -1.0 corresponds to 10 mean false alarms\n                       -  0.0 corresponds to 1 mean false alarm\n                       -  1.0 corresponds to 0.1 mean false alarms\n                       -  2.0 corresponds to 0.01 mean false alarms\n                       .\n                       Suggested value: 0.0\n\n    @param density_th  Minimal proportion of region points in a rectangle.\n                       Suggested value: 0.7\n\n    @param n_bins      Number of bins used in the pseudo-ordering of gradient\n                       modulus.\n                       Suggested value: 1024\n\n    @param max_grad    Gradient modulus in the highest bin. For example,\n                       for images with integer gray levels in [0,255],\n                       the maximum possible gradient value is 255.0.\n                       Suggested value: 255.0\n\n    @param region      Optional output: an int image where the pixels used\n                       in some line support region are marked. Unused pixels\n                       have the value '0' while the used ones have the\n                       number of the line segment, numbered 1,2,3,...\n                       If desired, a non NULL pointer to an image_int should\n                       be used. The resulting image has the size of the image\n                       used for the processing, that is, the size of the input\n                       image scaled by the given factor 'scale'.\n                       Suggested value: NULL\n\n    @return            A 5-tuple list, where each 5-tuple corresponds to a\n                       detected line segment. The five values are:\n                       - x1,y1,x2,y2,width\n                       .\n                       for a line segment from (x1,y1) to (x2,y2) and\n                       a width 'width'.\n */\nntuple_list LineSegmentDetection( image_double image, double scale,\n                                  double sigma_scale, double quant,\n                                  double ang_th, double eps, double density_th,\n                                  int n_bins, double max_grad,\n                                  image_int * region );\n\n/*----------------------------------------------------------------------------*/\n/* LSD Simple Interface with Scale                                            */\n/*----------------------------------------------------------------------------*/\n/** LSD Simple Interface with Scale\n\n    @param image Input image.\n\n    @param scale When different than 1.0, LSD will scale the image by\n                 Gaussian filtering.\n                 Example: is scale=0.8, the input image will be subsampled\n                 to 80% of its size, and then the line segment detector\n                 will be applied.\n                 Suggested value: 0.8\n\n    @return a 5-tuple list of detected line segments.\n */\nntuple_list lsd_scale(image_double image, double scale);\n\n/*----------------------------------------------------------------------------*/\n/* LSD Simple Interface                                                       */\n/*----------------------------------------------------------------------------*/\n/** LSD Simple Interface\n\n    @param image Input image.\n\n    @return a 5-tuple list of detected line segments.\n */\nntuple_list lsd(image_double image);\n\n#endif /* !LSD_HEADER */\n/*----------------------------------------------------------------------------*/\n"
  },
  {
    "path": "thirdparty/LSD/lsd_call_example.c",
    "content": "#include <stdio.h>\n#include \"lsd.h\"\n\nint main(void)\n{\n  image_double image;\n  ntuple_list out;\n  unsigned int x,y,i,j;\n  unsigned int X = 128;  /* x image size */\n  unsigned int Y = 128;  /* y image size */\n\n  /* create a simple image: left half black, right half gray */\n  image = new_image_double(X,Y);\n  for(x=0;x<X;x++)\n    for(y=0;y<Y;y++)\n      image->data[ x + y * image->xsize ] = x<X/2 ? 0.0 : 64.0; /* image(x,y) */\n\n  /* call LSD */\n  out = lsd(image);\n\n  /* print output */\n  printf(\"%u line segments found:\\n\",out->size);\n  for(i=0;i<out->size;i++)\n    {\n      for(j=0;j<out->dim;j++)\n        printf(\"%f \",out->values[ i * out->dim + j ]);\n      printf(\"\\n\");\n    }\n\n  /* free memory */\n  free_image_double(image);\n  free_ntuple_list(out);\n\n  return 0;\n}\n"
  },
  {
    "path": "thirdparty/LSD/lsd_cmd.c",
    "content": "/*----------------------------------------------------------------------------\n\n  LSD - Line Segment Detector on digital images\n\n  Copyright 2007-2010 rafael grompone von gioi (grompone@gmail.com)\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as\n  published by the Free Software Foundation, either version 3 of the\n  License, or (at your option) any later version.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program. If not, see <http://www.gnu.org/licenses/>.\n\n  ----------------------------------------------------------------------------*/\n\n/*----------------------------------------------------------------------------*/\n/** @file lsd_cmd.c\n    Command line interface for LSD module (Line Segment Detector).\n    @author rafael grompone von gioi (grompone@gmail.com)\n */\n/*----------------------------------------------------------------------------*/\n\n/*----------------------------------------------------------------------------*/\n/** Definition of the command line interface.                                 */\n#define USE \"                                                                  \\\n#name: lsd                                                                     \\\n#author: rafael grompone von gioi                                              \\\n#version: 1.5 of December 3, 2010                                              \\\n#year: 2007-2010                                                               \\\n#desc: Line Segment Detector                                                   \\\n#opt: scale | s | double | 0.8 | 0.0 | |                                       \\\n      Scale image by Gaussian filter before processing.                        \\\n#opt: sigma_coef | c | double | 0.6 | 0.0 | |                                  \\\n      Sigma for Gaussian filter is computed as sigma_coef/scale.               \\\n#opt: quant | q | double | 2.0 | 0.0 | |                                       \\\n      Bound to quantization error on the gradient norm.                        \\\n#opt: ang_th | a | double | 22.5 | 0.0 | 180.0 |                               \\\n      Gradient angle tolerance in degrees.                                     \\\n#opt: eps | e | double | 0.0 | | | Detection threshold, -log10(max. NFA)       \\\n#opt: density_th | d | double | 0.7 | 0.0 | 1.0 |                              \\\n      Minimal density of region points in a rectangle to be accepted.          \\\n#opt: n_bins | b | int | 1024 | 1 | |                                          \\\n      Number of bins in 'ordering' of gradient modulus.                        \\\n#opt: max_grad | m | double | 255.0 | 1 | |                                    \\\n      Gradient modulus in the highest bin.                                     \\\n#opt: reg | R | str | | | |                                                    \\\n      Output image showing pixels used by each detection. Scaled size.         \\\n#opt: epsfile | P | str | | | | Output line segments into EPS file 'epsfile'.  \\\n#opt: svgfile | S | str | | | | Output line segments into SVG file 'svgfile'.  \\\n#opt: width | W | double | 1.5 | | |                                           \\\n      LS width used in EPS and SVG files. If <=0, use detected values.         \\\n#req: in  | | str | | | | Input image (PGM)                                    \\\n#req: out | | str | | | | Line Segment output (ascii file: x1,y1,x2,y2,width)  \\\n\"\n/*----------------------------------------------------------------------------*/\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <math.h>\n#include <string.h>\n#include <ctype.h>\n#include \"lsd.h\"\n\n#ifndef FALSE\n#define FALSE 0\n#endif /* !FALSE */\n\n#ifndef TRUE\n#define TRUE 1\n#endif /* !TRUE */\n\n/*----------------------------------------------------------------------------*/\n/** Fatal error, print a message to standard-error output and exit.\n */\nstatic void error(char * msg)\n{\n  fprintf(stderr,\"%s\\n\",msg);\n  exit(EXIT_FAILURE);\n}\n\n\n/*----------------------------------------------------------------------------*/\n/*--------------------- Command Line interface handling ----------------------*/\n/*----------------------------------------------------------------------------*/\n\n/*----------------------------------------------------------------------------*/\n#define FIELD_LENGTH 160\n#define VERSION_OPTION \"--version\"\n\n/*----------------------------------------------------------------------------*/\n/** Structure to store one argument definition and read value.\n */\nstruct argument\n{\n  char name[FIELD_LENGTH];     /* name to internally identify the argument */\n  char desc[FIELD_LENGTH];     /* description */\n  char id;                     /* letter used with '-' to use the option */\n  char type;                   /* i=int, d=double, s=str, b=bool */\n  int required;\n  int assigned;\n  int def_value;               /* true or false, a default value is assigned? */\n  char d_value[FIELD_LENGTH];  /* default value */\n  char s_value[FIELD_LENGTH];  /* string found, also the value if 'str' */\n  int  i_value;\n  double f_value;\n  int    min_set;              /* true or false, is minimal value set? */\n  double min;\n  int    max_set;              /* true or false, is maximal value set? */\n  double max;\n};\n\n/*----------------------------------------------------------------------------*/\n/** Structure to store the full set of argument definitions and its values.\n */\nstruct arguments\n{\n  char name[FIELD_LENGTH];\n  char author[FIELD_LENGTH];\n  char version[FIELD_LENGTH];\n  char desc[FIELD_LENGTH];\n  char compiled[FIELD_LENGTH];\n  char year[FIELD_LENGTH];\n  int  arg_num;\n  int  arg_allocated;\n  struct argument * args;\n};\n\n/*----------------------------------------------------------------------------*/\n/** Free an 'arguments' structure.\n */\nstatic void free_arguments(struct arguments * arg)\n{\n  free( (void *) arg->args );\n  free( (void *) arg );\n}\n\n/*----------------------------------------------------------------------------*/\n/** Accepted characters in field identifier: numbers, letters and '_'.\n */\nstatic int is_id_char(int c)\n{\n  return c=='_' || isalpha(c) || isdigit(c);\n}\n\n/*----------------------------------------------------------------------------*/\n/** Read next field definition in an argument definition.\n */\nstatic char * get_next_field(char * p, char * id, char * value)\n{\n  int n;\n\n  /* search for field id */\n  while( isspace(*p) ) ++p; /* skip spaces */\n  if( *p != '#' ) error(\"Error: missing '#' in 'use description'.\");\n  ++p;\n  for( n=0; is_id_char(*p) && n<FIELD_LENGTH; n++ ) id[n] = *(p++);\n  if( n >= FIELD_LENGTH ) error(\"Error: field too long in 'use description'.\");\n  id[n] = '\\0';\n  if( *(p++) != ':' ) error(\"Error: missing ':' in 'use description'.\");\n\n  /* search for field value */\n  while( isspace(*p) ) ++p; /* skip spaces */\n  for( n=0; *p != '#' && *p != '\\0' && n<FIELD_LENGTH; n++ ) value[n] = *(p++);\n  if( n >= FIELD_LENGTH ) error(\"Error: field too long in 'use description'.\");\n  value[n] = '\\0';\n\n  /* remove spaces at the end of the field */\n  while( --n >= 0 && isspace(value[n]) ) value[n] = '\\0';\n\n  return p;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Read next token in an argument definition.\n */\nstatic char * get_next_token(char * p, char div, char * value)\n{\n  int n;\n\n  if( *p == '\\0' )\n    error(\"Error: argument token expected in 'use description'.\");\n\n  while( isspace(*p) ) ++p; /* skip spaces */\n  for( n=0; *p!=div && *p!='\\0' && n<FIELD_LENGTH; n++) value[n] = *(p++);\n  if( n >= FIELD_LENGTH ) error(\"Error: field too long in 'use description'.\");\n  value[n] = '\\0';\n  while( --n >= 0 && isspace(value[n]) ) value[n] = '\\0';\n\n  /* remove 'div' at the end of the token, if present */\n  if( *p == div ) ++p;\n\n  return p;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Process one argument description.\n */\nstatic void process_new_argument(char * id, char * value,struct arguments * arg)\n{\n  char token[FIELD_LENGTH];\n  char * p;\n  int i;\n\n  /* allocate memory if needed */\n  if( arg->arg_num >= arg->arg_allocated )\n    {\n      arg->arg_allocated *= 2;\n      arg->args = (struct argument *) realloc( (void *) arg->args,\n                                 arg->arg_allocated * sizeof(struct argument) );\n      if( arg->args == NULL ) error(\"Error: not enough memory.\");\n    }\n\n  /* argument name */\n  p = get_next_token(value,'|',arg->args[arg->arg_num].name);\n  for( i=0; i<arg->arg_num; i++ )\n    if( strcmp(arg->args[i].name,arg->args[arg->arg_num].name) == 0 )\n      error(\"Error: argument name used twice in 'use description'.\");\n\n  /* 'option' letter - to be used with '-' to identify option */\n  p = get_next_token(p,'|',token);\n  if( strcmp(id,\"opt\") == 0 )\n    {\n      arg->args[arg->arg_num].required = FALSE;\n      if( strlen(token) <= 0 || strlen(token) > 1 )\n        error(\"Error: invalid option letter in 'use description'.\");\n      arg->args[arg->arg_num].id = token[0];\n      if( !isalpha(arg->args[arg->arg_num].id) )\n        error(\"Error: option id must be a letter in 'use description'.\");\n      for( i=0; i<arg->arg_num; i++ )\n        if( !(arg->args[i].required) &&\n            arg->args[i].id == arg->args[arg->arg_num].id )\n          error(\"Error: option letter used twice in 'use description'.\");\n    }\n  else /* must be 'req' - required argument */\n    {\n      arg->args[arg->arg_num].required = TRUE;\n      if( strlen(token) > 0 )\n        error(\"Error: unused option letter in 'use description'.\");\n      arg->args[arg->arg_num].id = 0;\n    }\n\n  /* argument type */\n  p = get_next_token(p,'|',token);\n  if( strcmp(token,\"int\") == 0 )         arg->args[arg->arg_num].type = 'i';\n  else if( strcmp(token,\"double\") == 0 ) arg->args[arg->arg_num].type = 'd';\n  else if( strcmp(token,\"str\") == 0 )    arg->args[arg->arg_num].type = 's';\n  else if( strcmp(token,\"bool\") == 0 )   arg->args[arg->arg_num].type = 'b';\n  else error(\"Error: unknown argument type in 'use description'.\");\n\n  /* required arguments can't be boolean */\n  if( arg->args[arg->arg_num].required && arg->args[arg->arg_num].type == 'b' )\n    error(\"Error: required arguments can't be boolean in 'use description'.\");\n\n  /* default value */\n  p = get_next_token(p,'|',token);\n  if( strlen(token) > 0 )\n    {\n      if( arg->args[arg->arg_num].required )\n       error(\"Error: default value in required argument in 'use description'.\");\n      arg->args[arg->arg_num].def_value = TRUE;\n      arg->args[arg->arg_num].assigned = TRUE;\n      strcpy(arg->args[arg->arg_num].d_value,token);\n      strcpy(arg->args[arg->arg_num].s_value,token);\n      if( arg->args[arg->arg_num].type == 'i' )\n        arg->args[arg->arg_num].i_value = atoi(token);\n      if( arg->args[arg->arg_num].type == 'd' )\n        arg->args[arg->arg_num].f_value = atof(token);\n    }\n  else\n    {\n      arg->args[arg->arg_num].def_value = FALSE;\n      arg->args[arg->arg_num].s_value[0] = '\\0';\n      arg->args[arg->arg_num].assigned = FALSE;\n    }\n\n  /* required arguments can't have default value */\n  if( arg->args[arg->arg_num].required && arg->args[arg->arg_num].def_value )\n   error(\"Error: required args can't have default value in 'use description'.\");\n\n  /* min value */\n  p = get_next_token(p,'|',token);\n  if( strlen(token) > 0 )\n    {\n      arg->args[arg->arg_num].min_set = TRUE;\n      arg->args[arg->arg_num].min = atof(token);\n    }\n  else\n    {\n      arg->args[arg->arg_num].min_set = FALSE;\n    }\n\n  /* max value */\n  p = get_next_token(p,'|',token);\n  if( strlen(token) > 0 )\n    {\n      arg->args[arg->arg_num].max_set = TRUE;\n      arg->args[arg->arg_num].max = atof(token);\n    }\n  else\n    {\n      arg->args[arg->arg_num].max_set = FALSE;\n    }\n\n  /* argument description */\n  p = get_next_token(p,'|',arg->args[arg->arg_num].desc);\n\n  /* the field should end there */\n  if( *p != '\\0' )\n    error(\"Error: too many tokens in one argument in 'use description'.\");\n\n  arg->arg_num++;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Process an argument definition.\n */\nstatic void process_argument_description( char * desc, struct arguments * arg )\n{\n  char id[FIELD_LENGTH];\n  char value[FIELD_LENGTH];\n\n  /* initialize 'arg' */\n  arg->name[0] = '\\0';\n  arg->author[0] = '\\0';\n  arg->version[0] = '\\0';\n  arg->year[0] = '\\0';\n  arg->desc[0] = '\\0';\n  arg->compiled[0] = '\\0';\n  arg->arg_num = 0;\n  arg->arg_allocated = 2;\n  arg->args = (struct argument *)\n                      malloc( arg->arg_allocated * sizeof(struct argument) );\n  if( arg->args == NULL ) error(\"Error: not enough memory.\");\n\n  /* assign compilation date and time */\n  strcat(arg->compiled,__DATE__);\n  strcat(arg->compiled,\" \");\n  strcat(arg->compiled,__TIME__);\n\n  /* process description */\n  while( *desc != '\\0' )\n    {\n      desc = get_next_field(desc,id,value);\n\n      if( strcmp(id,\"name\") == 0 )\n        {\n          if( arg->name[0] != '\\0' )\n            error(\"Error: multiple 'name' fields in 'use description'.\");\n          strcpy(arg->name,value);\n        }\n      else if( strcmp(id,\"author\") == 0 )\n        {\n          if( arg->author[0] != '\\0' )\n            error(\"Error: multiple 'author' fields in 'use description'.\");\n          strcpy(arg->author,value);\n        }\n      else if( strcmp(id,\"version\") == 0 )\n        {\n          if( arg->version[0] != '\\0' )\n            error(\"Error: multiple 'version' fields in 'use description'.\");\n          strcpy(arg->version,value);\n        }\n      else if( strcmp(id,\"year\") == 0 )\n        {\n          if( arg->year[0] != '\\0' )\n            error(\"Error: multiple 'year' fields in 'use description'.\");\n          strcpy(arg->year,value);\n        }\n      else if( strcmp(id,\"desc\") == 0 )\n        {\n          if( arg->desc[0] != '\\0' )\n            error(\"Error: multiple 'desc' fields in 'use description'.\");\n          strcpy(arg->desc,value);\n        }\n      else if( strcmp(id,\"opt\") == 0 || strcmp(id,\"req\") == 0 )\n        {\n          process_new_argument(id,value,arg);\n        }\n      else\n        {\n          error(\"Error: unknown token in 'use description'.\");\n        }\n    }\n\n  /* verify required arguments */\n  if( arg->name[0] == '\\0' )\n    error(\"Error: program name is required in 'use description'.\");\n  if( arg->author[0] == '\\0' )\n    error(\"Error: author name is required in 'use description'.\");\n  if( arg->version[0] == '\\0' )\n    error(\"Error: version is required in 'use description'.\");\n  if( arg->desc[0] == '\\0' )\n    error(\"Error: program description is required in 'use description'.\");\n  if( arg->year[0] == '\\0' )\n    error(\"Error: year is required in 'use description'.\");\n}\n\n/*----------------------------------------------------------------------------*/\n/** Print version.\n */\nstatic void print_version(struct arguments * arg, FILE * f)\n{\n  fprintf(f,\"Version %s, compiled %s\\n\",arg->version,arg->compiled);\n}\n\n/*----------------------------------------------------------------------------*/\n/** Evaluate arguments.\n */\nstatic void evaluate_arguments(int argc, char ** argv, struct arguments * arg)\n{\n  int in_required_args = FALSE;\n  int n,i;\n\n  if( argc <= 0 ) error(\"Error: unexpected command line: missing command.\");\n\n  for( n=1; !in_required_args && n < argc; n++ )\n    {\n      /* when an argument do not start with \"-\" it is not optional.\n         but, if the argument is just \"-\", then is a non optional\n         argument with value \"-\", and will be analyzed later.  */\n      if( argv[n][0] != '-' || (argv[n][0]=='-' && strlen(argv[n])== 1) )\n        {\n          in_required_args = TRUE;\n          --n;\n          continue;\n        }\n\n      if( strlen(argv[n]) != 2 )\n        {\n          /* check if it is the special option 'version' */\n          if( strcmp(argv[n],VERSION_OPTION) == 0 )\n            {\n              print_version(arg,stdout);\n              free_arguments(arg);\n              exit(EXIT_SUCCESS);\n            }\n\n          /* otherwise is a bad option */\n          fprintf(stderr,\"Error: %s \",argv[n]);\n          error(\"unrecognized option.\");\n        }\n\n      for( i=0; i<arg->arg_num; i++ )\n        if( !(arg->args[i].required) && arg->args[i].id == argv[n][1] )\n          {\n            arg->args[i].assigned = TRUE;\n            if( arg->args[i].type != 'b' )\n              {\n                /* go for the value */\n                ++n;\n\n                /* a value is expected */\n                if( n >= argc )\n                  {\n                    fprintf(stderr,\"Error: in '%s': \",argv[n-1]);\n                    error(\"a value was expected.\");\n                  }\n                if( strlen(argv[n]) > FIELD_LENGTH )\n                  {\n                    fprintf(stderr,\"Error: in '%s': \",argv[n-1]);\n                    error(\"value too long.\");\n                  }\n                strcpy(arg->args[i].s_value,argv[n]);\n                if( arg->args[i].type == 'i' )\n                  {\n                    arg->args[i].i_value = atoi(argv[n]);\n                    if( arg->args[i].min_set &&\n                        arg->args[i].i_value < (int) arg->args[i].min )\n                      {\n                        fprintf(stderr,\"Error: in '%s': \",argv[n-1]);\n                        error(\"value out of range.\");\n                      }\n                    if( arg->args[i].max_set &&\n                        arg->args[i].i_value > (int) arg->args[i].max )\n                      {\n                        fprintf(stderr,\"Error: in '%s': \",argv[n-1]);\n                        error(\"value out of range.\");\n                      }\n                  }\n                if( arg->args[i].type == 'd' )\n                  {\n                    arg->args[i].f_value = atof(argv[n]);\n                    if( arg->args[i].min_set &&\n                        arg->args[i].f_value < arg->args[i].min )\n                      {\n                        fprintf(stderr,\"Error: in '%s': \",argv[n-1]);\n                        error(\"value out of range.\");\n                      }\n                    if( arg->args[i].max_set &&\n                        arg->args[i].f_value > arg->args[i].max )\n                      {\n                        fprintf(stderr,\"Error: in '%s': \",argv[n-1]);\n                        error(\"value out of range.\");\n                      }\n                  }\n              }\n            i = arg->arg_num; /* argument found, stop search */\n          }\n    }\n\n  for( i=0; n<argc && i<arg->arg_num; i++ )\n    if( arg->args[i].required )\n      {\n        arg->args[i].assigned = TRUE;\n        strcpy(arg->args[i].s_value,argv[n]);\n        if( arg->args[i].type == 'i' )\n          {\n            arg->args[i].i_value = atoi(argv[n]);\n            if( arg->args[i].min_set &&\n                arg->args[i].i_value < (int) arg->args[i].min )\n              {\n                fprintf(stderr,\"Error: in '%s': \",arg->args[i].name);\n                error(\"value out of range.\");\n              }\n            if( arg->args[i].max_set &&\n                arg->args[i].i_value > (int) arg->args[i].max )\n              {\n                fprintf(stderr,\"Error: in '%s': \",arg->args[i].name);\n                error(\"value out of range.\");\n              }\n          }\n        if( arg->args[i].type == 'd' )\n          {\n            arg->args[i].f_value = atof(argv[n]);\n            if( arg->args[i].min_set &&\n                arg->args[i].f_value < arg->args[i].min )\n              {\n                fprintf(stderr,\"Error: in '%s': \",arg->args[i].name);\n                error(\"value out of range.\");\n              }\n            if( arg->args[i].max_set &&\n                arg->args[i].f_value > arg->args[i].max )\n              {\n                fprintf(stderr,\"Error: in '%s': \",arg->args[i].name);\n                error(\"value out of range.\");\n              }\n          }\n        ++n;\n      }\n}\n\n/*----------------------------------------------------------------------------*/\n/** Print command line interface help.\n */\nstatic void use(struct arguments * arg)\n{\n  int i;\n\n  fprintf(stderr,\"%s, %s\\n\",arg->name,arg->desc);\n  fprintf(stderr,\"Copyright (c) %s %s\\n\",arg->year,arg->author);\n  print_version(arg,stderr);\n  fprintf(stderr,\"\\nUsage: %s\",arg->name);\n\n  /* always present version option */\n  fprintf(stderr,\" [%s]\",VERSION_OPTION);\n\n  for(i=0;i<arg->arg_num;i++)\n    if( !(arg->args[i].required) )\n      {\n        fprintf(stderr,\" [-%c\",arg->args[i].id);\n        if( arg->args[i].type != 'b' ) fprintf(stderr,\" %s\",arg->args[i].name);\n        fprintf(stderr,\"]\");\n      }\n\n  for(i=0;i<arg->arg_num;i++)\n    if( arg->args[i].required )\n      fprintf(stderr,\" %s\",arg->args[i].name);\n\n  fprintf(stderr,\"\\n\\n\");\n\n  /* option description */\n  fprintf(stderr,\"  %s\\tPrint version and compilation date/time and exit.\\n\",\n          VERSION_OPTION);\n  for(i=0;i<arg->arg_num;i++)\n    if( !(arg->args[i].required) )\n      {\n        fprintf(stderr,\"  -%c\",arg->args[i].id);\n        if( arg->args[i].type != 'b' )\n          {\n            fprintf(stderr,\" %s\",arg->args[i].name);\n          }\n        fprintf(stderr,\"\\t%s\\n\",arg->args[i].desc);\n        if( arg->args[i].type == 'i' )\n          {\n            fprintf(stderr,\"\\t\\t'%s' is integer\",arg->args[i].name);\n            fprintf(stderr,\", range [\");\n            if( arg->args[i].min_set )\n              fprintf(stderr,\"%d,\",(int)arg->args[i].min);\n            else fprintf(stderr,\"-inf,\");\n            if( arg->args[i].max_set )\n              fprintf(stderr,\"%d]\",(int)arg->args[i].max);\n            else fprintf(stderr,\"inf]\");\n            if( arg->args[i].def_value )\n              fprintf(stderr,\", default value %d\",atoi(arg->args[i].d_value));\n            fprintf(stderr,\"\\n\");\n          }\n        if( arg->args[i].type == 'd' )\n          {\n            fprintf(stderr,\"\\t\\t'%s' is double\",arg->args[i].name);\n            fprintf(stderr,\", range [\");\n            if( arg->args[i].min_set ) fprintf(stderr,\"%g,\",arg->args[i].min);\n            else fprintf(stderr,\"-inf,\");\n            if( arg->args[i].max_set ) fprintf(stderr,\"%g]\",arg->args[i].max);\n            else fprintf(stderr,\"inf]\");\n            if( arg->args[i].def_value )\n              fprintf(stderr,\", default value %g\",atof(arg->args[i].d_value));\n            fprintf(stderr,\"\\n\");\n          }\n      }\n\n  for(i=0;i<arg->arg_num;i++)\n    if( arg->args[i].required )\n      {\n        fprintf(stderr,\"  %s\",arg->args[i].name);\n        fprintf(stderr,\"\\t%s\\n\",arg->args[i].desc);\n        if( arg->args[i].type == 'i' )\n          {\n            fprintf(stderr,\"\\t\\t'%s' is integer\",arg->args[i].name);\n            fprintf(stderr,\", range [\");\n            if( arg->args[i].min_set )\n              fprintf(stderr,\"%d,\",(int)arg->args[i].min);\n            else fprintf(stderr,\"-inf,\");\n            if( arg->args[i].max_set )\n              fprintf(stderr,\"%d]\",(int)arg->args[i].max);\n            else fprintf(stderr,\"inf]\");\n            fprintf(stderr,\"\\n\");\n          }\n        if( arg->args[i].type == 'd' )\n          {\n            fprintf(stderr,\"\\t\\t'%s' is double\",arg->args[i].name);\n            fprintf(stderr,\", range [\");\n            if( arg->args[i].min_set ) fprintf(stderr,\"%f,\",arg->args[i].min);\n            else fprintf(stderr,\"-inf,\");\n            if( arg->args[i].max_set ) fprintf(stderr,\"%f]\",arg->args[i].max);\n            else fprintf(stderr,\"inf]\");\n            fprintf(stderr,\"\\n\");\n          }\n      }\n\n  fprintf(stderr,\"\\n\");\n\n  free_arguments(arg);\n\n  exit(EXIT_FAILURE);\n}\n\n/*----------------------------------------------------------------------------*/\n/** Process and evaluate a program arguments.\n */\nstatic struct arguments * process_arguments(char * desc, int argc, char ** argv)\n{\n  struct arguments * arg;\n  int i;\n\n  /* get memory */\n  arg = (struct arguments *) malloc(sizeof(struct arguments));\n  if( arg == NULL ) error(\"Error: not enough memory.\");\n\n  process_argument_description(desc,arg);\n  evaluate_arguments(argc,argv,arg);\n\n  /* if there are missing arguments print the 'use' information */\n  for(i=0; i<arg->arg_num; i++)\n    if( arg->args[i].required && !(arg->args[i].assigned) ) use(arg);\n\n  return arg;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Test if an argument has a defined value.\n */\nstatic int is_assigned(struct arguments * arg, char * name)\n{\n  int i;\n\n  for(i=0; i<arg->arg_num; i++)\n    if( strcmp(name,arg->args[i].name) == 0 ) return arg->args[i].assigned;\n  error(\"Error: is_assigned: unknown argument.\");\n  return -1; /* useless, just to prevent warning in strict compilers */\n}\n\n/*----------------------------------------------------------------------------*/\n/** Get the value of a string argument.\n */\nstatic char * get_str(struct arguments * arg, char * name)\n{\n  int i;\n\n  for(i=0; i<arg->arg_num; i++)\n    if( strcmp(name,arg->args[i].name) == 0 )\n      {\n        if( arg->args[i].type == 's' )\n          {\n            if( !(arg->args[i].assigned) ) return NULL;\n            return arg->args[i].s_value;\n          }\n        else error(\"Error: get_str: the parameter is not a double.\");\n      }\n  error(\"Error: get_str: unknown argument.\");\n  return NULL; /* useless, just to prevent warning in strict compilers */\n}\n\n/*----------------------------------------------------------------------------*/\n/** Get the value of an integer argument.\n */\nstatic int get_int(struct arguments * arg, char * name)\n{\n  int i;\n\n  for(i=0; i<arg->arg_num; i++)\n    if( strcmp(name,arg->args[i].name) == 0 )\n      {\n        if( !(arg->args[i].assigned) )\n          error(\"Error: get_int: parameter not assigned.\");\n        if( arg->args[i].type == 'i' ) return arg->args[i].i_value;\n        else error(\"Error: get_int: the parameter is not an integer.\");\n      }\n  error(\"Error: get_int: unknown argument.\");\n  return -1; /* useless, just to prevent warning in strict compilers */\n}\n\n/*----------------------------------------------------------------------------*/\n/** Get the value of a double argument.\n */\nstatic double get_double(struct arguments * arg, char * name)\n{\n  int i;\n\n  for(i=0; i<arg->arg_num; i++)\n    if( strcmp(name,arg->args[i].name) == 0 )\n      {\n        if( !(arg->args[i].assigned) )\n          error(\"Error: get_double: parameter not assigned.\");\n        if( arg->args[i].type == 'd' ) return arg->args[i].f_value;\n        else error(\"Error: get_double: the parameter is not a double.\");\n      }\n  error(\"Error: get_double: unknown argument.\");\n  return -1.0; /* useless, just to prevent warning in strict compilers */\n}\n\n\n/*----------------------------------------------------------------------------*/\n/*------------------------------ PGM image I/O -------------------------------*/\n/*----------------------------------------------------------------------------*/\n\n/*----------------------------------------------------------------------------*/\n/** Skip white characters and comments in a PGM file.\n */\nstatic void skip_whites_and_comments(FILE * f)\n{\n  int c;\n  do\n    {\n      while(isspace(c=getc(f))); /* skip spaces */\n      if(c=='#') /* skip comments */\n        while( c!='\\n' && c!='\\r' && c!=EOF )\n          c=getc(f);\n    }\n  while( c == '#' || isspace(c) );\n  if( c != EOF && ungetc(c,f) == EOF )\n    error(\"Error: unable to 'ungetc' while reading PGM file.\");\n}\n\n/*----------------------------------------------------------------------------*/\n/** Read a ASCII number from a PGM file.\n */\nstatic unsigned int get_num(FILE * f)\n{\n  unsigned int num;\n  int c;\n\n  while(isspace(c=getc(f)));\n  if(!isdigit(c)) error(\"Error: corrupted PGM file.\");\n  num = (unsigned int) (c - '0');\n  while( isdigit(c=getc(f)) ) num = 10 * num + c - '0';\n  if( c != EOF && ungetc(c,f) == EOF )\n    error(\"Error: unable to 'ungetc' while reading PGM file.\");\n\n  return num;\n}\n\n\n/*----------------------------------------------------------------------------*/\n/** Read a PGM file into an \"image_double\".\n    If the name is \"-\" the file is read from standard input.\n */\nstatic image_double read_pgm_image_double(char * name)\n{\n  FILE * f;\n  int c,bin;\n  unsigned int xsize,ysize,depth,x,y;\n  image_double image;\n\n  /* open file */\n  if( strcmp(name,\"-\") == 0 ) f = stdin;\n  else f = fopen(name,\"rb\");\n  if( f == NULL ) error(\"Error: unable to open input image file.\");\n\n  /* read header */\n  if( getc(f) != 'P' ) error(\"Error: not a PGM file!\");\n  if( (c=getc(f)) == '2' ) bin = FALSE;\n  else if( c == '5' ) bin = TRUE;\n  else error(\"Error: not a PGM file!\");\n  skip_whites_and_comments(f);\n  xsize = get_num(f);            /* X size */\n  skip_whites_and_comments(f);\n  ysize = get_num(f);            /* Y size */\n  skip_whites_and_comments(f);\n  depth = get_num(f);            /* depth */\n  if(depth==0) fprintf(stderr,\"Warning: depth=0, probably invalid PGM file\\n\");\n  /* white before data */\n  if(!isspace(c=getc(f))) error(\"Error: corrupted PGM file.\");\n\n  /* get memory */\n  image = new_image_double(xsize,ysize);\n\n  /* read data */\n  for(y=0;y<ysize;y++)\n    for(x=0;x<xsize;x++)\n      image->data[ x + y * xsize ] = bin ? (double) getc(f)\n                                         : (double) get_num(f);\n\n  /* close file if needed */\n  if( f != stdin && fclose(f) == EOF )\n    error(\"Error: unable to close file while reading PGM file.\");\n\n  return image;\n}\n\n/*----------------------------------------------------------------------------*/\n/** Write an \"image_int\" into a PGM file.\n    If the name is \"-\" the file is written to standard output.\n */\nstatic void write_pgm_image_int(image_int image, char * name)\n{\n  FILE * f;\n  unsigned int x,y,n;\n  int v,max,min;\n\n  /* check min and max values */\n  max = min = 0;\n  for(y=0; y<image->ysize; y++)\n    for(x=0; x<image->xsize; x++)\n      {\n        v = image->data[ x + y * image->xsize ];\n        if( v > max ) max = v;\n        if( v < min ) min = v;\n      }\n  if( min < 0 ) fprintf(stderr,\n        \"Warning: write_pgm_image_int: negative values in '%s'.\\n\",name);\n  if( max > 65535 ) fprintf(stderr,\n        \"Warning: write_pgm_image_int: values exceeding 65535 in '%s'.\\n\",name);\n\n  /* open file */\n  if( strcmp(name,\"-\") == 0 ) f = stdout;\n  else f = fopen(name,\"w\");\n  if( f == NULL ) error(\"Error: unable to open output image file.\");\n\n  /* write header */\n  fprintf(f,\"P2\\n\");\n  fprintf(f,\"%u %u\\n\",image->xsize,image->ysize);\n  fprintf(f,\"%d\\n\",max);\n\n  /* write data */\n  for(n=0,y=0; y<image->ysize; y++)\n    for(x=0; x<image->xsize; x++)\n      {\n        fprintf(f,\"%d \",image->data[ x + y * image->xsize ]);\n        if(++n==8)  /* lines should not be longer than 70 characters  */\n          {\n            fprintf(f,\"\\n\");\n            n = 0;\n          }\n      }\n\n  /* close file if needed */\n  if( f != stdout && fclose(f) == EOF )\n    error(\"Error: unable to close file while writing PGM file.\");\n}\n\n\n/*----------------------------------------------------------------------------*/\n/*----------------------------- Write EPS File -------------------------------*/\n/*----------------------------------------------------------------------------*/\n/** Write line segments into an EPS file.\n    If the name is \"-\" the file is written to standard output.\n\n    According to\n\n      Adobe \"Encapsulated PostScript File Format Specification\",\n      Version 3.0, 1 May 1992,\n\n    and\n\n      Adobe \"PostScript(R) LANGUAGE REFERENCE\", third edition, 1999.\n */\nstatic void write_eps( ntuple_list segs, char * filename,\n                       unsigned int xsize, unsigned int ysize, double width )\n{\n  FILE * eps;\n  unsigned int i;\n\n  /* open file */\n  if( strcmp(filename,\"-\") == 0 ) eps = stdout;\n  else eps = fopen(filename,\"w\");\n  if( eps == NULL ) error(\"Error: unable to open EPS output file.\");\n\n  /* write EPS header */\n  fprintf(eps,\"%%!PS-Adobe-3.0 EPSF-3.0\\n\");\n  fprintf(eps,\"%%%%BoundingBox: 0 0 %u %u\\n\",xsize,ysize);\n  fprintf(eps,\"%%%%Creator: LSD, Line Segment Detector\\n\");\n  fprintf(eps,\"%%%%Title: (%s)\\n\",filename);\n  fprintf(eps,\"%%%%EndComments\\n\");\n\n  /* write line segments */\n  for(i=0;i<segs->size;i++)\n    {\n      fprintf( eps,\"newpath %f %f moveto %f %f lineto %f setlinewidth stroke\\n\",\n               segs->values[i*segs->dim+0],\n               (double) ysize - segs->values[i*segs->dim+1],\n               segs->values[i*segs->dim+2],\n               (double) ysize - segs->values[i*segs->dim+3],\n               width <= 0.0 ? segs->values[i*segs->dim+4] : width );\n    }\n\n  /* close EPS file */\n  fprintf(eps,\"showpage\\n\");\n  fprintf(eps,\"%%%%EOF\\n\");\n  if( eps != stdout && fclose(eps) == EOF )\n    error(\"Error: unable to close file while writing EPS file.\");\n}\n\n\n/*----------------------------------------------------------------------------*/\n/*----------------------------- Write SVG File -------------------------------*/\n/*----------------------------------------------------------------------------*/\n/** Write line segments into a SVG file.\n    If the name is \"-\" the file is written to standard output.\n*/\nstatic void write_svg( ntuple_list segs, char * filename,\n                       unsigned int xsize, unsigned int ysize, double width )\n{\n  FILE * svg;\n  unsigned int i;\n\n  /* open file */\n  if( strcmp(filename,\"-\") == 0 ) svg = stdout;\n  else svg = fopen(filename,\"w\");\n  if( svg == NULL ) error(\"Error: unable to open SVG output file.\");\n\n  /* write SVG header */\n  fprintf(svg,\"<?xml version=\\\"1.0\\\" standalone=\\\"no\\\"?>\\n\");\n  fprintf(svg,\"<!DOCTYPE svg PUBLIC \\\"-//W3C//DTD SVG 1.1//EN\\\"\\n\");\n  fprintf(svg,\" \\\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\\\">\\n\");\n  fprintf(svg,\"<svg width=\\\"%upx\\\" height=\\\"%upx\\\" \",xsize,ysize);\n  fprintf(svg,\"version=\\\"1.1\\\"\\n xmlns=\\\"http://www.w3.org/2000/svg\\\" \");\n  fprintf(svg,\"xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n\");\n\n  /* write line segments */\n  for(i=0;i<segs->size;i++)\n    {\n      fprintf(svg,\"<line x1=\\\"%f\\\" y1=\\\"%f\\\" x2=\\\"%f\\\" y2=\\\"%f\\\" \",\n              segs->values[i*segs->dim+0],segs->values[i*segs->dim+1],\n              segs->values[i*segs->dim+2],segs->values[i*segs->dim+3]);\n      fprintf(svg,\"stroke-width=\\\"%f\\\" stroke=\\\"black\\\" />\\n\",\n              width <= 0.0 ? segs->values[i*segs->dim+4] : width);\n    }\n\n  /* close SVG file */\n  fprintf(svg,\"</svg>\\n\");\n  if( svg != stdout && fclose(svg) == EOF )\n    error(\"Error: unable to close file while writing SVG file.\");\n}\n\n\n/*----------------------------------------------------------------------------*/\n/*                                    Main                                    */\n/*----------------------------------------------------------------------------*/\n/** Main function call\n */\nint main(int argc, char ** argv)\n{\n  struct arguments * arg = process_arguments(USE,argc,argv);\n  FILE * output;\n  image_double image;\n  ntuple_list out;\n  image_int region;\n  unsigned int i,j;\n\n  /* read input file */\n  image = read_pgm_image_double(get_str(arg,\"in\"));\n\n  /* execute LSD */\n  out = LineSegmentDetection( image,\n                              get_double(arg,\"scale\"),\n                              get_double(arg,\"sigma_coef\"),\n                              get_double(arg,\"quant\"),\n                              get_double(arg,\"ang_th\"),\n                              get_double(arg,\"eps\"),\n                              get_double(arg,\"density_th\"),\n                              get_int(arg,\"n_bins\"),\n                              get_double(arg,\"max_grad\"),\n                              is_assigned(arg,\"reg\") ? &region : NULL );\n\n  /* output */\n  if( strcmp(get_str(arg,\"out\"),\"-\") == 0 ) output = stdout;\n  else output = fopen(get_str(arg,\"out\"),\"w\");\n  if( output == NULL ) error(\"Error: unable to open ASCII output file.\");\n  for(i=0;i<out->size;i++)\n    {\n      for(j=0;j<out->dim;j++)\n        fprintf(output,\"%f \",out->values[i*out->dim+j]);\n      fprintf(output,\"\\n\");\n    }\n  if( output != stdout && fclose(output) == EOF ) /* close file if needed */\n    error(\"Error: unable to close file while output file.\");\n\n  /* store region output if needed */\n  if(is_assigned(arg,\"reg\"))\n    {\n      write_pgm_image_int( region, get_str(arg,\"reg\") );\n      free_image_int(region);\n    }\n\n  /* create EPS output if needed */\n  if(is_assigned(arg,\"epsfile\"))\n    write_eps( out, get_str(arg,\"epsfile\"), image->xsize, image->ysize,\n               get_double(arg,\"width\") );\n\n  /* create SVG output if needed */\n  if(is_assigned(arg,\"svgfile\"))\n    write_svg( out, get_str(arg,\"svgfile\"), image->xsize, image->ysize,\n               get_double(arg,\"width\") );\n\n  /* free memory */\n  free_image_double(image);\n  free_ntuple_list(out);\n  free_arguments(arg);\n\n  return EXIT_SUCCESS;\n}\n/*----------------------------------------------------------------------------*/\n"
  },
  {
    "path": "thirdparty/LSWMS/CMakeLists.txt",
    "content": "##############################\nPROJECT( lineSegment )\n##############################\ncmake_minimum_required (VERSION 2.6)\n\n# Packages\nfind_package( OpenCV REQUIRED )\n\n\n# Includes\ninclude_directories(\t\n\t${OPENCV_INCLUDE_DIR}\n\t${PROJECT_BINARY_DIR}\n)\n\nset(SOURCE_FILES \n\tmain.cpp\n\tLSWMS.cpp\n\tLSWMS.h\n)\n\n\n# Add executable and target link libraries\nADD_EXECUTABLE( lineSegment ${SOURCE_FILES})\nTARGET_LINK_LIBRARIES( lineSegment ${OpenCV_LIBS})\n\n\n"
  },
  {
    "path": "thirdparty/LSWMS/LSWMS.cpp",
    "content": "#include \"LSWMS.h\"\n\n#ifdef linux\n\t#include <stdio.h>\n#endif\n\n#include <iostream>\n#include <stdlib.h>\n\n#define ABS(a)\t   (((a) < 0) ? -(a) : (a))\n#define NOT_A_VALID_ANGLE 5\n#define ANGLE_MARGIN\t22.5\n#define MAX_ERROR\t0.19625 // ((22.5/2)*CV_PI/180\n\nusing namespace cv;\nusing namespace std;\n\nstatic void setTo14Quads(DIR_POINT &dp)\n{\n\tif(dp.vx < 0)\n\t{\t\n\t\tdp.vx = -dp.vx;\n\t\tdp.vy = -dp.vy;\n\t}\n}\n\nLSWMS::LSWMS(const cv::Size imSize, const int R, const int numMaxLSegs, bool verbose)\n{\n\t// **********************************************\n\t// Constructor of class LSWMS (Slice Sampling Weighted\n\t// Mean-Shift)\n\t// Args:\n\t// \t-> imSize - Size of image\n\t//\t-> R - accuracy parameter\n\t// \t-> numMaxLSegs - requested number of line segments.\n\t//\t\t\tif set to 0, the algorithm finds exploring\n\t//\t\t\tthe whole image until no more line segments\n\t// \t\t\tcan be found\n\t//\t-> verbose - show messages\n\t// **********************************************\n\n\t__verbose = verbose;\n\n\t// Init variables\n\t__imSize = imSize;\n\t__imWidth = imSize.width;\n\t__imHeight = imSize.height;\n\t\n\t__R = R;\n\t__numMaxLSegs = numMaxLSegs;\n\n\t__N = 2*__R + 1;\n\n\t// Add padding it necessary\n\tif( (__imSize.width + 2*__N) % 4 != 0)\t\n\t\t__N = __N + ((__imSize.width + 2*__N) % 4)/2;\t\t\n\t\n\t__imPadSize.width = __imSize.width + 2*__N;\n\t__imPadSize.height = __imSize.height + 2*__N;\t\n\n\t// Init images\n\t__img = cv::Mat(__imSize, CV_8U);\n\t__imgPad = cv::Mat(__imPadSize, CV_8U);\n\t__roiRect = cv::Rect(__N, __N, __imSize.width, __imSize.height);\n\n\t// Mask image\n\t__M = cv::Mat(__imPadSize, CV_8U);\n\t__M.setTo(255);\n\n\t// Angle mask\n\t__A = cv::Mat(__imPadSize, CV_32F);\n\t__A.setTo(NOT_A_VALID_ANGLE);\n\t\n\t// Gradient images\n\t__G = cv::Mat(__imPadSize, CV_8U);\n\t__G.setTo(0);\n\t__Gx = cv::Mat(__imPadSize, CV_16S);\n\t__Gx.setTo(0);\n\t__Gy = cv::Mat(__imPadSize, CV_16S);\n\t__Gy.setTo(0);\n\n\t// Iterator\n\tif(__numMaxLSegs != 0)\n\t{\n\t\t__sampleIterator = std::vector<int>(__imSize.width*__imSize.height, 0);\n\t\tfor(unsigned int k=0; k<__sampleIterator.size(); k++)\n\t\t\t__sampleIterator[k] = k;\n\n\t\tcv::randShuffle(__sampleIterator);\t\t\t\n\t}\n\t\n\t// Angular m_margin\n\t__margin = (float)(ANGLE_MARGIN*CV_PI/180);\n}\n\nint LSWMS::run(const cv::Mat &img, std::vector<LSEG> &lSegs, std::vector<double> &errors)\n{\n\t// **********************************************\n\t// This function analyses the input image and finds\n\t// line segments that are stored in the given vector\n\t// Args:\n\t// \t-> img - Color or grayscale input image\n\t// \t<- lSegs - Output vector of line segments\n\t//  <- errors - Output vector of angular errors\n\t// Ret:\n\t// \tRET_OK - no errors found\n\t// \tRET_ERROR - errors found\n\t// **********************************************\n\n\t// Clear line segment container\n\tlSegs.clear();\n\terrors.clear();\n\n\t// Input image to __img\n\tif(img.channels() == 3)\n\t\tcv::cvtColor(img, __img, CV_BGR2GRAY);\n\telse\n\t\t__img = img;\n\n\t// Add convolution borders\n\tcv::copyMakeBorder(__img, __imgPad, __N, __N, __N, __N, cv::BORDER_REPLICATE); // This way we avoid line segments at the boundaries of the image\n\n\t// Init Mask matrix\n\t__M.setTo(255);\n\t__imgPadROI = __M(__roiRect);\n\t__imgPadROI.setTo(0);\n\n\t// Compute Gradient map\t\t\n\t// Call to the computation of the gradient and angle maps (SOBEL)\n\tint retP = computeGradientMaps(__imgPad, __G, __Gx, __Gy);\n\tif(retP == RET_ERROR)\n\t{\n\t\tif(__verbose) {\tprintf(\"ERROR: Probability map could not be computed\\n\"); }\n\t\treturn RET_ERROR;\n\t}\t\n\n\t// Set padding to zero\n\tint NN = __N + __R;\n\tsetPaddingToZero(__Gx, NN);\n\tsetPaddingToZero(__Gy, NN);\n\tsetPaddingToZero(__G, NN);\n\n\t// Line segment finder\n\tint retLS = findLineSegments(__G, __Gx, __Gy, __A, __M, lSegs, errors);\n\treturn retLS;\n\t\n\n\treturn RET_OK;\n}\nint LSWMS::computeGradientMaps(const cv::Mat &img, cv::Mat &G, cv::Mat &Gx, cv::Mat &Gy)\n{\n\t// **********************************************\n\t// SOBEL mode\n\t//\n\t// This function obtains the gradient image (G, Gx, Gy),\n\t// and fills the angular map A.\n\t//\n\t// Args:\n\t// \t-> img - Grayscale input image\n\t// \t<- G - Gradient magnitude image\n\t// \t<- Gx - Gradient x-magnitude image\n\t// \t<- Gy - Gradient y-magnitude image\n\t// Ret:\n\t// \tRET_OK - no errors found\n\t// \tRET_ERROR - errors found\n\t// **********************************************\n\tif(__verbose) { printf(\"Compute gradient maps...\"); fflush(stdout); }\n\t\n\t// Sobel operator\n\tint ddepth = CV_16S;\n\tcv::Mat absGx, absGy;\n\n\tcv::Sobel(img, Gx, ddepth, 1, 0);\n\tconvertScaleAbs(Gx, absGx, (double)1/8);\n\n\tcv::Sobel(img, Gy, ddepth, 0, 1);\n\tconvertScaleAbs(Gy, absGy, (double)1/8);\n\n\t//cv::addWeighted(absGx, 0.5, absGy, 0.5, 0, G, CV_8U);\n\tcv::add(absGx, absGy, G);\n\n\t// Obtain the threshold\n\tcv::Scalar meanG = cv::mean(G);\n\t__meanG = (int)meanG.val[0];\n\tif(__verbose) { printf(\" computed: __meanG = %d\\n\", __meanG); }\n\n\t// Move from 2nd to 4th and from 3rd to 1st\n\t// From 2nd to 4th, \t\n\t//if( gx < 0 && gy > 0 ) {gx = -gx; gy = -gy;} // from 2 to 4\n\t//if( gx < 0 && gy < 0 ) {gx = -gx; gy = -gy;} // from 3 to 1\n\t//if( gx < 0 ) {gx = -gx; gy = -gy;}\n\tint movedCounter = 0;\n\tfor(int j=0; j<__imPadSize.height; ++j)\n\t{\n\t\tshort *ptRowGx = Gx.ptr<short>(j);\n\t\tshort *ptRowGy = Gy.ptr<short>(j);\n\t\tfor(int i=0; i<__imPadSize.width; ++i)\n\t\t{\n\t\t\tif(ptRowGx[i] < 0)\n\t\t\t{\n\t\t\t\tptRowGy[i] = -ptRowGy[i];\n\t\t\t\tptRowGx[i] = -ptRowGx[i];\n\t\t\t\tmovedCounter++;\n\t\t\t}\n\t\t}\n\t}\n\tif(__verbose) { printf(\"Moved %d/%d (%.2f%%) elements to 1st4th quadrant\\n\", movedCounter, __imPadSize.height*__imPadSize.width, ((double)100*movedCounter)/((double)__imPadSize.height*__imPadSize.width)); }\n\n\tif(__meanG > 0 && __meanG < 256)\n\t\treturn RET_OK;\n\telse\n\t\treturn RET_ERROR;\t\n}\nint LSWMS::findLineSegments(const cv::Mat &G, const cv::Mat &Gx, const cv::Mat &Gy, cv::Mat &A, cv::Mat &M, std::vector<LSEG> &lSegs, std::vector<double> &errors)\n{\n\t// **********************************************\n\t// This function finds line segments using the \n\t// probability map P, the gradient components \n\t// Gx, and Gy and the angle map A.\n\t//\n\t// Args:\n\t// \t-> G - Gradient magnitude map\n\t// \t-> Gx - Gradient x-magnitude image\n\t// \t-> Gy - Gradient y-magnitude image\n\t//\t<- M - Mask image of visited pixels\n\t//\t<- lSegs - vector of detected line segments\n\t//  <- errors - vector of angular errors\n\t// Ret:\n\t// \tRET_OK - no errors found\n\t// \tRET_ERROR - errors found\n\t// **********************************************\n\t// Loop over the image\n\tint x0, y0;\n\tint kIterator = 0;\n\n\tint imgSize = __img.cols*__img.rows;\n\n\twhile(true)\n\t{\t\t\t\t\n\t\tif (kIterator == imgSize)\n\t\t{\n\t\t\t// This is the end\n\t\t\tbreak;\n\t\t}\n\t\tif(__numMaxLSegs == 0)\n\t\t{\n\t\t\tx0 = kIterator%__img.cols;\n\t\t\ty0 = kIterator/__img.cols;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tx0 = __sampleIterator[kIterator]%__img.cols;\n\t\t\ty0 = __sampleIterator[kIterator]/__img.cols;\n\t\t}\n\t\tkIterator++;\n\t\t\n\t\t// Add padding\n\t\tx0 = x0 + __N;\n\t\ty0 = y0 + __N;\n\t\t \n\t\t// Check mask and value\n\t\tif(__M.at<uchar>(y0,x0)==0 && G.at<uchar>(y0,x0) > __meanG)\n\t\t{\n\t\t\t// The sample is (x0, y0)\n\t\t\tcv::Point ptOrig(x0, y0);\n\t\t\tfloat gX = (float)Gx.at<short>(y0,x0);\n\t\t\tfloat gY = (float)Gy.at<short>(y0,x0);\n\t\t\tDIR_POINT dpOrig(ptOrig, gX, gY);\t\t// Since it is computed from Gx, Gy, it is in 1º4º\n\n\t\t\t// Line segment generation\t\n\t\t\tfloat error = 0;\n\t\t\tif(__verbose) { printf(\"-------------------------------\\n\"); }\n\t\t\tif(__verbose) { printf(\"Try dpOrig=(%d,%d,%.2f,%.2f)...\\n\", dpOrig.pt.x, dpOrig.pt.y, dpOrig.vx, dpOrig.vy); }\n\t\t\tint retLS = lineSegmentGeneration(dpOrig, __lSeg, error);\n\n\t\t\tif( (retLS == RET_OK) && error < MAX_ERROR )\n\t\t\t{\n\t\t\t\tif(__verbose) { printf(\"lSeg generated=(%d,%d)->(%d,%d)...\\n\", __lSeg[0].x, __lSeg[0].y, __lSeg[1].x, __lSeg[1].y); }\n\t\t\t\tif(__verbose) { printf(\"-------------------------------\\n\"); }\n\t\t\t\t\n\t\t\t\tlSegs.push_back(__lSeg);\n\t\t\t\terrors.push_back((double)error);\n\t\t\t\t\n\t\t\t\tif(__numMaxLSegs != 0 && lSegs.size() >= (unsigned int)__numMaxLSegs)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Mark as visited\n\t\t\t\tcv::Rect w(x0-__R, y0 -__R, __N, __N);\n\t\t\t\tcv::Mat roi = __M(w);\n\t\t\t\troi.setTo(255);\t\t\t\t\t\n\t\t\t}\t\t\t\n\t\t}\n\t}\t\n\n\treturn RET_OK;\n}\nint LSWMS::lineSegmentGeneration(const DIR_POINT &dpOrig, LSEG &lSeg, float &error)\n{\n\t// **********************************************\n\t// Starts at dpOrig and generates lSeg\n\t// \n\t// Args:\n\t// \t-> dpOrig - starting DIR_POINT \n\t//\t<- lSeg - detected line segment\n\t// Ret:\n\t// \tRET_OK - lSeg created\n\t// \tRET_ERROR - lSeg not created\n\t// **********************************************\n\t\n\t// Check input data\n\tif(dpOrig.pt.x < 0 || dpOrig.pt.x >= __G.cols || dpOrig.pt.y<0 || dpOrig.pt.y >= __G.rows)\n\t\treturn RET_ERROR;\n\n\t// Find best candidate with Mean-Shift\n\t// -----------------------------------------------------\n\tDIR_POINT dpCentr = dpOrig;\t\n\tif(__verbose)\n\t{\n\t\tprintf(\"\\tMean-Shift(Centr): from (%d,%d,%.2f,%.2f) to...\", dpOrig.pt.x, dpOrig.pt.y, dpOrig.vx, dpOrig.vy);\n\t\tfflush(stdout);\n\t}\n\tint retMSC = weightedMeanShift(dpOrig, dpCentr, __M); /// COMO LE PASO __M, TIENE EN CUENTA SI SE HA VISITADO O NO\n\tif(__verbose) { printf(\" (%d,%d,%.2f, %.2f)\\n\", dpCentr.pt.x, dpCentr.pt.y, dpCentr.vx, dpCentr.vy); }\n\t\t\n\tif(retMSC == RET_ERROR)\t\n\t{\n\t\tif(__verbose) { printf(\"\\tMean-Shift reached not a valid point\\n\"); }\n\t\treturn RET_ERROR;\t\n\t}\n\t\n\t// Grow in two directions from dpCentr\n\t// -----------------------------------------------------\n\tif(__verbose) { printf(\"\\tGROW 1:\"); fflush(stdout); }\n\tcv::Point pt1;\n\tfloat retG1 = grow(dpCentr, pt1, 1);\n\tfloat d1 = (float)((dpCentr.pt.x - pt1.x)*(dpCentr.pt.x - pt1.x) + (dpCentr.pt.y - pt1.y)*(dpCentr.pt.y - pt1.y));\n\tif(__verbose) { printf(\"\\tpt1(%d,%d), dist = %.2f, error=%.4f\\n\", pt1.x, pt1.y, d1, retG1); }\n\t\n\tif(__verbose) { printf(\"\\tGROW 2:\"); fflush(stdout); }\n\tcv::Point pt2;\n\tfloat retG2 = grow(dpCentr, pt2, 2);\n\tfloat d2 = (float)((dpCentr.pt.x - pt2.x)*(dpCentr.pt.x - pt2.x) + (dpCentr.pt.y - pt2.y)*(dpCentr.pt.y - pt2.y));\n\tif(__verbose) { printf(\"\\tpt2(%d,%d), dist = %.2f, error=%.4f\\n\", pt2.x, pt2.y, d2, retG2); }\n\n\tif(retG1 == -1 && retG2 == -1)\n\t\treturn RET_ERROR;\n\n\t// Select the most distant extremum\n\tif(d1<d2)\n\t{\n\t\tpt1 = pt2;\n\t\terror = retG2;\n\t\tif(__verbose) { printf(\"Longest dir is 2\\n\"); }\n\t}\n\telse\n\t{\n\t\terror = retG1;\n\t\tif(__verbose) { printf(\"Longest dir is 1\\n\"); }\n\t}\n\n\t// Grow to the non-selected direction, with the new orientation\n\tfloat dirX = (float)(dpCentr.pt.x - pt1.x);\n\tfloat dirY = (float)(dpCentr.pt.y - pt1.y);\n\tfloat norm = sqrt(dirX*dirX + dirY*dirY);\n\t\n\tif(norm>0)\n\t{\n\t\tdirX = dirX/norm;\n\t\tdirY = dirY/norm;\n\t\t\n\t\tDIR_POINT dpAux(dpCentr.pt, -(-dirY), -dirX);\t// DIR_POINT must be filled ALWAYS with gradient vectors\n\t\tfloat retG = grow(dpAux, pt2, 1);\n\t\terror = retG;\n\t}\n\telse\n\t{\n\t\tpt2 = dpCentr.pt;\t\n\t}\n\t\n\t// Check\n\tdirX = (float)(pt1.x -pt2.x);\n\tdirY = (float)(pt1.y -pt2.y);\n\tif( sqrt(dirX*dirX + dirY*dirY) < __N)\n\t{\n\t\tif(__verbose) { printf(\"Line segment not generated: Too short.\\n\"); }\n\t\treturn RET_ERROR;\n\t}\n\t\n\t// Output line segment\n\tif(__verbose) { printf(\"LSeg = (%d,%d)-(%d,%d)\\n\", pt2.x, pt2.y, pt1.x, pt1.y); }\n\tlSeg.clear();\n\tlSeg.push_back(cv::Point(pt2.x - 2*__R, pt2.y - 2*__R));\n\tlSeg.push_back(cv::Point(pt1.x - 2*__R, pt1.y - 2*__R));\n\t\n\t// Update visited positions matrix\n\tupdateMask(pt1,pt2);\n\treturn RET_OK;\n}\nvoid LSWMS::updateMask(cv::Point pt1, cv::Point pt2)\n{\n\t// Bresenham from one extremum to the other\n\tint x1 = pt1.x, x2 = pt2.x, y1 = pt1.y, y2 = pt2.y;\n\tint dx = ABS(x2-x1);\n\tint dy = ABS(y2-y1);\n\tint sx, sy, err, e2;\n\n\tif(x1 < x2) sx = 1; else sx = -1;\n\tif(y1 < y2) sy = 1; else sy = -1;\n\terr = dx-dy;\n\twhile(true)\n\t{\n\t\t// Current value is (x1,y1)\n\t\t// -------------------------------\n\t\t// Do...\n\t\t// Set window to \"visited=255\"\n\t\tfor(int j=y1-__R; j<=y1+__R; ++j)\n\t\t{\n\t\t\tunsigned char* ptRowM = __M.ptr<uchar>(j);\n\t\t\tfor(int i=x1-__R; i<=x1+__R; ++i)\t\t\n\t\t\t\tptRowM[i] = 255;\t\t\t\t\n\t\t}\n\t\t// -------------------------------\n\t\t\n\t\t// Check end\n\t\tif (x1 == x2 && y1 == y2) break;\n\n\t\t// Update position for next iteration\n\t\te2 = 2*err;\n\t\tif(e2 > -dy) { err = err - dy; x1 = x1 + sx;}\n\t\tif(e2 < dx)  { err = err + dx; y1 = y1 + sy;} \t\n\t}\n}\nint LSWMS::weightedMeanShift(const DIR_POINT &dpOrig, DIR_POINT &dpDst, const cv::Mat &M)\n{\n\t// **********************************************\n\t// Refines dpOrig and creates dpDst\n\t// \n\t// Args:\n\t// \t-> dpOrig - starting DIR_POINT \n\t//\t<- dpDst - refined DIR_POINT\n\t// Ret:\n\t// \tRET_OK - dpDst created\n\t// \tRET_ERROR - dpDst not found\n\t//\n\t// Called from \"lineSegmentGeneration\"\n\t// **********************************************\n\n\t// MAIN LOOP: loop until MS generates no movement (or dead-loop)\n\t__seeds.clear();\n\tDIR_POINT dpCurr = dpOrig;\t// The initial dp is in 1º4º\n\tdpDst = dpOrig;\n\n\twhile(true)\n\t{\n\t\t// Check point\n\t\tif(dpCurr.pt.x < 0 || dpCurr.pt.x >= __G.cols || dpCurr.pt.y<0 || dpCurr.pt.y >= __G.rows)\n\t\t\treturn RET_ERROR;\n\n\t\t// Check direction\n\t\tif(dpCurr.vx==0 && dpCurr.vy == 0)\t\n\t\t\treturn RET_ERROR;\n\n\t\t// Convert to 1º4º (maybe not needed)\n\t\tsetTo14Quads(dpCurr);\n\n\t\t// Check already visited\n\t\tif(!M.empty())\n\t\t{\n\t\t\tif(M.at<uchar>(dpCurr.pt.y, dpCurr.pt.x) == 255) \n\t\t\t{\n\t\t\t\treturn RET_ERROR;\n\t\t\t}\n\t\t}\n\n\t\t// Check if previously used as seed for this MS-central (this is to avoid dead-loops)\n\t\tfor(unsigned int i=0; i<__seeds.size(); i++)\n\t\t{\n\t\t\tif(__seeds[i].x == dpCurr.pt.x && __seeds[i].y == dpCurr.pt.y)\n\t\t\t{\n\t\t\t\tdpDst = dpCurr;\n\t\t\t\treturn RET_ERROR;\n\t\t\t}\n\t\t}\t\t\n\n\t\t// Define bounds\n\t\tint xMin = dpCurr.pt.x - __R;\n\t\tint yMin = dpCurr.pt.y - __R;\n\t\tint xMax = dpCurr.pt.x + __R;\n\t\tint yMax = dpCurr.pt.y + __R;\n\t\tint offX = __R;\n\t\tint offY = __R;\n\n\t\tif( xMin < 0 || yMin < 0 || xMax >= __G.cols || yMax >= __G.rows)\n\t\t\treturn RET_ERROR;\n\t\t\n\t\t__seeds.push_back(dpCurr.pt);\n\t\t\n\t\t// Define rois\n\t\tcv::Rect roi(xMin, yMin, xMax-xMin+1, yMax-yMin+1);\n\t\tcv::Mat gBlock = cv::Mat(__G, roi);\n\t\tcv::Mat gXBlock = cv::Mat(__Gx, roi);\n\t\tcv::Mat gYBlock = cv::Mat(__Gy, roi);\n\t\tcv::Mat aBlock = cv::Mat(__A, roi);\n\t\tcv::Mat insideBlock = cv::Mat(gBlock.size(), CV_8U); // 0: outside, 1:inside\n\t\tinsideBlock.setTo(1);\n\n\t\t// Update angles (this is to compute angles only once)\n\t\tfor(int j=0; j<aBlock.rows; ++j)\n\t\t{\n\t\t\tfor(int i=0; i<aBlock.cols; ++i)\n\t\t\t{\n\t\t\t\t// This is guaranteed to be in 1º and 4º quadrant\n\t\t\t\taBlock.at<float>(j,i) = atan2((float)gYBlock.at<short>(j,i), (float)gXBlock.at<short>(j,i));\n\t\t\t}\n\t\t}\n\n\t\t//if(__verbose) printf(\"dpCurr(%d,%d)(%.2f,%.2f)\\n\", dpCurr.pt.x, dpCurr.pt.y, dpCurr.vx, dpCurr.vy);\n\t\t\t\t\n\t\t//if(__verbose) std::cout << \"gBlock\" << gBlock << endl;\n\t\t//if(__verbose) std::cout << \"gXBlock\" << gXBlock << endl;\n\t\t//if(__verbose) std::cout << \"gYBlock\" << gYBlock << endl;\n\t\t//if(__verbose) std::cout << \"aBlock\" << aBlock << endl;\n\n\t\t// ----------------------------------\n\t\t// Angle analysis\n\t\tfloat currentAngle = atan2(dpCurr.vy, dpCurr.vx);\t// output is between (-CV_PI/2, CV_PI/2)\n\t\t//if(__verbose) printf(\"currentAngle = %.2f\\n\", currentAngle);\n\t\t// ----------------------------------\n\n\t\tfloat angleShift = 0;\n\t\tint outsideCounter = 0;\n\t\tif(currentAngle - __margin < -PI_2)\n\t\t{\n\t\t\t// Shift angles according to currentAngle to avoid discontinuities\t\t\t\n\t\t\t//if(__verbose) printf(\"shift angles since %.2f - %.2f < %.2f\\n\", currentAngle, __margin, -PI_2);\n\t\t\tangleShift = currentAngle;\n\t\t\taBlock = aBlock - currentAngle;\t\n\t\t\tcurrentAngle = 0;\n\t\t\tfloat minAngle = currentAngle - __margin;\n\t\t\tfloat maxAngle = currentAngle + __margin;\n\n\t\t\tfor(int j=0; j<aBlock.rows; j++)\n\t\t\t{\n\t\t\t\tfloat *ptRowABlock = aBlock.ptr<float>(j);\n\t\t\t\tuchar *ptRowGBlock = gBlock.ptr<uchar>(j);\n\t\t\t\tfor(int i=0; i<aBlock.cols; i++)\n\t\t\t\t{\n\t\t\t\t\tif(ptRowABlock[i] < -PI_2) ptRowABlock[i] += (float)CV_PI;\n\t\t\t\t\tif(ptRowABlock[i] > PI_2) ptRowABlock[i] -= (float)CV_PI;\n\t\t\t\t\tif(ptRowABlock[i] < minAngle || ptRowABlock[i] > maxAngle) \n\t\t\t\t\t{\n\t\t\t\t\t\t//ptRowGBlock[i] = -1;\n\t\t\t\t\t\tinsideBlock.at<uchar>(j,i) = 0;\n\t\t\t\t\t\toutsideCounter++;\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t}\t\t\n\t\t\t// Restore\n\t\t\taBlock = aBlock + angleShift;\t\n\n\n\t\t}\n\t\telse if(currentAngle + __margin > PI_2)\n\t\t{\n\t\t\t// Shift angles according to currentAngle to avoid discontinuities\n\t\t\t//if(__verbose) printf(\"shift angles since %.2f + %.2f > %.2f\\n\", currentAngle, __margin, PI_2);\n\t\t\tangleShift = currentAngle;\n\t\t\taBlock = aBlock - currentAngle;\n\t\t\tcurrentAngle = 0;\n\n\t\t\tfloat minAngle = currentAngle - __margin;\n\t\t\tfloat maxAngle = currentAngle + __margin;\n\n\t\t\tfor(int j=0; j<aBlock.rows; j++)\n\t\t\t{\n\t\t\t\tfloat *ptRowABlock = aBlock.ptr<float>(j);\n\t\t\t\tuchar *ptRowGBlock = gBlock.ptr<uchar>(j);\n\t\t\t\tfor(int i=0; i<aBlock.cols; i++)\n\t\t\t\t{\n\t\t\t\t\tif(ptRowABlock[i] < -PI_2) ptRowABlock[i] += (float)CV_PI;\n\t\t\t\t\tif(ptRowABlock[i] > PI_2) ptRowABlock[i] -= (float)CV_PI;\n\t\t\t\t\tif(ptRowABlock[i] < minAngle || ptRowABlock[i] > maxAngle) \n\t\t\t\t\t{\n\t\t\t\t\t\t//ptRowGBlock[i] = -1;\n\t\t\t\t\t\tinsideBlock.at<uchar>(j,i) = 0;\n\t\t\t\t\t\toutsideCounter++;\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Restore\n\t\t\taBlock = aBlock + angleShift;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tangleShift = 0;\n\t\t\tfloat minAngle = currentAngle - __margin;\n\t\t\tfloat maxAngle = currentAngle + __margin;\n\t\t\tfor(int j=0; j<aBlock.rows; j++)\n\t\t\t{\n\t\t\t\tfloat *ptRowABlock = aBlock.ptr<float>(j);\n\t\t\t\tuchar *ptRowGBlock = gBlock.ptr<uchar>(j);\n\t\t\t\tfor(int i=0; i<aBlock.cols; i++)\n\t\t\t\t{\t\t\t\t\t\n\t\t\t\t\tif(ptRowABlock[i] < minAngle || ptRowABlock[i] > maxAngle) \n\t\t\t\t\t{\n\t\t\t\t\t\t//ptRowGBlock[i] = -1;\n\t\t\t\t\t\tinsideBlock.at<uchar>(j,i) = 0;\n\t\t\t\t\t\toutsideCounter++;\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//if(__verbose) std::cout << \"insideBlock\" << insideBlock << endl;\n\t\t//if(__verbose) std::cout << \"aBlock(after computing insideBlock\" << aBlock << endl;\n\n\t\t// Check number of samples inside the bandwidth\n\t\tif(outsideCounter == (2*__R+1)*(2*__R+1))\n\t\t\treturn RET_ERROR;\n\n\t\t// New (Circular) Mean angle (weighted by G)\n\t\tfloat sumWeight = 0;\n\t\tfloat foffX = 0;\n\t\tfloat foffY = 0;\n\t\tfloat meanAngle = 0;\n\t\t\n\t\tfor(int j=0; j<gBlock.rows; j++)\n\t\t{\t\t\t\n\t\t\tuchar *ptRowGBlock = gBlock.ptr<uchar>(j);\n\t\t\tfloat *ptRowABlock = aBlock.ptr<float>(j);\n\n\t\t\tfor(int i=0; i<gBlock.cols; i++)\n\t\t\t{\n\t\t\t\t//if(ptRowGBlock[i] != -1)\n\t\t\t\tif(insideBlock.at<uchar>(j,i) != 0)\n\t\t\t\t{\n\t\t\t\t\t// This sample is inside the Mean-Shift bandwidth\n\t\t\t\t\t// Weighted mean of positons\n\t\t\t\t\tfoffX += (float)(i+1)*ptRowGBlock[i];\t  // This cannot be precomputed...\n\t\t\t\t\tfoffY += (float)(j+1)*ptRowGBlock[i];\n\t\t\t\t\t\t\t\n\t\t\t\t\t// Weighted mean of angle\n\t\t\t\t\tmeanAngle += ptRowABlock[i]*ptRowGBlock[i];\n\t\t\t\t\tsumWeight += ptRowGBlock[i];\t\t  \n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfoffX /= sumWeight; foffX--;\n\t\tfoffY /= sumWeight; foffY--;\n\t\tmeanAngle /= sumWeight;\n\n\t\t//if(__verbose) printf(\"meanAngle = %.2f\\n\", meanAngle);\n\t\t\t\t\n\t\t// Check convergence (movement with respect to the center)\n\t\tif(cvRound(foffX) == offX && cvRound(foffY) == offY)\n\t\t{\n\t\t\t// Converged. Assign and return.\n\t\t\tdpDst = DIR_POINT(dpCurr.pt, cos(meanAngle), sin(meanAngle));\n\t\t\tsetTo14Quads(dpDst);\n\t\t\treturn RET_OK;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Not converged: update dpCurr and iterate\n\t\t\tdpCurr.pt.x += cvRound(foffX) - offX;\n\t\t\tdpCurr.pt.y += cvRound(foffY) - offY;\n\t\t\tdpCurr.vx = cos(meanAngle);\n\t\t\tdpCurr.vy = sin(meanAngle);\n\t\t}\n\n\t}\t\n\n\treturn RET_OK;\n}\nfloat LSWMS::grow(const DIR_POINT &dpOrig, cv::Point &ptDst, int dir)\n{\n\t// **********************************************\n\t// Finds end-point ptDst starting from dpOrig\n\t// \n\t// Args:\n\t// \t-> dpOrig - starting DIR_POINT \n\t//\t<- ptDst - end-point\n\t//\t-> dir - growing direction (1(+) or 2(-))\n\t// Ret:\n\t// \terror - error of line segment\n\t//\n\t// Called from lineSegmentGeneration\n\t// **********************************************\t\n\tcv::Point ptEnd1, ptEnd2; //auxiliar\n\tDIR_POINT dpEnd, dpRef;\t  // auxiliar\n\n\t// Init output\n\tptDst = dpOrig.pt;\n\n\t// Starting gradient vector and director vector\n\tfloat gX, gY;\n\tif(dir == 1)\n\t{\t\n\t\tgX = dpOrig.vx;\n\t\tgY = dpOrig.vy;\t\t\n\t}\n\telse if(dir == 2)\n\t{\n\t\tgX = -dpOrig.vx;\n\t\tgY = -dpOrig.vy;\n\t}\n\telse return RET_ERROR;\n\n\t// Compute currentAngle in 1º4º\n\tfloat error1 = 0;\n\tfloat growAngle, auxAngle, minAngle, maxAngle, diffAngle;\n\t//if(gX < 0)\t// In this case, direction must not be fliped to 1º4º, because otherwise the sense is lost for the second grow procedure...\n\t//{\n\t//\t// Move to 1º4º\n\t//\tgX = -gX;\n\t//\tgY = -gY;\n\t//}\n\tgrowAngle = atan2(gY, gX);\n\n\t// Starting point and angle - Bresenham\n\tcv::Point pt1 = dpOrig.pt;\n\tcv::Point pt2(pt1.x + (int)(1000*(-gY)), pt1.y + (int)(1000*(gX)));\n\tcv::clipLine(__imPadSize, pt1, pt2);\t\n\t\n\t// Loop\t- Bresenham\n\tint k1=0;\n\t\n\tint x1 = pt1.x, x2 = pt2.x, y1 = pt1.y, y2 = pt2.y;\n\tint dx = ABS(x2-x1);\n\tint dy = ABS(y2-y1);\n\tint sx, sy, err, e2;\n\n\tif(__verbose) { printf(\"From (%d,%d) to (%d,%d)...\", x1, y1, x2, y2); fflush(stdout); }\n\n\tif(x1 < x2) sx = 1; else sx = -1;\n\tif(y1 < y2) sy = 1; else sy = -1;\n\terr = dx-dy;\n\t\n\tint maxNumZeroPixels = 2*__R, countZeroPixels=0;\n\twhile(true)\n\t{\t\t\n\t\t// Current value is (x1,y1)\t\n\t\t//if(__verbose) { printf(\"\\n\\tBresenham(%d,%d)\", x1, y1); fflush(stdout); }\n\t\t// -------------------------------\n\t\t// Do...\n\t\t// Check if angle has been computed\n\t\tif(__A.at<float>(y1,x1) != NOT_A_VALID_ANGLE)\n\t\t\tauxAngle = __A.at<float>(y1,x1);\n\t\telse\n\t\t{\n\t\t\tauxAngle = atan2((float)__Gy.at<short>(y1,x1), (float)__Gx.at<short>(y1,x1));\n\t\t\t__A.at<float>(y1,x1) = auxAngle;\n\t\t}\t\t\n\n\t\t// Check early-termination of Bresenham\t\t\n\t\tif(__G.at<uchar>(y1,x1) == 0) \n\t\t{\n\t\t\t//if(__verbose) printf(\"Zero-pixel num. %d\\n\", countZeroPixels);\n\t\t\t\n\t\t\tcountZeroPixels++;\n\t\t\tif(countZeroPixels >= maxNumZeroPixels)\n\t\t\t\tbreak;\t\t// No gradient point\n\t\t\t\n\t\t}\n\t\t\n\t\t// Check angular limits\n\t\tif(growAngle - __margin < -PI_2)\t\t    // e.g. currentAngle = -80º, margin = 20º\n\t\t{\n\t\t\tminAngle = growAngle - __margin + (float)CV_PI; // e.g. -80 -20 +180 = 80º\n\t\t\tmaxAngle = growAngle + __margin;\t    // e.g. -80 +20      =-60º\t\n\n\t\t\tif( auxAngle < 0)\n\t\t\t{\n\t\t\t\tif( auxAngle > maxAngle ) break; //if(__verbose) printf(\"Early-termination: auxAngle(%.2f) > maxAngle(%.2f) && auxAngle < 0\\n\", auxAngle, maxAngle);\n\t\t\t\tdiffAngle = ABS(growAngle - auxAngle);\n\t\t\t}\n\t\t\telse // auxAngle > 0\n\t\t\t{\n\t\t\t\tif( auxAngle < minAngle) break; //if(__verbose) printf(\"Early-termination: auxAngle(%.2f) < minAngle(%.2f) && auxAngle > 0\\n\", auxAngle, minAngle);\n\t\t\t\tdiffAngle = ABS(growAngle - (auxAngle - (float)CV_PI));\n\t\t\t}\t\t\t\n\t\t}\n\t\telse if(growAngle + __margin > PI_2)\t\t    // e.g. currentAngle = 80º, margin = 20º\n\t\t{\n\t\t\tminAngle = growAngle - __margin;\t    // e.g.  80 -20      = 60º\n\t\t\tmaxAngle = growAngle + __margin - (float)CV_PI; // e.g.  80 +20 -180 = -80º\n\n\t\t\tif( auxAngle > 0 )\n\t\t\t{\n\t\t\t\tif( auxAngle < minAngle) break;\t//if(__verbose) printf(\"Early-termination: auxAngle(%.2f) < minAngle(%.2f) && auxAngle > 0\\n\", auxAngle, minAngle);\n\t\t\t\tdiffAngle = ABS(growAngle - auxAngle);\n\t\t\t}\n\t\t\telse // auxAngle < 0\n\t\t\t{\n\t\t\t\tif( auxAngle > maxAngle) break; //if(__verbose) printf(\"Early-termination: auxAngle(%.2f) > maxAngle(%.2f) && auxAngle < 0\\n\", auxAngle, maxAngle);\n\t\t\t\tdiffAngle = ABS(growAngle - (auxAngle + (float)CV_PI));\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\t\n\t\t\tminAngle = growAngle - __margin;\n\t\t\tmaxAngle = growAngle + __margin;\n\t\t\tif(auxAngle < minAngle || auxAngle > maxAngle) break; //if(__verbose) printf(\"Early-termination: auxAngle(%.2f) < minAngle(%.2f) || > maxAngle(%.2f)\\n\", auxAngle, minAngle, maxAngle);\n\t\t\t\n\t\t\tdiffAngle = ABS(growAngle - auxAngle);\n\t\t}\n\t\t\n\t\t// If arrived here, the point is valid (inside the angular limits, and with G!=0)\n\t\t//error1 += ABS(ABS(__Gx.at<short>(y1,x1)) - ABS(gX)) +\n\t\t//\t  ABS(ABS(__Gy.at<short>(y1,x1)) - ABS(gY));\n\t\t//error1 += ABS(auxAngle - growAngle); // OJO, SI HA HABIDO DISCONTINUIDAD, ESTO NO ES CORRECTO...\n\t\terror1 += diffAngle;\n\t\tptEnd1 = cv::Point(x1,y1);\n\t\tk1++;\n\n\t\t// -------------------------------\n\t\t// Check end\n\t\tif (x1 == x2 && y1 == y2) break;\n\n\t\t// Update position for next iteration\n\t\te2 = 2*err;\n\t\tif(e2 > -dy) { err = err - dy; x1 = x1 + sx;}\n\t\tif(e2 < dx)  { err = err + dx; y1 = y1 + sy;} \t\t\n\t}\n\n\t// \"k1\": how many points have been visited\n\t// \"ptEnd\": last valid point\n\tif( k1==0 ) // this means that even the closest point has not been accepted\t\n\t{\n\t\tptEnd1 = dpOrig.pt;\n\t\terror1 = (float)CV_PI;\n\t}\t\n\telse error1 /= k1;\n\tif(__verbose) { printf(\", Arrived to (%d,%d), error=%.2f\", ptEnd1.x, ptEnd1.y, error1); fflush(stdout); }\n\t\n\t// Set ptDst\n\tptDst = ptEnd1;\n\n\t// Apply Mean-Shift to refine the end point\t\n\t//if(__verbose) printf(\"Check grow movement: From (%d,%d) to (%d,%d)\\n\", dpOrig.pt.x, dpOrig.pt.y, ptEnd1.x, ptEnd1.y);\t\n\tif(__verbose) { printf(\", Dist = (%d,%d)\\n\", ABS(ptEnd1.x - dpOrig.pt.x), ABS(ptEnd1.y - dpOrig.pt.y)); }\n\tif(ABS(ptEnd1.x - dpOrig.pt.x) > __R || ABS(ptEnd1.y - dpOrig.pt.y) > __R) // ONLY IF THERE HAS BEEN (SIGNIFICANT) MOTION FROM PREVIOUS MEAN-SHIFT MAXIMA\n\t{\t\t\n\t\tint counter = 0;\n\t\twhile(true)\n\t\t{\n\t\t\tif(__verbose) { printf(\"\\tMean-Shift(Ext): from (%d,%d,%.2f,%.2f) to...\", ptEnd1.x, ptEnd1.y, gX, gY); fflush(stdout); }\n\t\t\tcounter++;\n\n\t\t\t// Mean-Shift on the initial extremum\n\t\t\t// -------------------------------------------------------------\n\t\t\tdpEnd.pt = ptEnd1; dpEnd.vx = gX; dpEnd.vy = gY;\t// gX and gY have been update in the last iter\n\t\t\tdpRef.pt = ptEnd1; dpRef.vx = gX; dpRef.vy = gY;\n\t\t\tint retMSExt = weightedMeanShift(dpEnd, dpRef);\n\n\t\t\tif(__verbose) { printf(\"(%d,%d,%.2f,%.2f)\\n\", dpRef.pt.x, dpRef.pt.y, dpRef.vx, dpRef.vy); }\n\n\t\t\tif(retMSExt == RET_ERROR)\n\t\t\t{\n\t\t\t\t// The refinement gave and incorrect value, keep last Bresenham value\n\t\t\t\tptDst = ptEnd1;\n\t\t\t\treturn RET_OK;\n\t\t\t}\n\t\t\t\n\n\t\t\t// Check motion caused by Mean-Shift\n\t\t\tif(dpRef.pt.x == dpEnd.pt.x && dpRef.pt.y == dpEnd.pt.y)\n\t\t\t{\n\t\t\t\tptDst = dpRef.pt;\n\t\t\t\treturn RET_OK;\n\t\t\t}\n\n\t\t\t// Check displacement from dpOrig\n\t\t\tgX = (float)(dpRef.pt.y - dpOrig.pt.y);\t// \tfloat dX = dpRef.x - dpOrig.x; and gX = dY;\n\t\t\tgY = (float)(dpOrig.pt.x - dpRef.pt.x);\t//\tfloat dY = dpRef.y - dpOrig.y; and gY = -dX;\n\t\t\tif(gX == 0 && gY == 0)\n\t\t\t{\t\n\t\t\t\tptDst = dpRef.pt;\n\t\t\t\treturn RET_OK;\n\t\t\t}\n\t\t\tfloat norm = sqrt(gX*gX + gY*gY);\n\t\t\tgX /= norm;\n\t\t\tgY /= norm;\t\n\n\t\t\t// New Bresenham procedure\t\n\t\t\tif(gX < 0)\n\t\t\t{\n\t\t\t\t// MOve to 1º4º\n\t\t\t\tgX = -gX;\n\t\t\t\tgY = -gY;\n\t\t\t}\n\t\t\tgrowAngle = atan2(gY, gX);\n\n\t\t\tint k2=0;\n\t\t\tfloat error2 = 0;\n\n\t\t\tpt2.x = pt1.x + (int)(1000*(-gY)); pt2.y = pt1.y + (int)(1000*(gX));\n\n\t\t\tx1 = pt1.x; x2 = pt2.x; y1 = pt1.y; y2 = pt2.y;\n\t\t\tdx = ABS(x2-x1);\t\n\t\t\tdy = ABS(y2-y1);\n\n\t\t\tif(x1 < x2) sx = 1; else sx = -1;\n\t\t\tif(y1 < y2) sy = 1; else sy = -1,\n\t\t\terr = dx-dy;\n\n\t\t\tif(__verbose) { printf(\"\\tRefined GROW: From (%d,%d) to (%d,%d)...\", x1, y1, x2, y2); fflush(stdout); }\n\t\t\twhile(true)\n\t\t\t{\n\t\t\t\t// Current value is (x1,y1)\t\n\t\t\t\t//if(__verbose) { printf(\"\\n\\tBresenham(%d,%d)\", x1, y1); fflush(stdout); }\n\t\t\t\t\n\t\t\t\t// -------------------------------\n\t\t\t\t// Do...\n\t\t\t\t// Check if angle has been computed\n\t\t\t\tif(__A.at<float>(y1,x1) != NOT_A_VALID_ANGLE)\n\t\t\t\t\tauxAngle = __A.at<float>(y1,x1);\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tauxAngle = atan2((float)__Gy.at<short>(y1,x1), (float)__Gx.at<short>(y1,x1));\n\t\t\t\t\t__A.at<float>(y1,x1) = auxAngle;\n\t\t\t\t}\n\n\t\t\t\t// Check early-termination of Bresenham\t\t\n\t\t\t\tif(__G.at<uchar>(y1,x1) == 0) \n\t\t\t\t{\n\t\t\t\t\t//if(__verbose) printf(\"Zero-pixel num. %d\\n\", countZeroPixels);\n\t\t\t\n\t\t\t\t\tcountZeroPixels++;\n\t\t\t\t\tif(countZeroPixels >= maxNumZeroPixels)\n\t\t\t\t\t\tbreak;\t\t// No gradient point\t\t\t\n\t\t\t\t}\n\t\t\n\t\t\t\t// Check angular limits\n\t\t\t\tif(growAngle - __margin < -PI_2)\t\t    // e.g. currentAngle = -80º, margin = 20º\n\t\t\t\t{\n\t\t\t\t\tminAngle = growAngle - __margin + (float)CV_PI; // e.g. -80 -20 +180 = 80º\n\t\t\t\t\tmaxAngle = growAngle + __margin;\t    // e.g. -80 +20      =-60º\t\n\n\t\t\t\t\tif( auxAngle < 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tif( auxAngle > maxAngle ) break; //if(__verbose) printf(\"Early-termination: auxAngle(%.2f) > maxAngle(%.2f) && auxAngle < 0\\n\", auxAngle, maxAngle);\n\t\t\t\t\t\tdiffAngle = ABS(growAngle - auxAngle);\n\t\t\t\t\t}\n\t\t\t\t\telse // auxAngle > 0\n\t\t\t\t\t{\n\t\t\t\t\t\tif( auxAngle < minAngle) break; //if(__verbose) printf(\"Early-termination: auxAngle(%.2f) < minAngle(%.2f) && auxAngle > 0\\n\", auxAngle, minAngle);\n\t\t\t\t\t\tdiffAngle = ABS(growAngle - (auxAngle - (float)CV_PI));\n\t\t\t\t\t}\t\t\t\n\t\t\t\t}\n\t\t\t\telse if(growAngle + __margin > PI_2)\t\t    // e.g. currentAngle = 80º, margin = 20º\n\t\t\t\t{\n\t\t\t\t\tminAngle = growAngle - __margin;\t    // e.g.  80 -20      = 60º\n\t\t\t\t\tmaxAngle = growAngle + __margin - (float)CV_PI; // e.g.  80 +20 -180 = -80º\n\n\t\t\t\t\tif( auxAngle > 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\tif( auxAngle < minAngle) break;\t//if(__verbose) printf(\"Early-termination: auxAngle(%.2f) < minAngle(%.2f) && auxAngle > 0\\n\", auxAngle, minAngle);\n\t\t\t\t\t\tdiffAngle = ABS(growAngle - auxAngle);\n\t\t\t\t\t}\n\t\t\t\t\telse // auxAngle < 0\n\t\t\t\t\t{\n\t\t\t\t\t\tif( auxAngle > maxAngle) break; //if(__verbose) printf(\"Early-termination: auxAngle(%.2f) > maxAngle(%.2f) && auxAngle < 0\\n\", auxAngle, maxAngle);\n\t\t\t\t\t\tdiffAngle = ABS(growAngle - (auxAngle + (float)CV_PI));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\t\n\t\t\t\t\tminAngle = growAngle - __margin;\n\t\t\t\t\tmaxAngle = growAngle + __margin;\n\t\t\t\t\tif(auxAngle < minAngle || auxAngle > maxAngle) break; //if(__verbose) printf(\"Early-termination: auxAngle(%.2f) < minAngle(%.2f) || > maxAngle(%.2f)\\n\", auxAngle, minAngle, maxAngle);\n\t\t\t\n\t\t\t\t\tdiffAngle = ABS(growAngle - auxAngle);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\terror2 += diffAngle;\n\t\t\t\tptEnd2 = cv::Point(x1,y1);\n\t\t\t\tk2++;\n\t\t\t\t\n\t\t\t\t// -------------------------------\n\n\t\t\t\t// Check end\n\t\t\t\tif (x1 == x2 && y1 == y2) break;\n\n\t\t\t\t// Update position for next iteration\n\t\t\t\te2 = 2*err;\n\t\t\t\tif(e2 > -dy) { err = err - dy; x1 = x1 + sx;}\n\t\t\t\tif(e2 < dx)  { err = err + dx; y1 = y1 + sy;} \t\t\n\t\t\t} // Bresenham while\n\n\t\t\t\n\t\t\t// \"k2\": how many points have been visited\n\t\t\t// \"ptEnd2\": last valid point\n\t\t\tif( k2==0 ) // this means that even the closest point has not been accepted\t\n\t\t\t{\n\t\t\t\tptEnd2 = dpOrig.pt;\n\t\t\t\terror2 = (float)CV_PI;\n\t\t\t}\t\n\t\t\telse error2 = error2 / k2;\t\t\t\n\n\t\t\tfflush(stdout);\t// Don't really know why, but this is necessary to avoid dead loops...\n\t\t\tif(__verbose) { printf(\", Arrived to (%d,%d), error=%.2f\", ptEnd2.x, ptEnd2.y, error2); fflush(stdout); }\n\t\t\tif(__verbose) { printf(\", Dist = (%d,%d)\\n\", ABS(ptEnd2.x - dpOrig.pt.x), ABS(ptEnd1.y - dpOrig.pt.y)); }\n\n\t\t\t// Compare obtained samples\n\t\t\tif(error1 <= error2)\n\t\t\t{\n\t\t\t\tptDst = ptEnd1;\n\t\t\t\treturn error1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Update ptEnd1 with ptEnd2 because it is better and iterate\n\t\t\t\tptEnd1 = ptEnd2;\n\t\t\t\tk1 = k2;\n\t\t\t\terror1 = error2;\n\t\t\t}\t\t\n\t\t} // Mean-Shift while\n\t}\n\t//else if(__verbose)\n\t//\tprintf(\"Not enough movement\\n\");\n\n\t//return RET_OK;\n\treturn error1;\n}\n\nvoid LSWMS::setPaddingToZero(cv::Mat &img, int NN)\n{\n\tcv::rectangle(img, cv::Point(0,0), cv::Point(img.cols-1, NN-1), cv::Scalar(0), CV_FILLED);\n\tcv::rectangle(img, cv::Point(0,0), cv::Point(NN-1, img.rows-1), cv::Scalar(0), CV_FILLED);\n\tcv::rectangle(img, cv::Point(0,img.rows-NN), cv::Point(img.cols-1, img.rows-1), cv::Scalar(0), CV_FILLED);\n\tcv::rectangle(img, cv::Point(img.cols-NN,0), cv::Point(img.cols-1, img.rows-1), cv::Scalar(0), CV_FILLED);\n}\nvoid LSWMS::drawLSegs(cv::Mat &img, std::vector<LSEG> &lSegs, cv::Scalar color, int thickness)\n{\n\tfor(unsigned int i=0; i<lSegs.size(); i++)\t\n\t\tcv::line(img, lSegs[i][0], lSegs[i][1], color, thickness);\t\t\t\t\t\n}\nvoid LSWMS::drawLSegs(cv::Mat &img, std::vector<LSEG> &lSegs, std::vector<double> &errors, int thickness)\n{\n\tstd::vector<cv::Scalar> colors;\n\tcolors.push_back(CV_RGB(255,0,0));\n\tcolors.push_back(CV_RGB(200,0,0));\n\tcolors.push_back(CV_RGB(150,0,0));\n\tcolors.push_back(CV_RGB(50,0,0));\n\n\tfor(unsigned int i=0; i<lSegs.size(); i++)\t\n\t{\n\t\tif(errors[i] < 0.087)  // 5º\n\t\t\tcv::line(img, lSegs[i][0], lSegs[i][1], colors[0], 3);\t\t\t\t\t\n\t\telse if(errors[i] < 0.174) // 10º\n\t\t\tcv::line(img, lSegs[i][0], lSegs[i][1], colors[1], 2);\n\t\telse if(errors[i] < 0.26) // 15º\n\t\t\tcv::line(img, lSegs[i][0], lSegs[i][1], colors[2], 1);\n\t\telse \n\t\t\tcv::line(img, lSegs[i][0], lSegs[i][1], colors[3], 1);\n\t}\n}\n"
  },
  {
    "path": "thirdparty/LSWMS/LSWMS.h",
    "content": "#ifndef __LSWMS_H__\n#define __LSWMS_H__\n\nenum {RET_OK, RET_ERROR};\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/highgui/highgui.hpp\"\n#include \"opencv2/imgproc/imgproc.hpp\"\n\n#include \"float.h\"\n\n#define PI_2 CV_PI/2\n\ntypedef std::vector<cv::Point> LSEG;\ntypedef struct _DIR_POINT\n{\n\tcv::Point pt;\n\tfloat vx;\n\tfloat vy;\n\n\t_DIR_POINT(cv::Point _pt, float _vx, float _vy)\n\t{\n\t\tpt = _pt;\n\t\tvx = _vx;\n\t\tvy = _vy;\n\t};\n\t_DIR_POINT()\n\t{\t\n\t\tpt = cv::Point(0,0);\n\t\tvx = 0;\n\t\tvy = 0;\n\t}\n}DIR_POINT;\n\nclass LSWMS\n{\n\nprivate:\n\t//Verbose\n\tbool __verbose;\t\n\t\n\t// Sizes\n\tcv::Size __imSize, __imPadSize;\n\tint __imWidth, __imHeight;\n\n\t// Window parameters\t\n\tint __R, __N;\n\n\t// Line Segments\t\n\tLSEG __lSeg;\n\tint __numMaxLSegs;\n\n\t// Images and maps\n\tcv::Mat __img, __imgPad;\n\tcv::Rect __roiRect;\n\tcv::Mat __imgPadROI;\n\tcv::Mat __G, __Gx, __Gy;\t// Map of probability of line segments\n\tcv::Mat __M;\t\t\t// Map of visited pixels\n\tcv::Mat __A;\t\t\t// Map of angles\n\n\tcv::Mat __imAux;\t\t// For debugging\n\n\t// Thresholds and variables\n\tint __meanG;\n\tstd::vector<int> __sampleIterator;\n\tfloat __margin;\n\n\t// Mean-Shift central\n\tstd::vector<cv::Point> __seeds;\n\t\n\t// Functions\n\tvoid setPaddingToZero(cv::Mat &img, int NN);\n\tvoid updateMask(cv::Point pt1, cv::Point pt2);\n\n\t// SOBEL-specific functions\n\tint computeGradientMaps(const cv::Mat &img, cv::Mat &G, cv::Mat &Gx, cv::Mat &Gy);\n\n\t// General functions\n\tint findLineSegments(const cv::Mat &G, const cv::Mat &Gx, const cv::Mat &Gy, cv::Mat &A, cv::Mat &M, std::vector<LSEG> &lSegs, std::vector<double> &errors);\n\tint lineSegmentGeneration(const DIR_POINT &dpOrig, LSEG &lSeg, float &error);\n\n\t// Growing and Mean-Shift\n\tfloat grow(const DIR_POINT &dpOrig, cv::Point &ptDst, int dir);\n\tint weightedMeanShift(const DIR_POINT &dpOrig, DIR_POINT &dpDst, const cv::Mat &M=cv::Mat());\n\npublic:\n\tLSWMS(const cv::Size imSize, const int R, const int numMaxLSegs=0, bool verbose=false);\n\tint run(const cv::Mat &img, std::vector<LSEG> &lSegs, std::vector<double> &errors);\n\tvoid drawLSegs(cv::Mat &img, std::vector<LSEG> &lSegs, cv::Scalar color=CV_RGB(255,0,0), int thickness=1);\n\tvoid drawLSegs(cv::Mat &img, std::vector<LSEG> &lSegs, std::vector<double> &errors, int thickness=1);\n\n};\n\n#endif // __LSWMS_H__\n"
  },
  {
    "path": "thirdparty/LSWMS/main.cpp",
    "content": "/*\n * Project:  lineSegments (LSWMS Line Segment using Weighted Mean-Shift)\n *\n * File:     main.cpp\n *\n * Contents: Creation, initialisation and usage of LSWMS object\n *           for the detection of line segments in images or videos\n *\n * Author:   Marcos Nieto <marcos.nieto.doncel@gmail.com>\n *\n * Homepage: www.marcosnieto.net\n */\n\n#ifdef WIN32\n\t#include <windows.h>\n\t#include <time.h>\n#endif\n\n#ifdef linux\n\t#include <stdio.h>\n\t#include <sys/time.h>\n\t#include <time.h>\n#endif\n\n#include <iostream>\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/highgui/highgui.hpp\"\n#include \"opencv2/imgproc/imgproc.hpp\"\n\n#include \"LSWMS.h\"\n\nusing namespace std;\nusing namespace cv;\n\n// Timing\n#ifdef WIN32\n\tdouble t1, t2;\t\n#else\n\tint t1, t2;\t\n\tstruct timeval ts;\n#endif\ndouble t;\n\nvoid help()\n{\n\t cout << \"/*\\n\"\n         << \" **************************************************************************************************\\n\"\n\t\t << \" * Line segment detection using WMS \\n\"\n         << \" * ----------------------------------------------------\\n\"\t\t \n\t\t << \" * \\n\"\n\t\t << \" * Author:Marcos Nieto\\n\"\n\t\t << \" * www.marcosnieto.net\\n\"\n\t\t << \" * marcos.nieto.doncel@gmail.com\\n\"\n\t\t << \" * \\n\"\n\t\t << \" * Date:01/04/2012\\n\"\n\t\t << \" **************************************************************************************************\\n\"\n\t\t << \" * \\n\"\n\t\t << \" * Usage: \\n\"\t\t \t\t \n\t\t << \" *\t\t-video\t\t# Specifies video file as input (if not specified, camera is used) \\n\"\n\t\t << \" *\t\t-image\t\t# Specifies image file as input (if not specified, camera is used) \\n\"\n\t\t << \" *\t\t-verbose\t# Actives verbose: ON, OFF (default)\\n\"\n\t\t << \" *\t\t-play\t\t# ON: the video runs until the end; OFF: frame by frame (key press event)\\n\"\n\t\t << \" *\t\t-resizedWidth\t# Specifies the desired width of the image (the height is computed to keep aspect ratio)\\n\"\n\t\t << \" *\t\t-numMaxLSegs\t# Specifies the maximum number of line segments to detected.\\n\"\t\t \n\t\t << \" *\\n\"\n\t\t << \" * \t-hough\t\t# ON: Applies OpenCV HoughLinesP for comparison (PPHT)\\n\"\n\t\t << \" *\\n\"\n\t\t << \" * Example:\\n\"\n\t\t << \" *\t\tlineSegment -video myVideo.avi -verbose ON -play OFF\\n\"\n\t\t << \" *\t\tlineSegment -image myImage.jpg -resizedWidth 300 -numMaxLSegs 100\\n\"\n\t\t << \" *\t\tlineSegment -image myImage.jpg -hough ON\\n\"\n\t\t << \" * \\n\"\n\t\t << \" * Keys:\\n\"\n\t\t << \" *\t\tEsc: Quit\\n\"\n         << \" */\\n\" << endl;\n}\nvoid processPPHT(cv::Mat &img, std::vector<LSEG> &lSegs)\n{\n\tcv::Mat imgGRAY;\n\tcv::cvtColor(img, imgGRAY, CV_RGB2GRAY);\n\tcv::Mat dst;\n\tcv::Canny(imgGRAY, dst, 20, 80, 3);\n\tstd::vector<cv::Vec4i> lines;\n\tcv::HoughLinesP(dst, lines, 1, CV_PI/180, 80, 30, 10);\n\n\tLSEG lSeg;\n\tcv::Point p1, p2;\n\n\tlSegs.clear();\n\n\tfor(size_t i=0; i<lines.size(); i++)\n\t{\n\t\tlSeg.clear();\n\t\tp1.x = lines[i][0];\n\t\tp1.y = lines[i][1];\n\n\t\tp2.x = lines[i][2];\n\t\tp2.y = lines[i][3];\n\n\t\tlSeg.push_back(p1);\n\t\tlSeg.push_back(p2);\n\n\t\tlSegs.push_back(lSeg);\t\t\t\n\t}\t\n}\nvoid drawPPHT(cv::Mat &dst, std::vector<LSEG> &lSegs, cv::Scalar color)\n{\n\tfor(size_t i=0; i<lSegs.size(); i++)\n\t{\t\t\n\t\tcv::line(dst, lSegs[i][0], lSegs[i][1], color, 2);\t\n\t}\n}\n/** Main function*/\nint main(int argc, char** argv)\n{\t\n\t// Images\n\tcv::Mat inputImg, imgGRAY;\t\n\tcv::Mat outputImg, outputImgPPHT;\n\tint procWidth=0, procHeight=0;\n\tcv::Size procSize;\n\n\t// Other variables\n\tchar *videoFileName = 0;\n\tchar *imageFileName = 0;\n\tcv::VideoCapture video;\n\tbool useCamera = true;\n\t\n\tbool playMode = true;\n\tbool stillImage = false;\n\tbool verbose = false;\n\tint numMaxLSegs = 0;\t\n\tbool usePPHT = false;\n\n\t// Line segments (LSWMS and PPHT)\n\tstd::vector<LSEG> lSegs, lSegsPPHT;\n\tstd::vector<double> errors;\n\n\t// Start showing help\n\thelp();\n\n\t// Parse arguments\n\tif(argc < 2)\n\t\treturn -1;\t\n\tfor(int i=1; i<argc; i++)\n\t{\n\t\tconst char* s = argv[i];\n\n\t\tif(strcmp(s, \"-video\" ) == 0)\n\t\t{\n\t\t\t// Input video is a video file\n\t\t\tvideoFileName = argv[++i];\n\t\t\tuseCamera = false;\n\t\t}\n\t\telse if(strcmp(s,\"-hough\") == 0)\n\t\t{\n\t\t\tconst char* ss = argv[++i];\n\t\t\tif(strcmp(ss, \"ON\") == 0 || strcmp(ss, \"on\") == 0\n\t\t\t\t|| strcmp(ss, \"TRUE\") == 0 || strcmp(ss, \"true\") == 0 \n\t\t\t\t|| strcmp(ss, \"YES\") == 0 || strcmp(ss, \"yes\") == 0 )\n\t\t\t\tusePPHT = true;\t\n\t\t}\n\t\telse if(strcmp(s,\"-image\") == 0)\n\t\t{\n\t\t\t// Input is a image file\n\t\t\timageFileName = argv[++i];\n\t\t\tstillImage = true;\n\t\t\tuseCamera = false;\n\t\t}\t\t\n\t\telse if(strcmp(s, \"-numMaxLSegs\") == 0)\n\t\t{\n\t\t\tnumMaxLSegs = atoi(argv[++i]);\t\n\t\t}\t\t\n\t\telse if(strcmp(s, \"-resizedWidth\") == 0)\n\t\t{\n\t\t\tprocWidth = atoi(argv[++i]);\n\t\t}\n\t\telse if(strcmp(s, \"-verbose\" ) == 0)\n\t\t{\n\t\t\tconst char* ss = argv[++i];\n\t\t\tif(strcmp(ss, \"ON\") == 0 || strcmp(ss, \"on\") == 0 \n\t\t\t\t|| strcmp(ss, \"TRUE\") == 0 || strcmp(ss, \"true\") == 0 \n\t\t\t\t|| strcmp(ss, \"YES\") == 0 || strcmp(ss, \"yes\") == 0 )\n\t\t\t\tverbose = true;\t\t\t\n\t\t}\n\t\telse if(strcmp(s, \"-play\" ) == 0)\n\t\t{\n\t\t\tconst char* ss = argv[++i];\n\t\t\tif(strcmp(ss, \"OFF\") == 0 || strcmp(ss, \"off\") == 0 \n\t\t\t\t|| strcmp(ss, \"FALSE\") == 0 || strcmp(ss, \"false\") == 0 \n\t\t\t\t|| strcmp(ss, \"NO\") == 0 || strcmp(ss, \"no\") == 0 \n\t\t\t\t|| strcmp(ss, \"STEP\") == 0 || strcmp(ss, \"step\") == 0)\n\t\t\t\tplayMode = false;\t\t\t\n\t\t}\t\t\n\t}\n\n\t// Open video input\n\tif( useCamera )\n\t\tvideo.open(0);\n\telse\n\t{\n\t\tif(!stillImage)\n\t\t\tvideo.open(videoFileName);\n\t}\n\n\t// Check video input\n\tint width = 0, height = 0, fps = 0, fourcc = 0;\n\tif(!stillImage)\n\t{\n\t\tif( !video.isOpened() )\n\t\t{\n\t\t\tprintf(\"ERROR: can not open camera or video file\\n\");\n\t\t\treturn -1;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Show video information\n\t\t\twidth = (int) video.get(CV_CAP_PROP_FRAME_WIDTH);\n\t\t\theight = (int) video.get(CV_CAP_PROP_FRAME_HEIGHT);\n\t\t\tfps = (int) video.get(CV_CAP_PROP_FPS);\n\t\t\tfourcc = (int) video.get(CV_CAP_PROP_FOURCC);\n\n\t\t\tif(!useCamera)\n\t\t\t\tprintf(\"Input video: (%d x %d) at %d fps, fourcc = %d\\n\", width, height, fps, fourcc);\n\t\t\telse\n\t\t\t\tprintf(\"Input camera: (%d x %d) at %d fps\\n\", width, height, fps);\n\t\t}\n\t}\n\telse\n\t{\n\t\tinputImg = cv::imread(imageFileName);\n\t\tif(inputImg.empty())\n\t\t\treturn -1;\n\n\t\twidth = inputImg.cols;\n\t\theight = inputImg.rows;\n\n\t\tprintf(\"Input image: %s, Size (%d x %d)\\n\", imageFileName, width, height);\n\n\t\tplayMode = false;\n\t}\n\n\t// Resize\t\n\tif(procWidth != 0)\n\t{\t\n\t\tprocHeight = (int)(height*((double)procWidth/width));\n\t\tprocSize = cv::Size(procWidth, procHeight);\n\n\t\tprintf(\"Resize to: (%d x %d)\\n\", procWidth, procHeight);\t\n\t}\n\telse\n\t\tprocSize = cv::Size(width, height);\n\n\tif(numMaxLSegs != 0) printf(\"NumMaxLSegs=%d\\n\", numMaxLSegs);\n\t\n\t// ---------------------------\n\t// Create and init LSWMS\n\tint R = 3;\n\tLSWMS lswms(procSize, R, numMaxLSegs, verbose);\n\tif(numMaxLSegs==0)\n\t\tprintf(\"LSWMS object created: R=%d\\n\\n\", R);\n\telse\n\t\tprintf(\"LSWMS object created: R=%d, numMaxLSegs=%d\\n\\n\", R, numMaxLSegs);\n\t// ---------------------------\n\t\n\t// MAIN LOOP\n\tint frameNum=0;\n\tfor( ;; )\n\t{\n\t\tif(!stillImage)\n\t\t{\n\t\t\t//if(verbose) printf(\"\\n-------------------------\\nFRAME #%6d\\n\", frameNum);\n\t\t\tframeNum++;\n\n\t\t\t// Get current image\t\t\n\t\t\tvideo >> inputImg;\n\t\t}\t\n\t\telse\n\t\t{\n\t\t\tprintf(\"-------------------------\\n\");\n\t\t}\t\n\n\t\tif( inputImg.empty() )\n\t\t\tbreak;\n\t\t\n\t\t// Resize to processing size\n\t\tcv::resize(inputImg, inputImg, procSize);\t\t\n\n\t\t// Color Conversion\n\t\tif(inputImg.channels() == 3)\n\t\t{\n\t\t\tcv::cvtColor(inputImg, imgGRAY, CV_BGR2GRAY);\t\n\t\t\tinputImg.copyTo(outputImg);\n\t\t\tif(usePPHT)\n\t\t\t\tinputImg.copyTo(outputImgPPHT);\t\t\t\n\t\t}\n\t\telse\n\t\t{\n\t\t\tinputImg.copyTo(imgGRAY);\n\t\t\tcv::cvtColor(inputImg, outputImg, CV_GRAY2BGR);\n\t\t\tif(usePPHT)\n\t\t\t\tcv::cvtColor(inputImg, outputImgPPHT, CV_GRAY2BGR);\t\t\t\n\t\t}\n\n\t\t// ++++++++++++++++++++++++++++++++++++++++\n\t\t// Process LSWMS\n\t\t#ifdef WIN32\n\t\t\tt1 = ::GetTickCount();\n\t\t#else\n\t\t\tgettimeofday(&ts,0);\n\t\t\tt1 = (ts.tv_sec * 1000 + (ts.tv_usec / 1000));\n\t\t#endif\n\t\tlswms.run(inputImg, lSegs, errors);\t\t\t\t\n\t\t#ifdef WIN32\n\t\t\tt2 = ::GetTickCount();\n\t\t#else\n\t\t\tgettimeofday(&ts,0);\n\t\t\tt2 = (ts.tv_sec * 1000 + (ts.tv_usec / 1000));\n\t\t#endif\t\n\n\t\t// process time = t2 - t1\t\t\n\t\tt = (double)t2-(double)t1;\n\n\t\tcv::Scalar mean, stddev;\n\t\tcv::meanStdDev(errors, mean, stddev);\n\t\tif(!stillImage)\n\t\t\tprintf(\"Fr.#%d - LSWMS: %d lines / %.0f ms , Ang.Error: (Mean, Std)=(%.2f, %.2f)(deg)\\n\", frameNum, lSegs.size(), t, mean.val[0]*180/CV_PI, stddev.val[0]*180/CV_PI);\n\t\telse\n\t\t\tprintf(\"LSWMS: %d segments\\nAngular Error: Mean = %.2f (deg), Std = %.2f (deg)\\nProcess Time = %.0f (ms)\\n\", lSegs.size(), mean.val[0]*180/CV_PI, stddev.val[0]*180/CV_PI,  t);\n\t\t\n\t\t//lswms.drawLSegs(outputImg, lSegs,CV_RGB(255,0,0), 2);\t\t\t// drawing all line segments the same\n\t\tlswms.drawLSegs(outputImg, lSegs, errors);\t\t\t\t// drawing according to errors\n\t\t// ++++++++++++++++++++++++++++++++++++++++\t\t\t\t\n\n\t\t// ++++++++++++++++++++++++++++++++++++++++\t\t\t\t\n\t\tif(usePPHT)\n\t\t{\n\t\t\t// Process PPHT\n\t\t\t#ifdef WIN32\n\t\t\t\tt1 = ::GetTickCount();\n\t\t\t#else\n\t\t\t\tgettimeofday(&ts,0);\n\t\t\t\tt1 = (ts.tv_sec * 1000 + (ts.tv_usec / 1000));\n\t\t\t#endif\n\t\t\tprocessPPHT(inputImg, lSegsPPHT);\t\t\t\t\n\t\t\t#ifdef WIN32\n\t\t\t\tt2 = ::GetTickCount();\n\t\t\t#else\n\t\t\t\tgettimeofday(&ts,0);\n\t\t\t\tt2 = (ts.tv_sec * 1000 + (ts.tv_usec / 1000));\n\t\t\t#endif\n\n\t\t\t// process time = t2 - t1\t\t\n\t\t\tt = (double)t2-(double)t1;\n\n\t\t\tdrawPPHT(outputImgPPHT, lSegsPPHT, CV_RGB(0,0,255));\n\n\t\t\tif(!stillImage)\n\t\t\t\tprintf(\"Fr.#%d - PPHT: %d lines / %.0f ms\\n\", frameNum, lSegsPPHT.size(), t);\n\t\t\telse\n\t\t\t\tprintf(\"\\nPPHT: %d segments\\nProcess Time = %.0f (ms)\\n\", lSegsPPHT.size(), t);\n\t\t\t// ++++++++++++++++++++++++++++++++++++++++\t\n\t\t}\n\n\t\t// View\n\t\timshow(\"LSWMS\", outputImg);\t\n\t\tif(usePPHT)\n\t\t\timshow(\"PPHT\", outputImgPPHT);\n\n\t\tif(stillImage)\n\t\t{\n\t\t\tcv::imwrite(\"lswms.bmp\", outputImg);\n\t\t\tif(usePPHT)\n\t\t\t\tcv::imwrite(\"ppht.bmp\", outputImgPPHT);\n\t\t}\n\t\t\n\n\t\tif(playMode)\n\t\t\tcv::waitKey(1);\n\t\telse\n\t\t\tcv::waitKey(0);\n\n\t\tchar q = (char)waitKey(1);\n\t\n\t\tif( q == 27 )\n\t\t{\n\t\t\tprintf(\"\\nStopped by user request\\n\");\n\t\t\tbreak;\n\t\t}\t\n\n\t\tif(stillImage)\n\t\t\tbreak;\n\t} // main while\n\n\tif(!stillImage)\n\t\tvideo.release();\n\t\n\treturn 0;\n\n\n\n}\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/Readme.txt",
    "content": "many function in the line segmentation algorithm were mex file, if you are using\nwindows or linux system, please recompile following c code into mex file.\n mexRemoveVotes_v3_scale.c\n mexVoteEdges_v3_scale.c\n the c code can be compiled by command\n mex xxxxxxxxx.c\n\nPlease use matlab coder to compile following .m file into mex file:\n hmmParameters.m\n returnLines.m\n sampleLine.m\n the matlab coder is an app in matlab to automatically compile .m code into mex file,\n The entry point for the code is demo_start_v2.m. The instruction is in following\n    select No for \"Does this code use global variables?\"\n\nThe input variable type should be configurated in following\n    sampleLine.m\n    rho    double(1x1)\n    theta  double(1x1)\n    m      double(1x1)\n    n      double(1x1)\n    pp     double(1x2)\n\n    returnLines.m\n    points_proj     double(:infx2)\n    final_labels    double(1x:inf)\n\n    hmmParameters.m\n    exist_edge_on   double(1x40)\n    exist_edge_off  double(1x40)\n    ang_dev_on      double(1x181)\n    ang_dev_off     double(1x181)\n    node_idx        double(:infx1)\n    Psi_t           double(2x2)\n    pi_var          double(2x1)\n    y_h             double(:infx1)\n    distances       double(:infx1)\n    range_dis       double(1x40)\n    nexist_edge_on  double(1x40)\n    nexist_edge_off double(1x40)\n    prob_on         double(1x1)\n    prob_off        double(1x1)\n    prob_stay_on    double(1x1)\n    prob_leave_off  double(1x1)\n    prob_leave_on   double(1x1)\n    prob_stay_off   double(1x1)\n    ang_dev         double(:infx1)\n    range_ang       double(1x181)\n\n  4. Select MEX as output format also remove the _mex ending in the output file name section\n     for example if you are compiling sampleLine.m, output the file name as sampleLine instead of sampleLine_mex\n\nthe line segment detector has two steps\n1. compute the kernel for the image size\n you only need to compute the kernal once for one an image size\n [kernels, kernels_flip, kernel_params] =kernelInitialization(img);\n the kernels, kernels_flip, kernel_params are the kernel parameter for the line segment algorithm below\n2. line segment detection\n [lines, fullLines] =lineSegmentation_HighRes(img,kernels, kernels_flip, kernel_params);\n the lines variable contains the detected line segmentations it arranged as\n [x1 y1 x2 y2 probability]\n The fullLines are the detected lines. It is arranged as [rho theta probability]\n\n please run the demo_start_v2.m for demonstration\n\n the code in Evaluation Code.zip are line evaluation algorithms\n run_create_contours_MCMLSD.m is the algorithm to get line segment statistics for\n MCMLSD, you can modify it to process other line segment detection algorithms\n\n run_eval_PR_4Methods.m and run_eval_PR.m process the statistical information from\n the run_create_contours_MCMLSD.m result and perform evaluations\n\n run_plot_PR.m and run_plot_PR4Methods.m plot the results in a graph\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/checkInParam.m",
    "content": "function [out] = checkInput(img1,g1_mag1,g1_dir1,g1_sc1,g2_mag1,g2_sc1,g2_all1,noise1,...\n                            EDGE_W1,subpixelflag1,maxscale1)\n \nload('input.mat');\nout = 0;\nif ~isequal(img1, img)\n    display('error img');\n    out = out + 1;\nend\nif ~isequal(g1_mag1, g1_mag)\n    display('error g1_mag');\n    out = out + 1;\nend\nif ~isequal(g1_dir1, g1_dir)\n    display('error g1_dir');\n    out = out + 1;\nend\nif ~isequal(g1_sc1, g1_sc)\n    display('error g1_sc');\n    out = out + 1;\nend\nif ~isequal(g2_mag1, g2_mag)\n    display('error g2_mag');\n    out = out + 1;\nend\nif ~isequal(g2_sc1, g2_sc)\n    display('error g2_sc');\n    out = out + 1;\nend\nif ~isequal(g2_all1, g2_all)\n    display('error g2_all');\n    out = out + 1;\nend\nif noise1 ~= noise\n   display('error noise'); \n   out = out + 1;\nend\nif EDGE_W1 ~= edgew\n   display('error EDGE_W'); \n   out = out + 1;\nend\nif subpixelflag1 ~= subpixelflag\n   display('error subpixelflag');\n   out = out + 1;\nend\nif maxscale1 ~= scale\n   display('error scale'); \n   out = out + 1;\nend\n                        \nend"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/checkOutParam.m",
    "content": "function  [out] = checkOutParam(edge_map1,blur_map1,dark_map1,light_map1,...\n    xzero1_map1,yzero1_map1,xzero2_map1,yzero2_map1) \n                           \nload('output.mat');\nout = 0;\nif ~isequal(edge_map1, edge_map)\n    display('error edge_map');\n    out = out + 1;\nend\nif ~isequal(blur_map1, blur_map)\n    display('error blur_map');\n    out = out + 1;\nend\nif ~isequal(dark_map1, dark_map)\n    display('error dark_map');\n    out = out + 1;\nend\nif ~isequal(light_map1, light_map)\n    display('error light_map');\n    out = out + 1;\nend\nif ~isequal(xzero1_map1, xzero1_map)\n    display('error xzero1_map');\n    out = out + 1;\nend\nif ~isequal(yzero1_map1, yzero1_map)\n    display('error yzero1_map');\n    out = out + 1;\nend\nif ~isequal(xzero2_map1, xzero2_map)\n    display('error xzero2_map');\n    out = out + 1;\nend\nif ~isequal(yzero2_map1, yzero2_map)\n    display('error yzero2_map');\n    out = out + 1;\nend      \n\nend"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/check_save_requirements.m",
    "content": "function[sfilenames] = check_save_requirements(save_flags,outputdir,etype);\n\n    name1       = ['edge',etype];\n    sfilenames  = {name1,'blur.mat','dark.mat','light.mat',...\n                   'g1mag.mat','g1dir.mat','g1scale.mat','g2mag.mat','g2scale.mat',...\n                   'xzero1.mat','yzero1.mat','xzero2.mat','yzero2.mat'};\n    \n\tif any(save_flags)\n        \n        % Output directory does not exist:\n        if ((exist(outputdir) ~= 7) & (length(outputdir) ~= 0))\n            mkdir(outputdir);        % Create this directory    \n            mess1   = 'Requested output directory has been created.';\n            uiwait(msgbox(mess1,'Output Directory Creation','none','modal'));\n        end;\n        \n        if (length(outputdir) == 0)\n            outputdir   = 'tmp_output';\n            opmessage   = ['Output directory name not specified.  ',...\n                           'Files will be saved in directory \"tmp_output\".'];\n            uiwait(msgbox(opmessage,'Output Directory Warning','warn','modal'));\n            if (exist(outputdir) ~= 7)\n                mkdir(outputdir);\n            end;\n        end;\n            \n        filestosave = sfilenames(find(save_flags));\n        \n        x   = dir(outputdir);\n        xx  = {x.name}';\n        commonfiles = intersect(filestosave,xx);\n    \n        if ~isempty(commonfiles)\n            maxnumx = 0;\n            for k = 1:1:length(xx)\n                y = xx{k};\n                numx = 0;\n                if (length(y)>4)\n                    if (y(end-4)=='x')\n                        numx = sum(y=='x');\n                    end;\n                end;\n                if (numx > maxnumx)\n                    maxnumx = numx;\n                end;\n            end;\n            assignin('base','maxnumx',maxnumx+1);\n            assignin('base','commonfiles',commonfiles);\n  \n%             uiwait(outputdir_erase_info);  % Call GUI\n%         \n%             changename_flag = evalin('base','changename_flag;');\n%         \n%             if changename_flag\n%                repx = repmat('x',1,maxnumx+1);\n%                for k = 1:1:length(sfilenames)\n%                    s    = sfilenames{k};\n%                    s    = [s(1:end-4),repx,s(end-3:end)];\n%                    sfilenames{k} = s;\n%                end;\n%             end;\n           \n            evalin('base','clear changename_flag maxnumx commonfiles;');    \n        end;    \n    end;\n    \n    for k = 1:1:length(sfilenames)\n        s   = sfilenames{k};\n        s   = [outputdir,'/',s];\n        sfilenames{k} = s;\n    end;\n    \nreturn;"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/convolve_2.m",
    "content": "\n%##############################################################\n%\n% [cimg] = convolve_2(mimg,filt,bc)\n% \n% Convolution of two matrices with the boundaries handled \n%   depending on the value of the boundary condition variable.\n%        - 0 for extension convolution\n%        - 1 for no overlap convolution \n%\n%##############################################################\n\nfunction[cimg] = convolve_2(mimg,filt,bc)\n\nif (bc == 0)\n    \n    pad_img = pad_matrix(mimg,size(filt));\n    cimg    = conv2(pad_img,filt,'same');\n    cimg    = trim_matrix(cimg,size(filt));\n    \nelse\n    \n    cimg = conv2(mimg,filt,'same');\n\n    if (size(filt,1) < size(filt,2))\n        k                   = floor(0.5*length(filt));\n        cimg(:,1:k)         = 0;\n        cimg(:,end-k+1:end) = 0;\n    else\n        k                   = floor(0.5*length(filt));\n        cimg(1:k,:)         = 0;\n        cimg(end-k+1:end,:) = 0;\n    end;\n    \nend;\n\nreturn;\n        \n\n%########################\n% Function to pad matrix:\n%########################\nfunction[r] = pad_matrix(m,d)\n\n\tif (d(1) < d(2))\n        k   = floor(0.5*d(2));\n        ad1 = repmat(m(:,1),1,k);\n        ad2 = repmat(m(:,end),1,k);\n        r   = [ad1 m ad2];\n\telse\n        k   = floor(0.5*d(1));\n        ad1 = repmat(m(1,:),k,1);\n        ad2 = repmat(m(end,:),k,1);\n        r   = [ad1; m; ad2];\n\tend;\n\nreturn;\n\n\n%#########################\n% Function to trim matrix:\n%#########################\nfunction[r] = trim_matrix(m,d)\n\n\tif (d(1) < d(2))\n        k   = floor(0.5*d(2));\n        r   = m(:,k+1:end-k);\n\telse\n        k   = floor(0.5*d(1));\n        r   = m(k+1:end-k,:);\n\tend;\n\nreturn;"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/d2gauss.m",
    "content": "%################################################################\n%\n% d2gauss.m returns a 2-d Gaussian filter with kernal attributes:\n%           size:       n1*n2 \n%           theta:      CCW-angle tkernat filter rotated\n%           sigma1:     standard deviation of 1st gaussian\n%           sigma2:     standard deviation of 2nd gaussian\n%\n%################################################################\n\nfunction[kern] = d2gauss(n1,std1,n2,std2,theta,max1);\n\n[I,J]   = meshgrid(1:1:n2,1:1:n1);\nIt      = I - (n2+1)/2;\nJt      = J - (n1+1)/2;\n\nu1      = cos(theta)*Jt' - sin(theta)*It';\nu2      = sin(theta)*Jt' + cos(theta)*It';\n\nkern    = gauss(u1,std1) .* gauss(u2,std2);\n\n%############################################\n% Normalise the kernal and confine to limits:\n%############################################\nkern    = kern / sqrt(sum(sum(kern.*kern)));\nmax2    = max(max(kern));\nkern    = kern / (max2/max1);\n\nreturn;"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/derivative2nd.m",
    "content": "%############################################################\n% \n% derivative2nd(g1dir,maxscale,noise,gauss_a,conv_type,fpath)\n%\n%############################################################\n\nfunction[g2mag,g2sc,g2all] = derivative2nd(g1dir,maxscale,noise,...\n                                 gauss_a,conv_type);\n\nfm2 = '.ascii';\n\n%############\n% Initialise:\n%############\ng2mag   = 0;\ng2sc    = 0;\nnrows   = size(g1dir,1);\ng2all   = zeros(maxscale*nrows,size(g1dir,2));\n\nfor scale = 1:1:maxscale\n    \n    %#############################\n    % Set scale value for filters:\n    %#############################\n    if (scale == 1)\n        g2scaleval = '05';\n    else\n        g2scaleval = '1';\n    end;\n    \n    mimg    = gauss_a(:,:,scale);\n    \n    %kern1   = load(strcat(fpath,filesep,'gx',g2scaleval,fm2));\n    kern1   = load(strcat('gx',g2scaleval,fm2));\n    rc1     = convolve_2(mimg,kern1,conv_type);\n    %kern2   = load(strcat(fpath,filesep,'g2y',g2scaleval,fm2));\n    kern2   = load(strcat('g2y',g2scaleval,fm2));\n    rc2     = convolve_2(rc1,kern2,conv_type);\n    \n    %kern3   = load(strcat(fpath,filesep,'gy',g2scaleval,fm2));\n    kern3   = load(strcat('gy',g2scaleval,fm2));\n    rc3     = convolve_2(mimg,kern3,conv_type);\n    %kern4   = load(strcat(fpath,filesep,'g2x',g2scaleval,fm2));\n    kern4   = load(strcat('g2x',g2scaleval,fm2));\n    rc4     = convolve_2(rc3,kern4,conv_type);\n    \n    %kern5   = load(strcat(fpath,filesep,'g1x',g2scaleval,fm2));\n    kern5   = load(strcat('g1x',g2scaleval,fm2));\n    rc5     = convolve_2(mimg,kern5,conv_type);\n    %kern6   = load(strcat(fpath,filesep,'g1y',g2scaleval,fm2));\n    kern6   = load(strcat('g1y',g2scaleval,fm2));\n    rc6     = convolve_2(rc5,kern6,conv_type);\n         \n    %#######################################\n    % Calculate the 2nd Gaussian derivative:\n    %#######################################\n    g2      = g2steer(rc4,rc2,rc6,g1dir);\n     \n    g2all((scale-1)*nrows+1:scale*nrows,:) = g2; % For subpixel loc'n.\n        \n    %##############################################################\n    % Augment multi-scale Gaussian directional 2nd derivative maps:\n    %##############################################################\n    [g2mag,g2sc] = g2scale(g2mag,g2,g2sc,scale,noise,0);\n    \nend;\n\nreturn;"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/elderEdge.m",
    "content": "function [edgeStruct] = elderEdge()\n%Run local scale control edge detector on image (Elder & Zucker, 1998)\n\nnoise = 1; %estimated SD of pixel noise\nimagefile='P1020177.jpg'; %name of image file.  Most formats are handled.  May be RGB or grayscale.\nmaxscale=5; %maximum scale, must be positive integer. Scales increase exponentially from 0.5 to 2^{maxscale-2}.  \nedgew=10; %maximum edge blur (distance in pixels between extrema in the 2nd derivative)\nconss=1; %boundary condition for scalespace computation.  0 for extension, 1 for no overlap\ncongrd=0; %boundary condition for derivative computation.  0 for extension, 1 for no overlap\nsubpixelflag=0; %generate subpixel-localized edges\n%run edge detection\nedgeStruct = main_edge(imagefile,maxscale,noise,edgew,conss,congrd,subpixelflag);"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/elderEdge.m~",
    "content": "function elderEdge()\n%Run local scale control edge detector on image (Elder & Zucker, 1998)\nnoise = 1; %estimated SD of pixel noise\nimagefile='img.jpg'; %name of image file\nmaxscale=5; %maximum scale, must be positive integer. Scales increase exponentially from 0.5 to 2^{maxscale-2}.  \nedgew=10; %maximum edge blur (distance in pixels between extrema in the 2nd derivative)\nconss=1; %boundary condition for scalespace computation.  0 for extension, 1 for no overlap\ncongrd=0; %boundary condition for derivative computation.  0 for extension, 1 for no overlap\nsave_v = zeros(0,11); %results to save\nview_v = zeros(0,11); %results to view\n\nsave_v(1) = 1; %edge map\nsave_v(2) = 1; %blur map\nsave_v(3) = 1; %dark map\nsave_v(4) = 1; %light map\nsave_v(5) = 0; %gradient magnitude map\nsave_v(6) = 1; %gradient direction map\nsave_v(7) = 0; %gradient scale map\nsave_v(8) = 0; %2nd derivative map\nsave_v(9) = 0; %2nd derivativ scale map\nsave_v(10) = 0; %X zero crossing offset\nsave_v(11) = 0;%Y zero crossing offset\n\nview_v(1) = 0; %edge map\nview_v(2) = 0; %blur map\nview_v(3) = 0; %dark map\nview_v(4) = 0; %light map\nview_v(5) = 0; %gradient magnitude map\nview_v(6) = 0; %gradient direction map\nview_v(7) = 0; %gradient scale map\nview_v(8) = 0; %2nd derivative map\nview_v(9) = 0; %2nd derivativ scale map\nview_v(10) = 0; %X zero crossing offset\nview_v(11) = 0;%Y zero crossing offset\n\n%change this path to your own local directory for the filters\nfiltpath='~/Dropbox/code/elderlab/edge/mar03/filters';\n\nedgetype='.jpg'; %format for output edge map (.mat also allowed)\nedgelplotflag=0; %show edges on image\nimgplotflag=0; %view original image\noutputdir=pwd;\n\nsfilenames = check_save_requirements(view_v,outputdir,edgetype);\nsubpixelflag=0;\n\noutputdata=main_edge(imagefile,maxscale,noise,edgew,...\n                        conss,congrd,view_v,view_v,filtpath,...\n                        edgetype,edgelplotflag,imgplotflag,sfilenames,...\n                        subpixelflag);\n                    \nreblur=uint8(imreconandblur(1,3));\n\nimg=imread(imagefile);\nif size(img,3)==3\n    img=rgb2gray(img);\nend\nimwrite(img,strcat(resultdir,'img.jpg'));\nimwrite(outputdata.edge_map,strcat(resultdir,'edge.jpg'));\nimwrite(reblur,strcat(resultdir,'recon.jpg'));"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/find_edges.c",
    "content": "\n/************************************************************************************************\n* \n*  Routine Name: lvedge - Detect luminance edges by selecting triads of significant \n*  2nd derivatives of opposite sign flanking a significant 1st derivative of consistent direction.\n* \n*       Purpose: vgtriad\n*\t\t Detect luminance edges by selecting triads of significant\n*\t\t 2nd derivatives of opposite sign flanking a directional\n*\t\t maximum in the 1st derivative of consistent direction.\n*\n*\t\t Pixels with maximal gradient magnitude in the gradient\n*\t\t direction are considered as candidate edge pixels.  The image\n*\t\t is scanned along the gradient line for pixels with significant\n*\t\t 2nd derivative of opposite sign, consistent with the edge\n*\t\t hypothesis.  Scanning is terminated if the line intersects a\n*\t\t pixel with inconsistent or unreliable gradient direction, or\n*\t\t inconsistent 2nd derivative sign if a pixel of consistent sign\n*\t\t has already been detected.  Otherwise, the scan selects the\n*\t\t line segment connecting the edge pixel with the maximum 2nd\n*\t\t derivative pixels.  The local blur width of the blurred\n*\t\t edge is derived as well.  The width is derived from the\n*\t\t distance between G2 terminators of opposite sign, based on an\n*\t\t assumption of Gaussian blur.\n*\n*         Input: img - Original byte image \n*                g1mag - Multi-scale gradient magnitude map \n*                g1dir - Multi-Scale Gradient direction map\n*                g1scale - Gradient scale map\n*                g2 - Multi-Scale 2nd Derivative Map\n*                g2scale - G2 Scale Map\n*                noise - Estimated sensor noise\n*                maxwidth - Maximum edge width detected\n*        Output: gewidth - Estimate of blur scale based on edgewidth. \n*                          Type is VFF_TYP_FLOAT.\n*                dark - Estimate of luminance on dark side of edge. \n*                       Type is VFF_TYP_1_BYTE.\n*                light - Estimate of luminance on light side of edge\n*       Returns: TRUE (1) on success, FALSE (0) on failure\n*  Restrictions: Restricted to real, single-band images.  \n*                Does not work on explicit location data.\n*    Written By: James Elder\n*          Date: Oct 13, 1997\n*      Verified: \n*  Side Effects: \n*      Examples: \n* Modifications: \n****************************************************************/\n\n#define  char16_t uint16_T /*JE Sept 2014.  Needed for MATLAB 2012a under OSX19.0 and Xcode 5.1 */\n#include \"mex.h\"\n#include <stddef.h>  /* NULL */\n#include <math.h>\n#include <stdio.h>\n#define notDblMtx(it) (mxIsComplex(it))\n\n\ndouble \tg2max1,    /* Max G2 response of correct sign */\n      \tg2max2,    /* Max G2 response of incorrect sign */\n      \tg2maxscale,  /* Scale of max G2 response of correct sign */\n\t\txfirst, yfirst, zfirst, /* Endpoints for interpolation */\n      \t/* Sensor noise threshold */\n      \tk_thresh,  /* Min. contrib. to linear interp. for pixel to be labeled */\n      \tpixerr[6] = {9.5,8,3.5,0.25,0.04,0.0}, /* Half-range of gradient direction */\n                                               /* uncertainty due to pixelation */\n                                               /* as function of G1 scale. */\n      \tg2thresh  = 0.0000596, /* Min on sig. g2 value for interpolation */\n      \tedgewidth, \t/* Estimated width of edge */\n      \txend, yend; /* Estimated gradient ray termination coordinates */\n\nint   \tg1len_to_max,maxg1len, \t/* Current and max number of G1 pixels supporting edge assertion */ \n      \tg1max,               \t/* Is current pixel directional max of gradient? */\n      \tg2len,                 \t/* Number of G2 pixels supporting edge */\n      \trows, cols, \t\t\t/* Columns in image */\n      \tg1offsets[1024], \t\t/* Offsets to G1 pixels in current path */\n      \tg2offsets[4], \t\t\t/* Offsets to G2 pixels in current path */\n      \tedgescale = 0, \t\t\t/* Max scale of G1 or G2 response in path */\n      \tacuity_problem, \t\t/* Flag to indicate 1-pixel acuity will not be obtained */\n      \tzcross,                 /* Flag to indicate zero-crossing found */\n      \tkeepoff1,keepoff2; \t\t/* Offsets to pixels from which 2nd derivative calculated */\ndouble\tG2fact1, G2fact2;\t\t/* Factor in recalculation of G2val: \"ki * pow(cos(ddiri),2)\" */\nint\t\tXx1,Xx2,Yy1,Yy2;\t\t/* Offsets returned from g2_path for subpixel method 2 */\n      \ndouble KPI = 3.141593;\ndouble noise; /* Sensor noise threshold */\nFILE *f; \n\n/* Internal functions */\nint round_int(double rd);\nint g2_path(double theta,int bx,int by,double *g1mag,double *g1dir,double *g1scale,\n            double *g2,double *g2scale,int g2sign);\nint compare_dir(double g1mag1,double g1dir1,int g1scale1,double g1mag2,double g1dir2,int g1scale2);\nint sign(double r);\n\nint\nfind_edges(double *img,double *g1mag,double *g1dir,double *g1scale,double *g2,\n\t\tdouble *g2scale,double *g2all,double sensor_noise,int maxwidth,int sublocflag,int maxscale,\n\t\tdouble *xout,double *xout_blur,\n\t\tdouble *xout_dark,double *xout_light,double *xout_x1zero,double *xout_y1zero,\n\t\tdouble *xout_x2zero,double *xout_y2zero)\n{\n\ndouble \ttheta; /* Either in gradient direction or against gradient direction */\nint \tx,y,i; /* Image dimensions and indices */\ndouble \t*g1magd,*g1dird,*g2d; /* Input G1 and G2 map data */\ndouble \t*imgd;\ndouble \tg2maxp,g2maxn; /* Used to detect false edge pixels */\ndouble \tg2scalep,g2scalen; /* Scale of max pos and min neg G2 responses */\ndouble \tblurvar;\ndouble \tnxend,nyend,pxend,pyend; /* Estimated gradient line terminations */                         \ndouble \tnwidth,pwidth; /*distance from current pixel to g2 extrema */\ndouble \terf_const,C,D,L,meanl;\ndouble \tl,d;\n\ndouble \tnxfirst, nyfirst, pxfirst, pyfirst, pzfirst, nzfirst, xinter, yinter;\nint\t\tg2sc1, g2sc2, g2sc3, g2sc4, off_side1, off_side2, off_side3, off_side4;\nint\t\tgind;\ndouble\tG2factor1, G2factor2, G2factor3, G2factor4;\nint\t\tX1,X2,X3,X4,Y1,Y2,Y3,Y4,match_flag;\nint\t\tnewoff1,newoff2,newoff3,newoff4;\ndouble\tnew_nz,new_pz,bestsnr,bestnz,bestpz;\nstatic double g2norms[6] = {1.873,0.2443,0.0306,0.003817,0.00047715,0.0000596};  /* Thresholds */\n\nint \tcount=0; \n\ng1magd = g1mag;\ng1dird = g1dir;\n\ng2d \t= g2;\nimgd \t= img; \n\nnoise \t\t= sensor_noise;\ng2thresh \t= 5.2*g2thresh*noise; /* threshold on interpolated g2 values */\nmaxg1len \t= maxwidth*2;  /* Up to 2 pixels per step */\nk_thresh \t= 0.1; /* Min coeff. in linear interp. to include pixel in edge */\nerf_const \t= 0.68268949213709;\n\nfor (i=0;i<5;i++) /* Convert pixelation uncertainty from deg. to radians */\n  pixerr[i] = pixerr[i] * KPI / 180.0;\n\n/**** Order (x,y) reversed from cantata code ****/\nfor (x=0;x<cols;x++)\nfor (y=0;y<rows;y++,g1magd++,g1dird++,g2d++,imgd++) /* For each pixel in image */\n{\n\n\t/* These values are updated in g2_path */\n\t\n   \ttheta = *g1dird; /* Scan in gradient direction */\n\n   \tif (*g1magd > 0.0 && *g2d >= 0.0) /* Non-negative 2nd derivative */\n   \t{\n        \n\t\tacuity_problem\t= 0;\n      \tg2max1 \t\t\t= 0;\n\t\tg2max2 \t\t\t= 0.0;\n\t  \tg2maxscale \t\t= 0.0;\n\t  \tg1len_to_max \t= 0;\n\t\tg2len \t\t\t= 0;\n\t  \tzcross\t\t\t= 0;\n\t  \tedgewidth \t\t= 0.0;\n \n\t\txfirst = 0.0;\n\t\tyfirst = 0.0;\n\t\tzfirst = 0.0;\n\t\tkeepoff1\t= 0;\n\t\tkeepoff2\t= 0;\n\t\tG2fact1\t\t= 0;\n\t\tG2fact2\t\t= 0;\n\n\t\t/* Find g2_path, last parameter '1' makes g2_path selective for negative G2 responses */\n\t  \tg2_path(theta,x,y,g1magd,g1dird,g1scale+count,g2d,g2scale+count,1);\n\n\t  \tif (g2max1 != 0.0 && g1max) /* Gradient max and found significant negative G2 response */\n\t  \t{\n\n\t\t\tnxfirst\t\t= xfirst;\n\t\t\tnyfirst\t\t= yfirst;\n\t\t\tnzfirst\t\t= -zfirst;\n\n\t\t\toff_side1\t= keepoff1;\n\t\t\toff_side2\t= keepoff2;\n\t\t\tG2factor1\t= G2fact1;\n\t\t\tG2factor2\t= G2fact2;\n\t\t\tX1\t\t\t= Xx1;\n\t\t\tX2\t\t\t= Xx2;\n\t\t\tY1\t\t\t= Yy1;\n\t\t\tY2\t\t\t= Yy2;\n\n\t   \t\tnxend \t\t= xend;       \t/* Save estimated edge ray termination */\n\t     \tnyend \t\t= yend;\n\t     \tnwidth \t\t= sqrt(pow(nxend,2) + pow(nyend,2));\n\t     \tg2maxn \t\t= g2max1;    \t/* Save min negative G2 response */\n\t     \tg2maxp \t\t= g2max2;    \t/* Save max positive G2 response */\n\t     \tg2scalen \t= g2maxscale; \t/* Save scale of min negative G2 response */\n\t     \tg2max1 \t\t= 0.0;\n\t\t\tg2max2 \t\t= 0.0; \n\t     \tg2maxscale \t= 0.0;\n\n\t     \tif (theta > 0)      /* Now scan opposite to gradient direction */\n\t\t   \t\ttheta = theta - KPI;\n\t     \telse\n\t\t   \t\ttheta = theta + KPI;\n\t    \n\t\t\txfirst = 0.0;\n\t\t\tyfirst = 0.0;\n\t\t\tzfirst = 0.0;\n\t\t\tkeepoff1\t= 0;\n\t\t\tkeepoff2\t= 0;\n\t\t\tG2fact1\t\t= 0;\n\t\t\tG2fact2\t\t= 0;\n\n\t\t \t/* Find g2_path, last parameter '0' makes g2_path selective for positive G2 responses */\n\t     \tg2_path(theta,x,y,g1magd,g1dird,g1scale+count,g2d,g2scale+count,0);\n\n\t     \tpxend \t= xend;   /* Save estimated edge ray termination */\n\t     \tpyend \t= yend;\n\t     \tpwidth \t= sqrt(pow(pxend,2) + pow(pyend,2));\n\n\t     \tif ((g2max1>g2maxp) && (g2max2>g2maxn) && g1max)\n\t     \t{\n\t\t\t\tpxfirst\t\t= xfirst;\n\t\t\t\tpyfirst\t\t= yfirst;\n\t\t\t\tpzfirst\t\t= zfirst;\n\n\t\t\t\toff_side3\t= keepoff1;\n\t\t\t\toff_side4\t= keepoff2;\n\t\t\t\tG2factor3\t= G2fact1;\n\t\t\t\tG2factor4\t= G2fact2;\n\t\t\t\tX3\t\t\t= Xx1;\n\t\t\t\tX4\t\t\t= Xx2;\n\t\t\t\tY3\t\t\t= Yy1;\n\t\t\t\tY4\t\t\t= Yy2;\n\t\n\t        \tif ((!acuity_problem && zcross) || (acuity_problem && fabs(pwidth-nwidth)<sqrt(2)))\n\t\t\t    /* Pixel lies between min negative and max positive G2 responses */\n\t\t        {\n\t\t       \t\t*(xout+count) \t= 255;     \n\t           \t\tg2scalep \t\t= g2maxscale; \t/* Save scale of max positive G2 response */\n\t\t       \t\tg2scalep \t\t= pow(2.0,g2scalep)/4.0; \t/* convert integer scale to sigma */\n\t\t       \t\tg2scalen \t\t= pow(2.0,g2scalen)/4.0;\n\t\t\n\t           \t\tblurvar = pow(edgewidth/2.0,2.0) - pow((g2scalen + g2scalep)/2.0,2.0);\n\t\t       \t\tif (blurvar > 0.0)\n\t\t         \t\t*(xout_blur+count)  = sqrt(blurvar); \n\t\t       \t\telse   \n\t\t         \t\t*(xout_blur+count)  = 0.1; \n\n\t\t\t\t\tl = *(imgd+round_int(nxend)*rows+round_int(nyend));\n\t\t\t\t\td = *(imgd+round_int(pxend)*rows+round_int(pyend));\n\n\t\t      \t\tif (l<=d)\n\t\t      \t\t{\n\t    \t\t\t\tmeanl = round_int(0.5*(l+d));\n\t\t        \t\t*(xout_dark+count)\t= meanl;\n\t\t        \t\t*(xout_light+count) = meanl;\n\t\t      \t\t}\n\t\t      \t\telse if (blurvar < 1)\n\t\t      \t\t{\n\t\t        \t\t*(xout_dark+count)\t= round_int(d);\n\t\t        \t\t*(xout_light+count)\t= round_int(l);\n\t\t      \t\t}\n\t\t      \t\telse\n\t\t     \t\t{\n\t\t       \t\t\tC\t= (l - d) / erf_const;\n\t\t       \t\t\tD\t= d - 0.5 * C * (1 - erf_const);\n\t\t       \t\t\tL\t= C + D;\n\n\t\t       \t\t\tif (D<0)\n\t\t\t     \t\t\t*(xout_dark+count) = 0;\n\t\t       \t\t\telse if (D> 255)\n\t\t\t     \t\t\t*(xout_dark+count)  = 255.0;\n\t\t       \t\t\telse\n\t\t\t     \t\t\t*(xout_dark+count) = round_int(D);\n\t\t       \t\t\tif (L<0)\n\t\t\t     \t\t\t*(xout_light+count)= 0;\n\t\t       \t\t\telse if (L> 255)\n\t\t\t     \t\t\t*(xout_light+count) = 255.0;\n\t\t       \t\t\telse\n\t\t\t     \t\t\t*(xout_light+count) = round_int(L);\n\t\t     \t\t}\n\n\t\t\t\t\tif (sublocflag)\n\t\t\t\t\t{\n\n\t\t\t\t\t\t/* METHOD 1: Interpolate to find better estimate of zero-crossing. \n\t\t\t\t\t   \t\tStore resultant x and y in *xout_xzero and *xout_yzero. */\n\t\t\t\t\t\txinter\t= (nzfirst * (pxfirst+x+1) + pzfirst * (nxfirst+x+1)) / (nzfirst + pzfirst);\n\t\t\t\t\t\tyinter\t= (nzfirst * (pyfirst+y+1) + pzfirst * (nyfirst+y+1)) / (nzfirst + pzfirst);\n\n\t\t\t\t\t\t/* Update in xout_x1zero and xout_y1zero matrices */\n\t\t\t\t\t\txinter\t= (xinter > cols) ? cols : xinter;\n\t\t\t\t\t\t*(xout_x1zero+count) = (xinter < 0) ? 0 : xinter;\n\n\t\t\t\t\t\tyinter\t= (yinter > rows) ? rows : yinter;\n\t\t\t\t\t\t*(xout_y1zero+count) = (yinter < 0) ? 0 : yinter;\n\n\n\t\t\t\t\t\t/* METHOD 2: Interpolate as with Method 1, except that scale at the\n\t\t\t\t\t\t  \t4 flanking pixels must match. */\n\t\t\t\t\t\tg2sc1 = (int)*(g2scale+count+off_side1);\n\t\t\t\t\t\tg2sc2 = (int)*(g2scale+count+off_side2);\n   \t\t\t\t\t\tg2sc3 = (int)*(g2scale+count+off_side3);\n   \t\t\t\t\t\tg2sc4 = (int)*(g2scale+count+off_side4);\n\n\t\t\t\t\t\tif ((g2sc1==g2sc2) && (g2sc1==g2sc3) && (g2sc1==g2sc4)) /* Scales match */\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t*(xout_x2zero+count) = *(xout_x1zero+count);\n\t\t\t\t\t\t\t*(xout_y2zero+count) = *(xout_y1zero+count);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse  /* Scales do not match */\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmatch_flag  = 0;\n\t\t\t\t\t\t\tgind\t\t= 1;  /* g2 scale index */\n\n\t\t\t\t\t\t\tbestsnr\t\t= 0;\n\n\t\t\t\t\t\t\twhile (!match_flag && (gind<=maxscale))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tnewoff1\t= (x+X1) * rows * maxscale + (y+Y1) + rows * (gind-1);\n\t\t\t\t\t\t\t\tnewoff2\t= (x+X2) * rows * maxscale + (y+Y2) + rows * (gind-1);\n\t\t\t\t\t\t\t\tnewoff3\t= (x+X3) * rows * maxscale + (y+Y3) + rows * (gind-1);\n\t\t\t\t\t\t\t\tnewoff4\t= (x+X4) * rows * maxscale + (y+Y4) + rows * (gind-1);\n\n      \t\t\t\t\t\t\tnew_nz\t= -G2factor1 * (*(g2all+newoff1)) - G2factor2 * (*(g2all+newoff2)); \n      \t\t\t\t\t\t\tnew_pz\t=  G2factor3 * (*(g2all+newoff3)) + G2factor4 * (*(g2all+newoff4)); \n\n\t\t\t\t\t\t\t\t/* If there is no scale for which all 4 are significant, will need to\n\t\t\t\t\t\t\t\t * choose the one with the best SNR, therefore store it. */\n\t\t\t\t\t\t\t\tif ((new_nz+new_pz)>bestsnr)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tbestsnr\t= new_nz + new_pz;\n\t\t\t\t\t\t\t\t\tbestnz\t= new_nz;\n\t\t\t\t\t\t\t\t\tbestpz\t= new_pz;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t/* If new estimates exceed the threshold, have found answer */\n\t\t\t\t\t\t\t\tif ((new_nz > 5.2*noise*g2norms[gind-1]) && \n\t\t\t\t\t\t\t\t\t\t\t(new_pz > 5.2*noise*g2norms[gind-1]))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\txinter\t= (new_nz * (pxfirst+x+1) + new_pz * (nxfirst+x+1)) / \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(new_nz + new_pz);\n\t\t\t\t\t\t\t\t\tyinter\t= (new_nz * (pyfirst+y+1) + new_pz * (nyfirst+y+1)) / \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(new_nz + new_pz);\n\n\t\t\t\t\t\t\t\t\tmatch_flag = 1;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tgind++;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t/* Use scale with best SNR if none match */\n\t\t\t\t\t\t\tif (!match_flag)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\txinter\t= (bestnz * (pxfirst+x+1) + bestpz * (nxfirst+x+1)) / bestsnr;\n\t\t\t\t\t\t\t\tyinter\t= (bestnz * (pyfirst+y+1) + bestpz * (nyfirst+y+1)) / bestsnr;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t/* Update in xout_x2zero and xout_y2zero matrices */\n\t\t\t\t\t\t\txinter\t= (xinter > cols) ? cols : xinter;\n\t\t\t\t\t\t\t*(xout_x2zero+count) = (xinter < 0) ? 0 : xinter;\n\n\t\t\t\t\t\t\tyinter\t= (yinter > rows) ? rows : yinter;\n\t\t\t\t\t\t\t*(xout_y2zero+count) = (yinter < 0) ? 0 : yinter;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t      \t\t}\n\t    \t}\n\t  \t}\n    }\n    count++;\n}\nreturn(1);\n}\n\n\n/****************************************************************/\nint round_int(double rd)\n{ \ndouble t1, t2;\nint\txf, xc;\n  \nxf = (int)floor(rd);\nxc = (int)ceil(rd);\nt1 = fabs(rd-xf);\nt2 = fabs(rd-xc);\n\nif (t1 >= t2)\n\treturn(xc);\nelse\n\treturn(xf);\n\n}\n\n/*****************************************************************/\n/* g2_path */\nint g2_path(double theta,int bx,int by,double *g1mag,double *g1dir,double *g1scale,\n\t\t\t\t\tdouble *g2,double *g2scale,int g2signbit)\n{\nint \tx1, y1, x2, y2, dx, dy; \nint\t\toff1=0; \nint\t\toff2=0;  /* Offsets and indices for linear interp. */\nint \tend_of_path; /* Flag signalling when max (min) found or continuity broken */\nint \tsame_dir1, same_dir2; \t/* Flags indicating gradient direction compatibility */\nint \tg1len, g2halflen; \t\t/* Num of G2 pixels terminating current ray */\ndouble \ttan_theta, x, y; \t\t/* Real coords of points on path */\ndouble \tg1magval, g1dirval; \t/* Gradient at centre pixel */\ndouble \tg1mag1, g1dir1, g1mag2, g1dir2; /* Gradients at pixel pair on path */\ndouble \tk1, k2; \t\t\t\t/* Linear interp. coefficients */\ndouble \tg1val, g2val; \t\t\t/* Interpolated G1 and G2 responses on path */\nint \tg1scaleval; \t\t\t/* Scale of gradient at centre pixel */\nint \tg1scale1, g1scale2, g2scale1, g2scale2; /* Scales of pixels on path */\ndouble \tddir1, ddir2; \t\t\t/* gradient dir differences along grad line. */\ndouble \tg1_prev_val, acuity, length;\nint\t\tfound_interp_flag=0;\n\n/*#########################################*/\n/* Select the 1st 2 pixels flanking the ray \n\tfrom 0 in the theta direction. */\n/*#########################################*/\n\nif (theta > 0)\n  \tdy = -1;\nelse\n  \tdy = 1;\n\nif (fabs(theta) < KPI*0.5)\n  \tdx = 1;\nelse\n  \tdx = -1;\n \nx1 = dx;\ny1 = 0;\nx2 = 0;\ny2 = dy;\n\ntan_theta = tan(theta);\n\n/* If theta < 45deg -> (x2,y2) = (dx,dy), else (x1,y1) = (dx,dy) */\nif (fabs(tan_theta) < 1)\n  \tx2 = dx;\nelse\n  \ty1 = dy;\n\n/* End of block */\n/*##############*/\n\nacuity \t\t= 20.0;\ng2max2 \t\t= 0.0;\ng1magval \t= (float)*g1mag;\ng1dirval \t= (float)*g1dir;\ng1scaleval \t= (int)*g1scale;\ng2val \t\t= (float)*g2;\ng1_prev_val = g1magval;\n\nif (g2val != 0.0 && sign(g2val) == g2signbit) /* sig. G2 of right sign */\n{\n\tg2maxscale \t= (float) *g2scale;\n    g2max1 \t\t= g2val;\n    g2offsets[g2len++] = 0;\n    g2halflen \t= 1;\n\tif (!found_interp_flag)\n\t{\n\t\tG2fact1 = 1;\n\t\tG2fact2 = 0;\n\t\tXx1\t= 0;\n\t\tXx2\t= 0;\n\t\tYy1\t= 0;\n\t\tYy2\t= 0;\n\t\n\t\tzfirst\t= g2max1;\n\t\txfirst\t= 0;\n\t\tyfirst\t= 0;\n\t\tkeepoff1 = off1;\n\t\tkeepoff2 = off2;\n\t\tfound_interp_flag = 1;\n\t}\n}\nelse /* Initialize G2 variables */\n{\n      g2max1 \t\t= 0.0;\n      g2maxscale \t= 0.0;\n      g2halflen \t= 0;\n}\n\nend_of_path = 0;\nxend = yend = 0.0;\ng1len \t\t= g1len_to_max;\ng1max \t\t= 1;\n \n\n/*#####################################\n Scan for G2 max of the correct sign, \n   until length limit or interrupted \n#####################################*/\nwhile (!end_of_path && g1len < maxg1len) \n{\n    \n\tif ((g2val==0.0) && (g2max1 == 0))\n\t\tacuity_problem = 1;\n\n\t/* Check if flanking pixels go out of range of image */\n    if ((bx+x1<0) || (bx+x1>=cols) || (bx+x2<0) || (bx+x2>=cols) || (by+y1<0) || \n\t\t\t\t\t\t(by+y1>=rows) || (by+y2<0) || (by+y2>=rows))\n      \tend_of_path = 1;\n    else\n    {\n      \t/* Derive linear interpolation coefficients */\n      \tif (x1 == x2)\n        {\n        \ty = -x1 * tan_theta;\n            k1 = fabs(y-y2);\n            k2 = fabs(y-y1);\n        }\n      \telse\n        {\n            x = -y1 / tan_theta;\n            k1 = fabs(x-x2);\n            k2 = fabs(x-x1);\n        }\n      \n\t\t/*########################################################*/\n      \t/* Get G1 and G2 information for the two pixels on path */\n\t\t/*########################################################*/\n\n\t\t/**** cols and rows changed from cantata code here as Matlab processes columnwise ****/\n      \toff1 \t= x1 * rows + y1;\n      \toff2 \t= x2 * rows + y2;\n\n      \tx \t\t= k1 * x1 + k2 * x2;\n      \ty \t\t= k1 * y1 + k2 * y2;\n      \tlength \t= sqrt(x*x + y*y);\n\n\n      \tg1dir1 \t= *(g1dir+off1);\n      \tg1dir2 \t= *(g1dir+off2);\n      \tg1mag1 \t= *(g1mag+off1);\n      \tg1mag2 \t= *(g1mag+off2);\n\n      \tg1scale1 = (int)*(g1scale+off1);\n      \tg1scale2 = (int)*(g1scale+off2);\n      \tg2scale1 = (int)*(g2scale+off1);\n      \tg2scale2 = (int)*(g2scale+off2);\n\n      \t/* Interpolate the G1 estimate */\n      \tg1val = k1 * g1mag1 + k2 * g1mag2; \n      \n      \tif (g1val > g1magval)\n        \tg1max = 1;\n      \n      \t/* Pixel 1 compatible? */ \n      \tsame_dir1 = compare_dir(g1magval,g1dirval,(int)g1scaleval,g1mag1,g1dir1,(int)g1scale1); \n      \n      \t/* Pixel 2 compatible? */                      \n      \tsame_dir2 = compare_dir(g1magval,g1dirval,(int)g1scaleval,g1mag2,g1dir2,(int)g1scale2); \n                                                                                                  \n\t  \tddir1 = fabs(g1dir1-g1dirval);\n\t  \tddir2 = fabs(g1dir2-g1dirval);\n\n\t\t/* Interpolate the G2 estimate */\n      \tg2val = k1 * pow(cos(ddir1),2) * (*(g2+off1)) + k2 * pow(cos(ddir2),2) * (*(g2+off2)); \n            \n      \tif ((g1len==0) && (g2val<0.0))\n\t  \t\tzcross = 1;\n\n      \tif ((!(g2max1==0.0 && fabs(g2val)>g2thresh && sign(g2val) == g2signbit)   &&\n\t   \t\t\t!((same_dir1 && k1>k_thresh) || (same_dir2 && k2>k_thresh)))\n          \t\t|| (fabs(g2val) > g2thresh && (sign(g2val) != g2signbit) && zcross)\n          \t\t|| ((fabs(g2val) < g2thresh) && (length > acuity)))\n\t\t{\n        \tend_of_path = 1;\n      \t}\n      \telse if ((sign(g2val) == g2signbit) && (fabs(g2val) > fabs(g2max1)))\n        {\n\t\t\tg2max1 = g2val;\n\t\t   \t/* Derive scale of G2 response */\n           \tif (g2scale1 == 0)\n        \t\tg2maxscale = (float) g2scale2;\n           \telse if (g2scale2 == 0)\n          \t\tg2maxscale = (float) g2scale1;\n    \t\telse\n                g2maxscale = k1 * g2scale1 + k2 * g2scale2;\n\n\t\t\tg1len_to_max = g1len; \t\t/* Update g1 index */\n            g2len \t\t-= g2halflen; \t/* Erase previous G2 terminators */\n            g2halflen \t = 0;    \n\n\t\t\tif (k1 > k_thresh) /* If path lies near this pixel, label as G2 */\n            {\n            \tg2offsets[g2len++] = off1;\n\t\t\t\tg2halflen++;\n            }\n            if (k2 > k_thresh)\n            {\n\t\t\t\tg2offsets[g2len++] = off2;\n                g2halflen++;\n            }\n\n\t\t\txend = k1 * x1 + k2 * x2; /* Real coordinates of G2 terminator */\n            yend = k1 * y1 + k2 * y2;\n\n\t\t\tif (!found_interp_flag)\n\t\t\t{\n\t\t\t\tG2fact1\t= k1 * pow(cos(ddir1),2);\n\t\t\t\tG2fact2\t= k2 * pow(cos(ddir2),2);\n\t\t\t\tXx1\t= x1;\n\t\t\t\tXx2\t= x2;\n\t\t\t\tYy1\t= y1;\n\t\t\t\tYy2\t= y2;\n\t\n\t\t\t\tzfirst\t= g2max1;\n\t\t\t\txfirst\t= xend;\n\t\t\t\tyfirst\t= yend;\n\t\t\t\tkeepoff1 = off1;\n\t\t\t\tkeepoff2 = off2;\n\t\t\t\tfound_interp_flag = 1;\n\t\t\t}\n\n\t\t}\n      \telse if (((sign(g2val) != g2signbit) || g2val == 0.0) && g2max1 != 0.0) \n      \t{\n        \tend_of_path = 1; \n      \t}\n      \telse if ((sign(g2val) != g2signbit) && (fabs(g2val) > fabs(g2max2)))\n      \t{\n         \tg2max2 = g2val; /* Largest sig. G2 response of incorrect sign */\n      \t}                    \n    \n      \tg1_prev_val = g1val;\n\n\t}\n\n    if (!end_of_path)\n    {\n    \tif (same_dir1) /* 1st pixel in pair is compatible */\n        {\n       \t\tg1offsets[g1len++] = off1; /* Label as interior pixel */\n            if (g1scale1 > edgescale)  /* Update scale to max */\n            \tedgescale = g1scale1;\n\t\t}\n        if (same_dir2) /* 2nd pixel in pair is compatible */\n        {\n\t        g1offsets[g1len++] = off2; /* Label as interior pixel */\n    \t\tif (g1scale2 > edgescale)  /* Update scale to max */\n           \t\tedgescale = g1scale1;\n\t\t\t/**** Is this meant to be g1scale1 or g1scale2? ****/\n        }\n\n        /* Step to next intersection of ray with pixel grid */\n        if (x1 == x2)\n        {\n        \tx1 += dx;\n            if (abs(y2) < fabs(x1*tan_theta))\n            \ty1+= dy;\n            else\n                x2+= dx;\n      \t}\n        else\n        {\n        \ty2 += dy;\n            if (abs(y2) > fabs(x1*tan_theta))\n            \tx2+= dx;\n            else\n                y1+= dy;\n        }\n\t}\n\n\n\n\n}\n\nif (g2maxscale > edgescale) /* Update edgescale to max of G1 and G2 scales */\n\tedgescale = (int) g2maxscale;\nedgewidth += sqrt(xend*xend + yend*yend); /* Add distance from 0 to terminator */\n\nreturn (1);\n}      \n\n\n/******************************************************************************/\n/* compare_dir */\nint compare_dir(double g1mag1,double g1dir1,int g1scale1,double g1mag2,double g1dir2,int g1scale2)\n{\ndouble a1, a2; /* Pixelation uncertainty at respective scales */\ndouble ddir, tolerance; /* actual and tolerated gradient direction discrepancy */\nstatic double g1noise_norms[6] = {0.765,0.199,0.0499,0.0125,0.00312,0.00078};\n\nif (g1dir2 == 4) /* Gradient not significant */\n    return(0);\n \na1 \t= pixerr[g1scale1-1];\na2 \t= pixerr[g1scale2-1];\n\nddir = fabs(g1dir1 - g1dir2);\nif (ddir > KPI)\n  ddir = 2*KPI - ddir;\n \n/* tolerance is sum of half-ranges due to pixelation uncertainty \n\t\tplus the range due to sensor noise */\ntolerance = a1 + a2 + 5.2 * noise * sqrt(pow(g1noise_norms[g1scale1-1]/g1mag1,2.0)\n                                   + pow(g1noise_norms[g1scale2-1]/g1mag2,2.0));\n                                                                   \nif (ddir <= tolerance)\n  \treturn(1);\n\nreturn(0);\n}\n\n\n/***************************************************************************/\n/* signbit */\nint sign(double r)\n{\n\tif (r<0)\n    \treturn (1);\n  \telse\n    \treturn (0);\n}\n\n\n\n/******************************************************************************/\nvoid mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )\n{\n\ndouble *img;\ndouble *g1mag;\ndouble *g1dir; \ndouble *g1scale;\ndouble *g2; \ndouble *g2scale;\ndouble *g2all;\nint x_dim, y_dim;\ndouble sensor_noise;\nint maxwidth, maxscale; \nint sublocflag; \ndouble dmwidth,mxscale;\ndouble subflag;\ndouble *x;\ndouble *x_blur;\ndouble *x_dark;\ndouble *x_light;\ndouble *x_x1zero;\ndouble *x_y1zero;\ndouble *x_x2zero;\ndouble *x_y2zero;\n\nint warnings = 1;\nmxArray *arg;\ndouble *mxMat;\n\n/* copy start */\n\n\n\tif (nrhs < 11 ) \n\t\tmexErrMsgTxt(\"requres  at least 11 args.\");\n \n  \t/* ARG 1: IMAGE  */\n  \targ = prhs[0];\n  \n  \tif notDblMtx(arg) mexErrMsgTxt(\"IMAGE arg must be a real non-sparse matrix.\");\n  \timg = mxGetPr(arg);\n  \tx_dim = (int) mxGetM(arg); /* X is inner index! */\n  \ty_dim = (int) mxGetN(arg);\n  \trows = x_dim;\n  \tcols = y_dim;\n  \n  \t/* ARG 2: g1mag */\n  \targ = prhs[1];\n  \tif notDblMtx(arg) mexErrMsgTxt(\"g1mag arg must be a real non-sparse matrix.\");\n  \tg1mag = mxGetPr(arg);\n  \n\n  \t/* ARG 3: g1dir */\n  \targ = prhs[2];\n  \tif notDblMtx(arg) mexErrMsgTxt(\"g1dir arg must be a real matrix\");\n  \tg1dir = mxGetPr(arg);\n\n  \t/* ARG 4: g1scale */\n  \targ = prhs[3];\n  \tif (notDblMtx(arg)) mexErrMsgTxt(\" g1scale arg must be a int matrix\");\n  \tg1scale = mxGetPr(arg);\n  \n  \t/* ARG 5: g2 */\n  \targ = prhs[4];\n  \tif notDblMtx(arg) mexErrMsgTxt(\"g2 arg must be a real matrix\");\n  \tg2 = mxGetPr(arg);\n  \n   \t/* ARG 6: g2scale */\n  \targ = prhs[5];\n  \tif (notDblMtx(arg)) mexErrMsgTxt(\"g2scale arg must be a int matrix\");\n  \tg2scale = mxGetPr(arg);\n  \n   \t/* ARG 7: g2all */\n  \targ = prhs[6];\n  \tif (notDblMtx(arg)) mexErrMsgTxt(\"g2all arg must be a int matrix\");\n  \tg2all = mxGetPr(arg);\n  \n   \t/* ARG 8: sensor_noise */\n  \targ = prhs[7];\n  \tif notDblMtx(arg) mexErrMsgTxt(\"sensor_noise arg must be a real matrix\");\n  \tif (mxGetM(arg)*mxGetN(arg) != 1)\n      \tmexErrMsgTxt(\"sensor_noise arg must be a scalar\");\n  \tmxMat = mxGetPr(arg);\n  \tsensor_noise = *mxMat;\n  \t\n  \t/* ARG 9: maxwidth */\n  \targ = prhs[8];\n  \tif (notDblMtx(arg)) mexErrMsgTxt(\"maxwidth arg must be a int matrix\");\n  \tif (mxGetM(arg)*mxGetN(arg) != 1)\n      \tmexErrMsgTxt(\"maxwidth arg must be a scalar\");\n  \tmxMat = mxGetPr(arg);\n  \tdmwidth = *mxMat;\n  \n  \t/* ARG 10: subpixel */\n  \targ = prhs[9];\n  \tif (notDblMtx(arg)) mexErrMsgTxt(\"subpixelflag arg must be a int matrix\");\n  \tif (mxGetM(arg)*mxGetN(arg) != 1)\n      \tmexErrMsgTxt(\"subpixelflag arg must be a scalar\");\n  \tmxMat = mxGetPr(arg);\n  \tsubflag = *mxMat;\n  \n  \t/* ARG 11: maxscale */\n  \targ = prhs[10];\n  \tif (notDblMtx(arg)) mexErrMsgTxt(\"maxscale arg must be a int matrix\");\n  \tif (mxGetM(arg)*mxGetN(arg) != 1)\n      \tmexErrMsgTxt(\"maxscale arg must be a scalar\");\n  \tmxMat = mxGetPr(arg);\n  \tmxscale = *mxMat;\n  \n  \t/* ARG 6: WARNINGS */\n  \tif (nrhs>11)\n    {\n    \targ = prhs[4];\n    \tif notDblMtx(arg) mexErrMsgTxt(\"WARINGS arg must be a real scalar.\");\n    \tif (mxGetM(arg) * mxGetN(arg) != 1)\n      \tmexErrMsgTxt(\"WARNINGS arg must be a real scalar.\");\n    \tmxMat = mxGetPr(arg);\n    \twarnings = (int) *mxMat;\n    }\n\n  \tplhs[0] = mxCreateDoubleMatrix(x_dim,y_dim,mxREAL);\n  \tif (plhs[0] == NULL) mexErrMsgTxt(\"Cannot allocate result matrix\");\n  \tx = mxGetPr(plhs[0]); \n  \n  \tplhs[1] = mxCreateDoubleMatrix(x_dim,y_dim,mxREAL);\n  \tif (plhs[1] == NULL) mexErrMsgTxt(\"Cannot allocate result matrix\");\n  \tx_blur = mxGetPr(plhs[1]); \n  \n  \tplhs[2] = mxCreateDoubleMatrix(x_dim,y_dim,mxREAL);\n  \tif (plhs[2] == NULL) mexErrMsgTxt(\"Cannot allocate result matrix\");\n  \tx_dark = mxGetPr(plhs[2]);\n  \n  \tplhs[3] = mxCreateDoubleMatrix(x_dim,y_dim,mxREAL);\n  \tif (plhs[3] == NULL) mexErrMsgTxt(\"Cannot allocate result matrix\");\n  \tx_light = mxGetPr(plhs[3]);\n  \n  \tplhs[4] = mxCreateDoubleMatrix(x_dim,y_dim,mxREAL);\n  \tif (plhs[4] == NULL) mexErrMsgTxt(\"Cannot allocate result matrix\");\n  \tx_x1zero = mxGetPr(plhs[4]);\n  \n  \tplhs[5] = mxCreateDoubleMatrix(x_dim,y_dim,mxREAL);\n  \tif (plhs[5] == NULL) mexErrMsgTxt(\"Cannot allocate result matrix\");\n  \tx_y1zero = mxGetPr(plhs[5]);\n  \n  \tplhs[6] = mxCreateDoubleMatrix(x_dim,y_dim,mxREAL);\n  \tif (plhs[6] == NULL) mexErrMsgTxt(\"Cannot allocate result matrix\");\n  \tx_x2zero = mxGetPr(plhs[6]);\n  \n  \tplhs[7] = mxCreateDoubleMatrix(x_dim,y_dim,mxREAL);\n  \tif (plhs[7] == NULL) mexErrMsgTxt(\"Cannot allocate result matrix\");\n  \tx_y2zero = mxGetPr(plhs[7]);\n  \n/* copy ends */\n\nmaxwidth = (int)dmwidth;\nmaxscale = (int)mxscale;\nsublocflag = (int)subflag;\n\nfind_edges(img,g1mag,g1dir,g1scale,g2,g2scale,g2all,sensor_noise,maxwidth,sublocflag,\n\t\t\tmaxscale,x,x_blur,x_dark,x_light,x_x1zero,x_y1zero,x_x2zero,x_y2zero);\n}\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/g1scale.m",
    "content": "%###########################################################################\n%\n% g1scale(g1mag1,g1dir1,g1mag2,g1dir2,g1scale1,scale,noise,b_est)\n%\n% Purpose: Augments multi-scale Gaussian Gradient maps with significant \n%\t\testimates at a new scale. Pixels for which the magnitude \n%\t\tof the Gaussian gradient is under threshold in the multi-scale \n%\t\tmap (gradient magnitude input 1) but over threshold \n% \t\tat the new scale (gradient magnitude input 2) are updated \n%\t\twith the gradient magnitude, direction and scale value of \n%\t\tthe new scale.\n%\n% Input:  g1mag1    - Multi-scale Gaussian gradient magnitude image\n%         g1dir1    - Multi-scale Gaussian gradient direction image\n%         g1mag2    - Gaussian gradient magnitude image at new scale\n%         g1dir2    - Gaussian gradient direction image at new scale\n%         g1scale1  - Multi-scale scale map\n%         g1scale2  - Scale of new gradient estimates\n%         noise     - Estimated sensor noise\n%         b_est     - Derivatives near boundary estimated by reflecting\n%                           intensity function.\n% Output: g1mag1    - Integrated multi-scale gradient magnitude map\n%         g1dir1    - Integrated multi-scale gradient direction map\n%         g1scale1  - Integrated multi-scale scale map\n%\n%###########################################################################\n\nfunction[g1mag1,g1dir1,g1sc1] = g1scale(g1mag1,g1dir1,g1mag2,g1dir2,g1sc1,...\n                                        scale,noise,b_est)\n\n\nnorms12\t= [0.765, 0.199, 0.0499, 0.0125, 0.00312, 0.00078];\nthresh \t= 5.6 * noise * norms12(scale);\n\nif ((scale<3) | b_est)\n    krad\t= 1;\nelse\n    krad \t= ceil(4.6*sqrt(pow2(2*(scale-2))-1));\nend\n \n\nif (scale == 1)\n\n    g1mag1 \t= zeros(size(g1mag2));\n    g1dir1 \t= 4 * ones(size(g1mag2));\n    g1sc1 \t= zeros(size(g1mag2));\n\n    f \t\t\t= find(g1mag2 >= thresh);\n    g1mag1(f) \t= g1mag2(f);\n    g1dir1(f) \t= g1dir2(f);\n    g1sc1(f) \t= scale;\n\nelse\n    sz = size(g1mag2);\n\n\t[i,j] \t= meshgrid(krad+1:1:sz(1)-krad,krad+1:1:sz(2)-krad);\n    itrans  = i';\n    jtrans  = j';\n    if ~(isempty(itrans) | isempty(jtrans))\n    \tK\t\t= sub2ind(size(g1mag2),itrans(:),jtrans(:));\n\n\t    smat\t= g1sc1(krad+1:end-krad,krad+1:end-krad);\n\t    mmat\t= g1mag2(krad+1:end-krad,krad+1:end-krad);\n\n  \t    f \t\t= find((smat==0) & (mmat>=thresh));\n\n        g1mag1(K(f)) \t= g1mag2(K(f));\n        g1dir1(K(f)) \t= g1dir2(K(f));\n        g1sc1(K(f)) \t= scale;\n    end;\nend;\n\nreturn;\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/g1steer.m",
    "content": "\n%######################################################################\n% \n% g1steer - Computes magnitude and direction of the gradient  of the \n% luminance function based on x and y basis functions for 1st Gaussian \n% derivative.\n% \n%       \n%        Input:  g1x - X basis for Gaussian gradient\n%                g1y - Y basis for Gaussian gradient\n%        Output: g1mag - Gradient Magnitude Estimate\n%                g1dir - Gradient Direction Estimate\n%\n%######################################################################\n\n\nfunction[g1mag,g1dir] = g1steer(g1x,g1y)\n\ng1mag\t= zeros(size(g1x));\ng1dir\t= 4 * ones(size(g1x));\n\nf \t= find((g1x ~= 0) & (g1y ~= 0));\n\ng1dir(f) = atan2(-g1y(f),g1x(f));\ng1mag(f) = sqrt(g1y(f).^2 + g1x(f).^2);\n\nreturn;\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/g2scale.m",
    "content": "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%\n% g2scale - Augments multi-scale Gaussian directional 2nd derivative maps\n% with significant estimates at a new scale. Pixels for which the magnitude\n% of the 2nd derivative is under threshold in the multi-scale map \n% (2nd derivative input 1) but over threshold at the new scale (2nd derivative\n% input 2) are updated with the 2nd derivative magnitude and scale value of the\n% new scale.\n%\n% Input:  g2mag1   - Multi-scale Gaussian directional 2nd derivative image\n%         g2mag2   - Gaussian directional 2nd derivative image at new scale\n%         g1scale1 - Multi-scale scale map\n%         noise    - Estimated sensor noise\n%         b_est    - Estimate derivatives near boundaries?\n%\n% Output: g2mag   - Integrated multi-scale directional 2nd derivative map\n%         g2scale - Integrated multi-scale 2nd derivative scale map\n%\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\nfunction[g2mag1,g2sc1] = g2scale(g2mag1,g2mag2,g2sc1,scale,noise,b_est)\n\nnorms12 = [1.873 0.2443 0.0306 0.003817 0.00047715 0.0000596 0.000007455];\nthresh \t= 5.2 * noise * norms12(scale);\n\nif ((scale<3) | b_est)\n    krad = 1;\nelse\n    krad = ceil(4.6*sqrt(pow2(2*(scale-2))-1.0));\nend;\n\nif (scale == 1)\n\n\tg2mag1\t= zeros(size(g2mag2));\n\tg2sc1\t= zeros(size(g2mag2));\n\n    f \t\t\t= find(abs(g2mag2) >= thresh);\n    g2sc1(f) \t= scale;\n    g2mag1(f) \t= g2mag2(f);\n\nelse\n\n   \tsz = size(g2mag1); \n\t\n\t[i,j] \t= meshgrid(krad+1:sz(1)-krad,krad+1:sz(2)-krad);\n    itrans  = i';\n    jtrans  = j';\n    if ~(isempty(itrans) | isempty(jtrans))\n\n\t\tK\t\t= sub2ind(size(g2mag1),itrans(:),jtrans(:));\n\t\n       \tmagmat1 = g2mag1(krad+1:end-krad,krad+1:end-krad);\n       \tmagmat2 = g2mag2(krad+1:end-krad,krad+1:end-krad);\n       \tf \t\t= find(abs(magmat1) == 0 & abs(magmat2) >= thresh);\n\t\n       \tg2mag1(K(f)) = g2mag2(K(f));\n       \tg2sc1(K(f))  = scale;\n    end;\nend;\n\nreturn;\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/g2steer.m",
    "content": "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%\n% g2steer - Computes the second Gaussian derivative of the luminance function\n% in specified direction ( normally the Gradient direction). The three input\n% basis function are used to steer the derivative. The units of the direction\n% map are radians and the range is between -pi and pi. A value of -4 indicate\n% that no direction was measurable. The 2nd derivative is taken only for valid\n% directions.\n%\n% Input:  g2x   - Response map for 1st G2 basis function\n%         g2y   - Response map for 2nd G2 basis function\n%         g2xy  - Response map for 3rd G2 basis function\n%         g1dir - Luminance gradient direction map\n%\n% Output: g2 - Second derivative response map\n%\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\nfunction[g2] = g2steer(g2x,g2y,g2xy,g1dir)\n\ng2\t    = zeros(size(g2x));\n\nf \t\t= find((g1dir ~= 4.0) & (g2x ~= 0) & (g2xy ~= 0) & (g2y ~= 0));\ncdir \t= cos(2*g1dir);\nsdir    = sin(2*g1dir);\n\ng2(f) \t= 0.5 * (1 + cdir(f)) .* g2x(f) - sdir(f) .* g2xy(f) + ...\n          0.5 * (1 - cdir(f)) .* g2y(f);\n\nreturn;\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/gauss.m",
    "content": "% gauss.m: Calculates Gaussian pdf values.\n\nfunction[y] = gauss(x,std)\n\ny = exp(-x.^2/(2*std^2)) / (std*sqrt(2*pi));\n\nreturn;\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/gradient.m",
    "content": "%############################################################\n%\n% gradient(maxscale,noise,gauss_a,conv_type,filtpath)\n% Computes non-zero gradient in the luminance function by \n% \n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\nfunction[g1mag,g1dir,g1sc] = gradient(maxscale,noise,gauss_a,...\n\t\t\t\t\t\t\t\t        conv_type)\n\nfm2 \t= '.ascii';\n\n%############\n% Initialise:\n%############\ng1mag\t= 0;\ng1dir \t= 0;\ng1sc\t= 0;\n\nfor scale = 1:1:maxscale\n\n    % set scale values for filters \n    if (scale == 1)\n        g1scaleval = '05';\n    else\n        g1scaleval = '1';\n    end;\n    \n    mimg\t= gauss_a(:,:,scale);\n\n\t%#####################################################\n    % Compute response of first derivative Gaussian filter \n\t%\tto the blurred image in an arbitrary direction:\n\t%#####################################################\n    %kern1 \t= load(strcat(filtpath,'/gy',g1scaleval,fm2));\n    kern1 \t= load(strcat('gy',g1scaleval,fm2));\n    rc1 \t= convolve_2(mimg,kern1,conv_type);\n    %kern2 \t= load(strcat(filtpath,'/g1x',g1scaleval,fm2));\n    kern2 \t= load(strcat('g1x',g1scaleval,fm2));\n    rc2 \t= convolve_2(rc1,kern2,conv_type); % x basis input\n    \n    %kern3 \t= load(strcat(filtpath,'/gx',g1scaleval,fm2));\n    kern3 \t= load(strcat('gx',g1scaleval,fm2));\n    rc3 \t= convolve_2(mimg,kern3,conv_type);\n    %kern4 \t= load(strcat(filtpath,'/g1y',g1scaleval,fm2));\n    kern4 \t= load(strcat('g1y',g1scaleval,fm2));\n    rc4 \t= convolve_2(rc3,kern4,conv_type); % y basis input\n      \n\t%###################################################\n    % Calculate magnitude and direction of the gradient:\n\t%###################################################\n    [m2,d2] = g1steer(rc2,rc4);\n    \n    omag = g1mag;\n    odir = g1dir;\n    osc = g1sc;\n    \n\t%############################################\n    % Augment multi-scale Gaussian Gradient maps:\n\t%############################################\n    [g1mag,g1dir,g1sc] = g1scale(g1mag,g1dir,m2,d2,g1sc,scale,noise,0); \n        \nend;\n\nreturn;\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/main_edge.m",
    "content": "%############################################################\n%\n% main_edge.m:  Main function called from edge GUI interface.\n%\n%############################################################\n\nfunction[OutputData] = main_edge(img,scale,noise,edgew,...\n                        conss,congrd,subpixelflag)\n\n%#############\n% Input Image:\n%#############\nif (size(img,3)~=1)\n    img = rgb2gray(img);\nend;\nimg=double(img);\n\n\n%########################\n% Compose blurred images:\n%########################\ngauss_imgs  = scalespace(img,scale,conss);\n\n%########################\n% Calculate gradient map:\n%########################\n[g1_mag,g1_dir,g1_sc] = gradient(scale,noise,gauss_imgs,congrd);\n\n%##############################\n% Calculate 2nd derivative map:\n%##############################\n[g2_mag,g2_sc,g2_all] = derivative2nd(g1_dir,scale,noise,gauss_imgs,congrd);\n\n\n% save input.mat img g1_mag g1_dir g1_sc g2_mag g2_sc g2_all noise edgew subpixelflag scale\n%inparTest = checkInParam(img,g1_mag,g1_dir,g1_sc,g2_mag,g2_sc,g2_all,noise,...\n%                           edgew,subpixelflag,scale);\n%if inparTest > 0\n%   display('stop');\n%end\n%####################\n% Calculate edge map:\n%####################\nclear find_edges\n[edge_map,blur_map,dark_map,light_map,xzero1_map,yzero1_map,xzero2_map,yzero2_map] = ...\n        find_edges(img,g1_mag,g1_dir,g1_sc,g2_mag,g2_sc,g2_all,noise,...\n                            edgew,subpixelflag,scale);\nclear find_edges\n                        \n% outparTest = checkOutParam(edge_map,blur_map,dark_map,light_map,xzero1_map,yzero1_map,xzero2_map,yzero2_map);                        \n% if outparTest > 0\n%    display('stop');\n% end\n\n%save output.mat edge_map blur_map dark_map light_map xzero1_map yzero1_map xzero2_map yzero2_map                         \n% Branka's code leaves dark and light as double which need rounding:\ndark_map    = round(dark_map);\nlight_map    = round(light_map);\n    \n\n%#######################\n% Output data in struct:\n%#######################\n% OutputData = struct('edge',edge_map,'dark_map',dark_map,...\n%                     'light_map',light_map,'blur_map',blur_map,...\n%                     'g1mag',g1_mag,'g1dir',g1_dir,'g1scale',g1_sc,...\n%                     'g2mag',g2_mag,'g2scale',g2_sc,...\n%                     'x1zero',xzero1_map,'y1zero',yzero1_map,...\n%                     'x2zero',xzero2_map,'y2zero',yzero2_map,...\n%                     'noise',noise);\n                \nOutputData = struct('edge',edge_map,'blur',blur_map,...\n                    'dark',dark_map,'light',light_map,...\n                    'g1mag',g1_mag,'g1dir',g1_dir,'g1scale',g1_sc,...\n                    'g2mag',g2_mag,'g2scale',g2_sc,'g2_all',g2_all,...\n                    'noise',noise,'xzero',xzero1_map,'yzero',yzero1_map);\n                \n                \n                \nreturn;\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/mat2hough_scale.m",
    "content": "function [ r, th] = mat2hough_scale(m, n, r_max, r_res, th_res)\n% MAT2HOUGH converts matrix coordinates to Hough map values\n%\n%   Inputs:\n%               r_max:      Maximum value r can take\n%               m:          vertical matrix index\n%               n:          horizontal matrix index\n%\n%   Output:\n%               r:          Hough domain r value equivalent to n\n%               th:         Hough domain \\theta value equivalent to m\n%\n%   Author:\n%               Ron Tal\n%\n%   Date:\n%               February 16, 2009\n%\n%   Description:\n%               This function converts the coordinates of a matlab matrix\n%               representing a Hough map, to the equivalent Hough domain\n%               values\n%\n    th = round2frac((m - 1) * th_res, th_res);\n    r = round2frac((n - 1) * r_res - r_max, r_res);\nend"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/plot_edgelmap.m",
    "content": "\n% Function to plot gradient direction vectors at both pixel\n%   and subpixel locations:\n\nfunction[] = plot_edgelmap(img,edgemap,xzeromap,yzeromap,g1dir,...\n                            newarrcol,leg1,leg2,imtitle);\n\n[M,N]   = size(edgemap);\n\n[I,J]   = find(edgemap==255);\nK       = find(edgemap==255);\n\nX       = J;\nY       = I;\n\n% Set arrowlength, then define: \n%       (Uarrow,Varrow) = arrow lengths in (x,y) directions\n%       (Xarrow,Yarrow) = arrow tail points \narrowlen = 1;\nGraddir = g1dir(K) + pi/2;\nUarrow  = arrowlen * cos(Graddir);\nVarrow  = -arrowlen * sin(Graddir);\n\nXtp     = X - 0.5*Uarrow;\nYtp     = Y - 0.5*Varrow;\n\nXarrow  = xzeromap(K) - 0.5*Uarrow;\nYarrow  = yzeromap(K) - 0.5*Varrow;\n\nfigure; \nimagesc(img);\naxis image;\ncolormap(gray);\nhold on;\np1  = plot(0,0);\nset(p1,'Color',[0 0 1]);\nset(p1,'Visible','off');\np2  = plot(0,0);\nset(p2,'Color',newarrcol);\nset(p2,'Visible','off');\n%q1 = quiver(Xtp,Ytp,Uarrow,Varrow,0); JE Jul08 - suppress pixel-localized\n%edges\nq2 = quiver(Xarrow,Yarrow,Uarrow,Varrow,0); %\n%set(q1,'Color',[0 0 1]);\nset(q2,'Color',newarrcol);\nL = legend([p1,p2],leg1,leg2,-1);\nset(L,'Fontsize',8);\ntwords = ['Edgels for Image ',imtitle];\ntt  = title(twords);\nset(tt,'Interpreter','none');\nhold off;\n\nreturn;\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/round2frac.m",
    "content": "%% round2frac() Rounds the input data to the nearest fraction\n%\n%   Description: \n%\n%       Takes 'data' a matrix of floats and rounds it to the nearest 'frac'\n%\n%   Author:\n%\n%       Ron Tal \n%\n%   Date Created:\n%\n%       November 4, 2008\n%\nfunction [round_data] = round2frac(data, frac)\n%     if frac > 1, error('Fraction must be smaller than 1'); end\n    round_data = data.*(1/frac);\n    round_data = round(round_data);\n    round_data = round_data.*frac;\nend"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/run_elderEdge.m",
    "content": "clc\nclear\nclose all\nfor i = 1:9\n    clear mex\n   edgeStruct = elderEdge();\n   \n   figure;\n   imshow(edgeStruct.edge_map);\n   i\n   length(find(edgeStruct.edge_map))  \n   diffs{i} = edgeStruct.edge_map;\nend"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/scalespace.m",
    "content": "%################################################################\n%\n% r = scalescape(mimg,maxscale,conv_type)\n%\n% Create a series of Gaussian blurred images according to a \n% given maximum scale.\n%\n% Input:    mimg:       image for convolution w/ Gaussian filter\n%           maxscale:   maximum scale value\n%           conv_type:  convolution type flag\n%\n% Output:   blurred_imgs:   maxscale blurred images\n%\n%################################################################\n\nfunction[blurred_imgs] = scalespace(mimg,maxscale,conv_type)\n\nfor scale = 1:1:maxscale\n\t\n\tif (scale < 3)\n        % Image is unblurred:       \n\t\tblurred_imgs(:,:,scale) = mimg;\n         \n\telse\n\t    % Set values for generating Gaussian filter at given scale:\n        [stdd,sizz] = setvalues(scale);\n\t    kern        = d2gauss(sizz,stdd,1,1,0,1/(stdd*sqrt(2*pi)));\t\n\n        c1mimg  = convolve_2(mimg,kern,conv_type);\n\t    cres    = convolve_2(c1mimg,rot90(kern,3),conv_type);\n    \n        blurred_imgs(:,:,scale) = cres;\n\t\n\tend;\n\t\nend;\n\t\nreturn;\n\n% Results differ to cantata output for scale >= 3 in the 4th d.p."
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/code/setvalues.m",
    "content": "%##########################################################################\n%\n% [stdd,sizz] = setvalues(scale)\n%\n% Set values for generating 2d Gaussian filter according to \n% input scale.\n%\n% Input:    scale\n% \n% Output:   stdd:       std dev'n along width (along height assumed to be 1)\n%           size:       width of output = #columns (height assumed to be 1)\n%\n%##########################################################################\n\nfunction[stdd,sizz] = setvalues(scale);\n\nif (scale < 3)\n    stdd    = 1;\nelse\n    stdd    = sqrt((2^(scale-2))^2 - 1);\nend;\n\nsizz    = 2 * ceil(4.6 * stdd) + 1;\n\nreturn;"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/filters/g1x05.ascii",
    "content": "0.750938 0 -0.750938 \n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/filters/g1x1.ascii",
    "content": "0.000535321 0.0132955 0.107982 0.241971 -0 -0.241971 -0.107982 -0.0132955 -0.000535321 \n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/filters/g1y05.ascii",
    "content": "0.750938 \n0 \n-0.750938 \n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/filters/g1y1.ascii",
    "content": "0.000535321 \n0.0132955 \n0.107982 \n0.241971 \n-0 \n-0.241971 \n-0.107982 \n-0.0132955 \n-0.000535321 \n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/filters/g2x05.ascii",
    "content": "0.0594001 1.02157 -2.16194 1.02157 0.0594001 \n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/filters/g2x1.ascii",
    "content": "0.00200744 0.0354546 0.161972 0 -0.39894 0 0.161972 0.0354546 0.00200744 \n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/filters/g2y05.ascii",
    "content": "0.0594002 \n1.02157 \n-2.16194 \n1.02157 \n0.0594002 \n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/filters/g2y1.ascii",
    "content": "0.00200744 \n0.0354546 \n0.161972 \n0 \n-0.39894 \n0 \n0.161972 \n0.0354546 \n0.00200744 \n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/filters/gx05.ascii",
    "content": "0.157727 0.684552 0.157727 \n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/filters/gx1.ascii",
    "content": "0.00443185 0.053991 0.241971 0.398942 0.241971 0.053991 0.00443185 \n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/filters/gy05.ascii",
    "content": "0.157726 \n0.68455 \n0.157726 \n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/ElderZuckerEdgeDetector/filters/gy1.ascii",
    "content": "0.00443185 \n0.053991 \n0.241971 \n0.398942 \n0.241971 \n0.053991 \n0.00443185 \n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/computeKernel.m",
    "content": "function [kern,ind]=computeKernel(e,r_max,SIGMA_X, SIGMA_TH, r_res, th_res)\n%computing the kernel for the probabilistic hough tranform\n        r_th = e;\n        C =[SIGMA_X^2 + (r_th^2) * (SIGMA_TH^2), r_th * (SIGMA_TH^2); r_th * (SIGMA_TH^2), SIGMA_TH^2];\n\n        C_inv = inv(C);\n        C_det = det(C);\n        N = 1 / (2*pi * sqrt(C_det));\n        R = -round2frac(3 *sqrt(C(1,1)), r_res):r_res:round2frac(3 *sqrt(C(1,1)), r_res);\n        TH = -round2frac(3 * SIGMA_TH, th_res):th_res:round2frac(3 * SIGMA_TH, th_res);\n        c=C_inv(1,1);\n        d=C_inv(1,2);\n        g=C_inv(2,1);\n        f=C_inv(2,2);\n       [a,b]=meshgrid(R,TH);\n        vals=N * exp(-0.5*((a*c+b*g).*a+(a*d+b*f).*b));\n        [r, c] = find(vals > 0.05*max(vals(:)));\n        m_c = min(c) - 1;\n        m_r = min(r) - 1;\n        linearInd = sub2ind([length(TH),length(R)], r, c);\n        kern=[c- m_c,r- m_r, vals(linearInd)];\n        ind = e + r_max + 1;\n        \nend"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/determine_hough_lines_kernel_vote_remove.m",
    "content": "function [ lines, edgeStruct ] = determine_hough_lines_kernel_vote_remove( im, pp, kernels, kernels_flip, num, kernel_params, r_res, th_res, sig_bound, frac,scale_factor)\n\n                                                                   \n%edge detection\nedgeStruct = main_edge(im,5,1,10,1,0,1);\n\n%find the pixel location that has edge value\nedge_index = find(edgeStruct.edge);\nedge_img_locations = [edgeStruct.xzero(edge_index),edgeStruct.yzero(edge_index)];\nedge_gradients = edgeStruct.g1dir(edge_index);\n%create a hough map\n\nmap = mexVoteEdges_v3_scale(edge_img_locations, edge_gradients, kernels, kernels_flip, r_res,th_res, pp, kernel_params,scale_factor);\n\n%iteratively extract lines from hough map\n[P] = hough_find_peaks_vote_removal(map, num, r_res, th_res, edgeStruct, kernels, kernels_flip, pp, kernel_params, 0.0917, 0.3934, sig_bound, frac, scale_factor);\n%the lines consist of [rho, theta, strength]\nlines = P(:, 1:3);\nend\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/get_all_segments_assoc_edgeremoval.m",
    "content": "function [ begin_points, end_points,ls_likelihoods] = get_all_segments_assoc_edgeremoval( line_data, edgeStruct, pp, LIKE_MODEL,scale_factor)\n\nbegin_points = [];\nend_points = [];\nls_likelihoods = [];\nfor i = 1:size(line_data, 1)\n    [~, begin_pointsi, end_pointsi, ~,~, ~, ~, ~, ~, likelihoods, edgeMap] = get_line_segment_DP_edgeremoval( edgeStruct, line_data(i,1), line_data(i,2), pp, LIKE_MODEL, scale_factor); \n    for j = 1:size(likelihoods,2)\n            begin_points = [begin_points; begin_pointsi(j,:)];\n            end_points = [end_points; end_pointsi(j,:)]; \n            ls_likelihoods = [ls_likelihoods; likelihoods(j)];\n    end\n    edgeStruct.edge = edgeMap;\nend\n\nend\n\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/get_line_segment_DP_edgeremoval.m",
    "content": "function [final_labels,  begin_points, end_points, begin_point, end_point, posterior, lslength, logratioposterior, ls_probDiff, likelihoods, edgemap] = get_line_segment_DP_edgeremoval( edgeStruct, rho, theta, pp, probStruct, scale_factor)\n% Description: Line segment detector that removes the edges associated with\n% each detected line segment.\n\nfinal_labels = [];\nbegin_points = []; \nend_points = [];\nbegin_point = []; \nend_point = [];\nposterior = [];\nlslength = [];\nlogratioposterior = [];\nls_probDiff = [];\n\nedgemap = edgeStruct.edge;\nedge_gradients = edgeStruct.g1dir;\nexist_edge_on = probStruct.exist_edge_on;\nexist_edge_off = probStruct.exist_edge_off;\nang_dev_on = probStruct.ang_dev_on_hist;\nang_dev_off = probStruct.ang_dev_off_hist;\nnexist_edge_on = probStruct.nexist_edge_on;\nnexist_edge_off = probStruct.nexist_edge_off;\n\n%the transition probability for the line segments\n%it is generated from sampling in the YorkUDB dataset\nprob_leave_on = 0.0051/scale_factor;\nprob_stay_on =1-prob_leave_on;\nprob_leave_off = 0.0014/scale_factor;\nprob_stay_off = 1-prob_leave_off;\nprob_on = 0.247; \nprob_off = 0.753;\n[m, n] = size(edgeStruct.edge);\n \n% GET EQUATION OF THE LINE\nX_1 = rho * cos(theta) - 2000*cos(theta+pi/2) + pp(1);\nX_2 = rho * cos(theta) + 2000*cos(theta+pi/2) + pp(1);\nY_1 = rho * sin(theta) - 2000*sin(theta+pi/2) + pp(2);\nY_2 = rho * sin(theta) + 2000*sin(theta+pi/2) + pp(2);\nM = (Y_2-Y_1)/(X_2-X_1 + 1e-7);\nb = Y_2 - X_2*M;\n\n% GET BOUNDARIES OF THE LINE IN IMAGE FRAME\np1 = [1, M + b];\np2 = [n, M*n + b];\np3 = [(1-b)/M,1];\np4 = [(m-b)/M, m];\n\npoints = [p1;p2;p3;p4];\nX = points(:,1);\nY = points(:,2);\n        \nX_valid = (X <= n).*(X >= 1);\nY_valid = (Y <= m).*(Y >= 1);\np_valid = X_valid.*Y_valid;\npoints_valid = points(p_valid>0, :); %changed find to logical index\nX_l = points_valid(:,1)';\nY_l = points_valid(:,2)';\nif isempty(X_l) || isempty(Y_l)\n    return;\nend\n%get the line points\nindexXY=sampleLine(rho,theta,n,m,pp);\nyy=ceil(indexXY(:,2)+pp(2));\nxx=ceil(indexXY(:,1)+pp(1));\nindex = sub2ind([m,n],yy,xx);\n\np1 = [X_l(1), Y_l(1)];\np2 = [X_l(2), Y_l(2)];\n% FIND POINTS CONSIDERED\nnode_idx=index;\ny_h = edgemap(node_idx);\n% y_h(y_h > 0) = 1;\n% FIND ORIENTATION DIF AND DIST:\nTH = pi-theta;\nif TH<0, TH=TH+pi;\nelseif TH>pi, TH=TH-pi;\nend\n\nedge_gradientsmap=edge_gradients(node_idx);\nedgeind=edge_gradientsmap < 0;\nedge_gradientsmap(edgeind) = edge_gradientsmap(edgeind) + pi;\nedgeind=edge_gradientsmap>pi;\nedge_gradientsmap(edgeind)= edge_gradientsmap(edgeind)-pi;\n\nedge_img_locations = [edgeStruct.xzero(node_idx),edgeStruct.yzero(node_idx)];\n\nang_dev = round((edge_gradientsmap - TH)*180/pi);\nang_dev(ang_dev < -90) = ang_dev(ang_dev < -90) + 180;\nang_dev(ang_dev > 90) = ang_dev(ang_dev > 90) - 180;\nrange_ang = -90:1:90;\nrange_dis = 0:0.05:5;\nloc_points = [xx, yy];\nloc_points(y_h > 0,:) = edge_img_locations(y_h > 0,:);\nif size(loc_points,1) == 0\n    loc_points = [-1000, -1000];\nend\n\n\n%Get the projection of points along the line defined by p1 and p2\n[points_proj, distances] = project_point_to_line_segment_vec(p1,p2,loc_points);\n        \ndistances = interp1(range_dis, range_dis, abs(distances), 'nearest');\nrange_dis = 0:0.05:1.95;\n% Eliminate GROSS OUTLIERS\nnode_idx(distances > 2) = [];\nang_dev(distances > 2) = [];\ny_h(distances > 2) = [];\npoints_proj(distances > 2,:) = [];\ndistances(distances > 2) = [];\n% SORT:\nif abs(M) > 1\n    [~, idx] = sort(points_proj(:,2));\nelse\n    [~, idx] = sort(points_proj(:,1));\nend\npoints_proj = points_proj(idx,:);\nnode_idx = node_idx(idx);\ndistances = distances(idx);\nang_dev = ang_dev(idx);\ny_h = y_h(idx);\n\nang_dev(y_h == 0) = NaN;\n%INIT\nbegin_point = points_proj(1,:);\nend_point = points_proj(end,:);\nPsi_t = [prob_stay_on prob_leave_off; prob_leave_on prob_stay_off];\npi_var = [prob_on; prob_off];\n[~, obslik,~,DP_table, aux_table, z]=hmmParameters(exist_edge_on,exist_edge_off,ang_dev_on,...\n    ang_dev_off,node_idx,Psi_t,pi_var,y_h,distances,range_dis,nexist_edge_on,...\n    nexist_edge_off,prob_on,prob_off,prob_stay_on,prob_leave_off,prob_leave_on,...\n    prob_stay_off,ang_dev,range_ang);\n\n[lsjoint, lslogz,final_labels, node_on, likelihoods] = trace_Back(DP_table, aux_table, z, node_idx, obslik);\nedgemap(node_on) = 0;\n\nfinal_labels(final_labels == 2) = 0;\n% RETURN LINE SEGMENTS\n[begin_points,end_points,lslength,startpositions,endpositions]=returnLines(points_proj,final_labels);\n\n%compute p(x=0|y) for each line segment\nlogjointoff = zeros(size(begin_points,1), 1);\nfor j = 1:size(begin_points,1) %number of line segments\n   for i = startpositions(j):endpositions(j)\n       if startpositions(j) == 1\n           transition = prob_off;\n           past = 0;\n       elseif i == startpositions(j)\n           transition = prob_leave_on;\n           past = DP_table(1,i-1);\n       else\n           transition = prob_stay_off;\n           past = DP_table(2,i-1);\n       end\n       if y_h(i)\n           [~, nn] = min(abs(distances(i) - range_dis));\n           [~, mm] = min(abs(ang_dev(i) - range_ang));\n           p_y_off_1 = exist_edge_off(nn);\n           p_t_off_1 = ang_dev_off(mm);\n           loc_off = p_y_off_1*p_t_off_1; %likelihood of y given x = off\n           logjointoff(j) = logjointoff(j) + log(loc_off) + log(transition) + past;\n       else\n           [~, nn] = min(abs(distances(i) - range_dis));\n           loc_off = nexist_edge_off(nn);\n           logjointoff(j) = logjointoff(j) + log(loc_off) + log(transition) + past;\n       end\n\n   end\nend\n\nfor i = 1:size(logjointoff,1)\n    if logjointoff(i) > lslogz(i) || logjointoff(i) > lsjoint(i)\n        display('Error');\n    end\nend\nif size(lsjoint,1) > 0\n    logratioposterior = lsjoint - logjointoff; \nelse\n    logratioposterior = 0;\nend\nend\n\n\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/hough_find_peaks_vote_removal.m",
    "content": "%% Function P = hough_find_peaks_with_near_peak_supression(map, num_lines, NHOOD)\n%           Input\n%                   map                    Hough Map\n%                   num_lines              Maximum number of lines\n%                   NHOOD                  [R, TH] neighborhood to be\n%                                          surpressed\n%\n%           Output\n%                   P                      Hough Peaks\n%\n%\nfunction [P] = hough_find_peaks_vote_removal(map, num, r_res, th_res, edgeStruct, kernels, kernels_flip, pp, kernel_params, sig_th, sig_r, sig_bound, frac, scale_factor)\n    \n    % Loop until no more peaks or number of desired peaks have been\n    % selected\n    COUNT = 0;\n    MAX_R = 400*scale_factor;\n    P =[];\n    edgeMap = edgeStruct.edge;\n    iter = 1; \n    [m,n]=size(edgeMap);\n    while 1\n        iter = iter + 1;\n       % Find max peak:\n        [maxmap,ind]=max(map(:));\n        [r,c] = ind2sub(size(map), ind);     \n       if length(r) > 1, r = r(1); c = c(1); end\n       %here are some stopping criteria \n       if isempty(r)\n           return; \n       end\n       [rho, theta] = mat2hough_scale(r, c, MAX_R, r_res, th_res);\n       if ismember([rho, theta, maxmap], P, 'rows', 'legacy')\n           return; \n       end\n       if COUNT > 0\n           if (maxmap/P(1,3)) < frac \n               return; \n           end\n       end\n       % Save max peak\n       P = [P; [rho theta maxmap]];\n       COUNT = COUNT + 1;\n        \n       % If reached number of lines, return\n       if size(P, 1) == num\n           return; \n       end\n       \n       %there following block of code identify the location of edges that\n       %need to be removed from the hough map and edge map\n        indexXY=sampleLine(rho,theta,n,m,pp);\n        yy=ceil(indexXY(:,2)+pp(2));\n        xx=ceil(indexXY(:,1)+pp(1));\n        edge_index = sub2ind([m,n],yy,xx);\n        X_1 = rho * cos(theta) - 2000*cos(theta+pi/2) + pp(1);\n        X_2 = rho * cos(theta) + 2000*cos(theta+pi/2) + pp(1);\n        Y_1 = rho * sin(theta) - 2000*sin(theta+pi/2) + pp(2);\n        Y_2 = rho * sin(theta) + 2000*sin(theta+pi/2) + pp(2);\n        M = (Y_2-Y_1)/(X_2-X_1+1e-7);\n       b = Y_2 - X_2*M;\n       line_eq = [M, -1, b];\n\n       edge_img_locations = [edgeStruct.xzero(edge_index),edgeStruct.yzero(edge_index), ones(length(edge_index(:)),1)];\n       edge_gradients = edgeStruct.g1dir(edge_index);\n       \n       edge_gradients2 = edge_gradients;\n       indexless0=edge_gradients2 < 0;\n       indexgreaterpi=edge_gradients2>pi;\n       edge_gradients2(indexless0) = edge_gradients2(indexless0) + pi;\n       edge_gradients2(indexgreaterpi)= edge_gradients2(indexgreaterpi)-pi;\n       \n       edge_gradients2 = pi - edge_gradients2;\n       edgetetalesspi=edge_gradients2 - theta<-pi/2;\n       edge_gradients2(edgetetalesspi)= edge_gradients2(edgetetalesspi)+pi;\n       edgethetagreaterpi=edge_gradients2-theta>pi/2;\n       edge_gradients2(edgethetagreaterpi)= edge_gradients2(edgethetagreaterpi)-pi;\n       orientationDiff = abs(edge_gradients2 - theta);\n       distances =  (abs(line_eq*edge_img_locations')'/norm(line_eq(1:2)));\n       \n       distanceBoundary=(distances <= sig_bound*sig_r);\n        edge_img_locations_remove  = edge_img_locations(distanceBoundary, 1:2);\n        edge_gradients_remove = edge_gradients(distanceBoundary);\n              \n        orientationDiff = orientationDiff(distanceBoundary);\n        edge_index = edge_index(distanceBoundary);\n        orientatinDiffboundary=orientationDiff <=sig_bound*sig_th;\n        edge_img_locations_remove = edge_img_locations_remove(orientatinDiffboundary, :);\n        edge_gradients_remove = edge_gradients_remove(orientatinDiffboundary);\n        edge_index = edge_index(orientatinDiffboundary);\n       \n        if isempty(edge_img_locations_remove) \n            break; \n        end\n        edgeMap(edge_index) = 0;\n        %remove the detected lines from the hough map\n        map=mexRemoveVotes_v3_scale(edge_img_locations_remove, edge_gradients_remove, kernels, kernels_flip, r_res, th_res, pp, kernel_params, map, scale_factor);\n\n        %map = mexRemoveVotes_v3_scale(edge_img_locations_remove, edge_gradients_remove, kernels, kernels_flip, r_res, th_res, pp, kernel_params, map, scale_factor);\n\n    end\nend\n\n   "
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/kernelInitialization.m",
    "content": "function [kernels, kernels_flip, kernel_params] =kernelInitialization(img)\n[m,n,~]=size(img);\nscale_factor = sqrt(m^2+n^2)/800; %800 is the diagnal length of 640x480 image\nmaxr = floor(400*scale_factor);\nsigmax = 0.4;\nr_res = 0.2;\nth_res = 0.002;\nsigmatheta = 5.4*(pi/180);\n[kernels, kernels_flip, kernel_params] = precompute_kernels_sparse_res2(maxr, sigmax, sigmatheta, r_res, th_res);\nend\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/lineSegmentation_HighRes.m",
    "content": "function [lines, fullLines] =lineSegmentation_HighRes(img,kernels, kernels_flip, kernel_params)\n%use 640x480 image as a reference. the diagonal size of this image is 800\n%if image size 640x480 scale factor = 1\n%if image size 1280x960 scale factor = 2 ... etc.\n%the lines variable contains the detected line segmentations it arranged as\n%[x1 y1 x2 y2 probability]\n%The fullLines are the detected lines. It is arranged as [rho theta probability]\npp=[307.551305282635,251.454244960136]; %principle point\nsig_bound = 3; %threshold for the line detection\nr_res = 0.2; %the theshold for the rho\nth_res = 0.002; %the threshold for theta\n[m,n,~]=size(img);\nscale_factor = sqrt(m^2+n^2)/800; %800 is the diagnal length of 640x480 image\n%the kernel of the algorithm is calibrated on 640x480 image\n%rescale the principle point\npp(1)=pp(1)*n/640;\npp(2)=pp(2)*m/480;\n[lines, fullLines] = run_lineSegmentAlgorithm(kernels, kernels_flip, kernel_params, sig_bound, r_res, th_res, img, scale_factor,pp);                    \n\nend"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/mexfiles/hmmParameters.m",
    "content": "function [alpha_t, obslik,T,DP_table, aux_table, z]=hmmParameters(exist_edge_on,exist_edge_off,ang_dev_on,...\n    ang_dev_off,node_idx,Psi_t,pi_var,y_h,distances,range_dis,nexist_edge_on,...\n    nexist_edge_off,prob_on,prob_off,prob_stay_on,prob_leave_off,prob_leave_on,...\n    prob_stay_off,ang_dev,range_ang)\nnode_idx_length=length(node_idx);\nDP_table = zeros(2, node_idx_length);\naux_table = zeros(2, node_idx_length);\n% aux_table(1,1) = -Inf;\n% aux_table(2,1) = -Inf;\nz = zeros(node_idx_length,1); % E.A. List of log evidences: sum(log(z)) from 1:t.\nalpha_t = zeros(2,node_idx_length); %E.A. 2x1 vector (on/off) of posterior prob.: e.g. alpha_1 = [p(x=on|x); p(x=off|x)]\nobslik = zeros(2,node_idx_length); %E.A. 2x1 observation likelihood\nif y_h(1)\n    [val, nn] = min(abs(distances(1) - range_dis));\n    [val, mm] = min(abs(ang_dev(1) - range_ang));\n    p_y_on_1 = exist_edge_on(nn);\n    p_y_off_1 = exist_edge_off(nn);\n    p_t_on_1 = ang_dev_on(mm);\n    p_t_off_1 = ang_dev_off(mm);\n\n    loc_on = p_y_on_1*p_t_on_1; %likelihood of y given x = on\n    loc_off = p_y_off_1*p_t_off_1; %likelihood of y given x = off\n\n    DP_table(1,1) = log(loc_on) + log(prob_on);\n    DP_table(2,1) = log(loc_off) + log(prob_off);\n\n    %Compute prob. of the evidence. E.A.\n    obslik(:,1) = [loc_on; loc_off];\n    z(1) = sum(obslik(:,1) .* pi_var);\n    alpha_t(:,1) = [ loc_on *  pi_var(1); loc_off *  pi_var(2)] / z(1);\n\n%     if (round(sum(alpha_t(:,1))) ~= 1)\n%         display('Error');\n%     end\n            \n%% Compute log likelihood ration and evidenct -- E.A             \n%             log_like_ratio_list(1) = log((p_y_on_1*p_t_on_1)/(p_y_off_1*p_t_off_1)); %E.A. log likelihood ratio (1st position, edge)\n%             evidence(1) = log(p_y_on_1*p_t_on_1*prob_on + p_y_off_1*p_t_off_1*prob_off);\n%%      \nelse\n    [val, nn] = min(abs(distances(1) - range_dis));\n\n    loc_on = nexist_edge_on(nn);\n    loc_off = nexist_edge_off(nn);\n\n    DP_table(1,1) = log(loc_on) + log(prob_on);\n    DP_table(2,1) = log(loc_off) + log(prob_off);\n\n\n    %Compute prob. of the evidence. E.A.\n    %psi = [loc_on; loc_off];\n    obslik(:,1) = [loc_on; loc_off];\n    z(1) = sum(obslik(:,1) .* pi_var);\n    alpha_t(:,1) = [ loc_on *  pi_var(1); loc_off *  pi_var(2)] / z(1);\n    %obslik(:,1) = [loc_on; loc_off];\n\n%     if (round(sum(alpha_t(:,1))) ~= 1)\n%         display('Error');\n%     end           \n%             \n%% Compute log likelihood ration and evidenct -- E.A             \n%             log_like_ratio_list(1) = log(p_y_on_1/p_y_off_1); %E.A. log likelihood ratio (1st position, no edge)  \n%             evidence(1) = log(p_y_on_1*prob_on + p_y_off_1*prob_off);\n%%      \nend\n\n% LOOP THROUGH\nfor i =2:node_idx_length\n    if y_h(i)\n        [val, nn] = min(abs(distances(i) - range_dis));\n        [val, mm] = min(abs(ang_dev(i) - range_ang));\n        p_y_on_1 = exist_edge_on(nn);\n        p_y_off_1 = exist_edge_off(nn);\n        p_t_on_1 = ang_dev_on(mm);\n        p_t_off_1 = ang_dev_off(mm);\n\n        loc_on = p_y_on_1*p_t_on_1; %likelihood of y given x = on\n        loc_off = p_y_off_1*p_t_off_1; %likelihood of y given x = off\n\n        [DP_table(1,i), aux_table(1,i)] = max([log(loc_on)  + log(prob_stay_on) + DP_table(1,i-1), log(loc_on) + log(prob_leave_off) + DP_table(2,i-1)]);\n        [DP_table(2,i), aux_table(2,i)] = max([log(loc_off) + log(prob_leave_on) + DP_table(1,i-1), log(loc_off) + log(prob_stay_off) + DP_table(2,i-1)]);\n\n\n        %Compute prob. of the evidence. E.A.            \n        %psi = [loc_on; loc_off];\n        obslik(:,i) = [loc_on; loc_off];\n        predict = Psi_t * alpha_t(:,i-1);\n        z(i) = sum(obslik(:,i) .*  predict);\n        alpha_t(:,i) = [ loc_on * predict(1); loc_off * predict(2)] / z(i);\n        %obslik(:,i) = [loc_on; loc_off];\n\n\n\n%         if (round(sum(alpha_t(:,1))) ~= 1)\n%             display('Error');\n%         end                \n\n%% Compute log likelihood ration and evidenct -- E.A                 \n%                 log_like_ratio_list(i) = log((p_y_on_1*p_t_on_1)/(p_y_off_1*p_t_off_1)); %E.A. store likelihood              \n%                 evidence(i) = evidence(i-1) + log(p_y_on_1*p_t_on_1*prob_stay_on + p_y_on_1*p_t_on_1*prob_stay_off + ...\n%                     p_y_off_1*p_t_off_1*prob_leave_on +  p_y_off_1*p_t_off_1*prob_stay_off); %E.A. log evidence 1..i\n%%\n   else\n        [val, nn] = min(abs(distances(i) - range_dis));\n\n        loc_on = nexist_edge_on(nn);\n        loc_off = nexist_edge_off(nn);\n\n        [DP_table(1,i), aux_table(1,i)] = max([log(loc_on)  + log(prob_stay_on) + DP_table(1,i-1), log(loc_on) + log(prob_leave_off) + DP_table(2,i-1)]);\n        [DP_table(2,i), aux_table(2,i)] = max([log(loc_off) + log(prob_leave_on) + DP_table(1,i-1), log(loc_off) + log(prob_stay_off) + DP_table(2,i-1)]);\n\n        %Compute prob. of the evidence. E.A.\n        obslik(:,i) = [loc_on; loc_off];\n        predict = Psi_t * alpha_t(:,i-1);\n        z(i) = sum(obslik(:,i) .*  predict);\n        alpha_t(:,i) = [ loc_on * predict(1); loc_off * predict(2)] / z(i);\n\n%         if (round(sum(alpha_t(:,1))) ~= 1)\n%             display('Error');\n%         end\n\n%% Compute log likelihood ration and evidence --  E.A                 \n%                 log_like_ratio_list(i) = log(p_y_on_1/p_y_off_1); %E.A. store likelihood\n%                 evidence(i) = evidence(i-1) + log(p_y_on_1*prob_stay_on + p_y_on_1*prob_leave_off + ...\n%                     p_y_off_1*prob_leave_on + p_y_off_1*prob_stay_off); %E.A. log evidence 1..i\n%%                \n    end\nend\nT = size(DP_table,2);\nend"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/mexfiles/hmmParameters.prj",
    "content": "<deployment-project plugin=\"plugin.coder\" plugin-version=\"R2015b\">\n  <configuration build-checksum=\"4179426945\" file=\"/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/code/mexfiles/hmmParameters.prj\" location=\"/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/code/mexfiles\" name=\"hmmParameters\" target=\"target.unifiedcoder\" target-name=\"MATLAB Coder\">\n    <profile key=\"profile.mex\">\n      <param.BuiltInstrumentedMex />\n      <param.RanInstrumentedMex>false</param.RanInstrumentedMex>\n      <param.WorkingFolder>option.WorkingFolder.Project</param.WorkingFolder>\n      <param.SpecifiedWorkingFolder />\n      <param.BuildFolder>option.BuildFolder.Project</param.BuildFolder>\n      <param.SpecifiedBuildFolder />\n      <param.SearchPaths />\n      <param.ResponsivenessChecks>true</param.ResponsivenessChecks>\n      <param.ExtrinsicCalls>true</param.ExtrinsicCalls>\n      <param.IntegrityChecks>true</param.IntegrityChecks>\n      <param.SaturateOnIntegerOverflow>true</param.SaturateOnIntegerOverflow>\n      <param.GlobalDataSyncMethod>option.GlobalDataSyncMethod.SyncAlways</param.GlobalDataSyncMethod>\n      <param.EnableVariableSizing>true</param.EnableVariableSizing>\n      <param.DynamicMemoryAllocation>option.DynamicMemoryAllocation.Threshold</param.DynamicMemoryAllocation>\n      <param.DynamicMemoryAllocationThreshold>65536</param.DynamicMemoryAllocationThreshold>\n      <param.StackUsageMax>200000</param.StackUsageMax>\n      <param.FilePartitionMethod>option.FilePartitionMethod.MapMFileToCFile</param.FilePartitionMethod>\n      <param.GenerateComments>true</param.GenerateComments>\n      <param.MATLABSourceComments>false</param.MATLABSourceComments>\n      <param.ReservedNameArray />\n      <param.EnableDebugging>false</param.EnableDebugging>\n      <param.GenerateReport>true</param.GenerateReport>\n      <param.LaunchReport>false</param.LaunchReport>\n      <param.DefaultTestFile />\n      <param.MergeInstrumentationResults>false</param.MergeInstrumentationResults>\n      <param.VerificationMode>option.VerificationMode.None</param.VerificationMode>\n      <param.VerificationStatus>option.VerificationStatus.Passed</param.VerificationStatus>\n      <param.CustomSourceCode />\n      <param.CustomHeaderCode />\n      <param.CustomInitializer />\n      <param.CustomTerminator />\n      <param.CustomInclude />\n      <param.CustomSource />\n      <param.CustomLibrary />\n      <param.PostCodeGenCommand />\n      <param.mex.GenCodeOnly>false</param.mex.GenCodeOnly>\n      <param.ConstantFoldingTimeout>40000</param.ConstantFoldingTimeout>\n      <param.RecursionLimit />\n      <param.PreserveVariableNames>option.PreserveVariableNames.UserNames</param.PreserveVariableNames>\n      <param.TargetLang>option.TargetLang.C</param.TargetLang>\n      <param.EchoExpressions>true</param.EchoExpressions>\n      <param.InlineThreshold>10</param.InlineThreshold>\n      <param.InlineThresholdMax>200</param.InlineThresholdMax>\n      <param.InlineStackLimit>4000</param.InlineStackLimit>\n      <param.EnableMemcpy>true</param.EnableMemcpy>\n      <param.MemcpyThreshold>64</param.MemcpyThreshold>\n      <param.EnableOpenMP>true</param.EnableOpenMP>\n      <param.InitFltsAndDblsToZero>true</param.InitFltsAndDblsToZero>\n      <param.ConstantInputs>option.ConstantInputs.CheckValues</param.ConstantInputs>\n      <unset>\n        <param.BuiltInstrumentedMex />\n        <param.RanInstrumentedMex />\n        <param.WorkingFolder />\n        <param.SpecifiedWorkingFolder />\n        <param.BuildFolder />\n        <param.SpecifiedBuildFolder />\n        <param.SearchPaths />\n        <param.ResponsivenessChecks />\n        <param.ExtrinsicCalls />\n        <param.IntegrityChecks />\n        <param.SaturateOnIntegerOverflow />\n        <param.EnableVariableSizing />\n        <param.DynamicMemoryAllocation />\n        <param.DynamicMemoryAllocationThreshold />\n        <param.StackUsageMax />\n        <param.FilePartitionMethod />\n        <param.GenerateComments />\n        <param.MATLABSourceComments />\n        <param.ReservedNameArray />\n        <param.EnableDebugging />\n        <param.GenerateReport />\n        <param.LaunchReport />\n        <param.DefaultTestFile />\n        <param.MergeInstrumentationResults />\n        <param.CustomSourceCode />\n        <param.CustomHeaderCode />\n        <param.CustomInitializer />\n        <param.CustomTerminator />\n        <param.CustomInclude />\n        <param.CustomSource />\n        <param.CustomLibrary />\n        <param.PostCodeGenCommand />\n        <param.ConstantFoldingTimeout />\n        <param.RecursionLimit />\n        <param.PreserveVariableNames />\n        <param.TargetLang />\n        <param.EchoExpressions />\n        <param.InlineThreshold />\n        <param.InlineThresholdMax />\n        <param.InlineStackLimit />\n        <param.EnableMemcpy />\n        <param.MemcpyThreshold />\n        <param.EnableOpenMP />\n        <param.InitFltsAndDblsToZero />\n        <param.ConstantInputs />\n      </unset>\n    </profile>\n    <profile key=\"profile.c\">\n      <param.grt.GenCodeOnly>false</param.grt.GenCodeOnly>\n      <param.WorkingFolder>option.WorkingFolder.Project</param.WorkingFolder>\n      <param.SpecifiedWorkingFolder />\n      <param.BuildFolder>option.BuildFolder.Project</param.BuildFolder>\n      <param.SpecifiedBuildFolder />\n      <param.SearchPaths />\n      <param.SaturateOnIntegerOverflow>true</param.SaturateOnIntegerOverflow>\n      <param.PurelyIntegerCode />\n      <param.SupportNonFinite />\n      <param.EnableVariableSizing>true</param.EnableVariableSizing>\n      <param.DynamicMemoryAllocation>option.DynamicMemoryAllocation.Threshold</param.DynamicMemoryAllocation>\n      <param.DynamicMemoryAllocationThreshold>65536</param.DynamicMemoryAllocationThreshold>\n      <param.StackUsageMax>200000</param.StackUsageMax>\n      <param.MultiInstanceCode />\n      <param.FilePartitionMethod>option.FilePartitionMethod.MapMFileToCFile</param.FilePartitionMethod>\n      <param.GenerateComments>true</param.GenerateComments>\n      <param.CommentStyle />\n      <param.MATLABSourceComments>false</param.MATLABSourceComments>\n      <param.MATLABFcnDesc />\n      <param.DataTypeReplacement />\n      <param.ConvertIfToSwitch />\n      <param.PreserveExternInFcnDecls />\n      <param.EnableSignedLeftShifts />\n      <param.EnableSignedRightShifts />\n      <param.ParenthesesLevel />\n      <param.MaxIdLength />\n      <param.CustomSymbolStrGlobalVar />\n      <param.CustomSymbolStrType />\n      <param.CustomSymbolStrField />\n      <param.CustomSymbolStrFcn />\n      <param.CustomSymbolStrTmpVar />\n      <param.CustomSymbolStrMacro />\n      <param.CustomSymbolStrEMXArray />\n      <param.CustomSymbolStrEMXArrayFcn />\n      <param.ReservedNameArray />\n      <param.RuntimeChecks />\n      <param.Verbose />\n      <param.GenerateReport>true</param.GenerateReport>\n      <param.GenerateCodeMetricsReport />\n      <param.GenerateCodeReplacementReport />\n      <param.HighlightPotentialDataTypeIssues />\n      <param.LaunchReport>false</param.LaunchReport>\n      <param.SILDebugging />\n      <param.CodeExecutionProfiling />\n      <param.DefaultTestFile />\n      <param.MergeInstrumentationResults>false</param.MergeInstrumentationResults>\n      <param.RanPilSilVerification>false</param.RanPilSilVerification>\n      <param.VerificationMode />\n      <param.VerificationStatus />\n      <param.CustomSourceCode />\n      <param.CustomHeaderCode />\n      <param.CustomInitializer />\n      <param.CustomTerminator />\n      <param.CustomInclude />\n      <param.CustomSource />\n      <param.CustomLibrary />\n      <param.PostCodeGenCommand />\n      <param.TargetLangStandard />\n      <param.CodeReplacementLibrary />\n      <param.DeprecatedCRLFlag />\n      <param.SameHardware>true</param.SameHardware>\n      <param.Toolchain>Automatically locate an installed toolchain</param.Toolchain>\n      <param.BuildConfiguration />\n      <param.CustomToolchainOptions />\n      <var.ToolchainSettingsVisible />\n      <param.target.Data />\n      <param.target.ActiveType>option.target.TargetType.MatlabHost</param.target.ActiveType>\n      <param.target.ActiveTarget />\n      <param.HardwareVendor.Production>Generic</param.HardwareVendor.Production>\n      <param.HardwareType.Production>MATLAB Host Computer</param.HardwareType.Production>\n      <param.HWDeviceType.Production />\n      <var.instance.enabled.Production>true</var.instance.enabled.Production>\n      <param.HardwareSizeChar.Production>8</param.HardwareSizeChar.Production>\n      <param.HardwareSizeShort.Production>16</param.HardwareSizeShort.Production>\n      <param.HardwareSizeInt.Production>32</param.HardwareSizeInt.Production>\n      <param.HardwareSizeLong.Production>64</param.HardwareSizeLong.Production>\n      <param.HardwareSizeLongLong.Production>64</param.HardwareSizeLongLong.Production>\n      <param.HardwareSizeFloat.Production>32</param.HardwareSizeFloat.Production>\n      <param.HardwareSizeDouble.Production>64</param.HardwareSizeDouble.Production>\n      <param.HardwareSizeWord.Production>64</param.HardwareSizeWord.Production>\n      <param.HardwareSizePointer.Production>64</param.HardwareSizePointer.Production>\n      <param.HardwareEndianness.Production>option.HardwareEndianness.Little</param.HardwareEndianness.Production>\n      <param.HardwareArithmeticRightShift.Production>true</param.HardwareArithmeticRightShift.Production>\n      <param.HardwareLongLongMode.Production>true</param.HardwareLongLongMode.Production>\n      <param.HardwareAtomicIntegerSize.Production>option.HardwareAtomicIntegerSize.Char</param.HardwareAtomicIntegerSize.Production>\n      <param.HardwareAtomicFloatSize.Production>option.HardwareAtomicFloatSize.None</param.HardwareAtomicFloatSize.Production>\n      <param.HardwareDivisionRounding.Production>option.HardwareDivisionRounding.Zero</param.HardwareDivisionRounding.Production>\n      <param.HardwareVendor.Target>Generic</param.HardwareVendor.Target>\n      <param.HardwareType.Target>MATLAB Host Computer</param.HardwareType.Target>\n      <param.HWDeviceType.Target />\n      <var.instance.enabled.Target>false</var.instance.enabled.Target>\n      <param.HardwareSizeChar.Target>8</param.HardwareSizeChar.Target>\n      <param.HardwareSizeShort.Target>16</param.HardwareSizeShort.Target>\n      <param.HardwareSizeInt.Target>32</param.HardwareSizeInt.Target>\n      <param.HardwareSizeLong.Target>64</param.HardwareSizeLong.Target>\n      <param.HardwareSizeLongLong.Target>64</param.HardwareSizeLongLong.Target>\n      <param.HardwareSizeFloat.Target>32</param.HardwareSizeFloat.Target>\n      <param.HardwareSizeDouble.Target>64</param.HardwareSizeDouble.Target>\n      <param.HardwareSizeWord.Target>64</param.HardwareSizeWord.Target>\n      <param.HardwareSizePointer.Target>64</param.HardwareSizePointer.Target>\n      <param.HardwareEndianness.Target>option.HardwareEndianness.Little</param.HardwareEndianness.Target>\n      <param.HardwareArithmeticRightShift.Target>true</param.HardwareArithmeticRightShift.Target>\n      <param.HardwareLongLongMode.Target>true</param.HardwareLongLongMode.Target>\n      <param.HardwareAtomicIntegerSize.Target>option.HardwareAtomicIntegerSize.Char</param.HardwareAtomicIntegerSize.Target>\n      <param.HardwareAtomicFloatSize.Target>option.HardwareAtomicFloatSize.None</param.HardwareAtomicFloatSize.Target>\n      <param.HardwareDivisionRounding.Target>option.HardwareDivisionRounding.Zero</param.HardwareDivisionRounding.Target>\n      <param.CastingMode />\n      <param.IndentStyle />\n      <param.IndentSize />\n      <param.ConstantFoldingTimeout>40000</param.ConstantFoldingTimeout>\n      <param.RecursionLimit />\n      <param.IncludeTerminateFcn />\n      <param.GenerateExampleMain />\n      <param.PreserveVariableNames>option.PreserveVariableNames.UserNames</param.PreserveVariableNames>\n      <param.TargetLang>option.TargetLang.C</param.TargetLang>\n      <param.CCompilerOptimization />\n      <param.CCompilerCustomOptimizations />\n      <param.GenerateMakefile />\n      <param.BuildToolEnable />\n      <param.MakeCommand />\n      <param.TemplateMakefile />\n      <param.BuildToolConfiguration />\n      <param.InlineThreshold>10</param.InlineThreshold>\n      <param.InlineThresholdMax>200</param.InlineThresholdMax>\n      <param.InlineStackLimit>4000</param.InlineStackLimit>\n      <param.EnableMemcpy>true</param.EnableMemcpy>\n      <param.MemcpyThreshold>64</param.MemcpyThreshold>\n      <param.EnableOpenMP>true</param.EnableOpenMP>\n      <param.InitFltsAndDblsToZero>true</param.InitFltsAndDblsToZero>\n      <param.PassStructByReference />\n      <param.UseECoderFeatures />\n      <unset>\n        <param.WorkingFolder />\n        <param.SpecifiedWorkingFolder />\n        <param.BuildFolder />\n        <param.SpecifiedBuildFolder />\n        <param.SearchPaths />\n        <param.SaturateOnIntegerOverflow />\n        <param.PurelyIntegerCode />\n        <param.SupportNonFinite />\n        <param.EnableVariableSizing />\n        <param.DynamicMemoryAllocation />\n        <param.DynamicMemoryAllocationThreshold />\n        <param.StackUsageMax />\n        <param.MultiInstanceCode />\n        <param.FilePartitionMethod />\n        <param.GenerateComments />\n        <param.CommentStyle />\n        <param.MATLABSourceComments />\n        <param.MATLABFcnDesc />\n        <param.DataTypeReplacement />\n        <param.ConvertIfToSwitch />\n        <param.PreserveExternInFcnDecls />\n        <param.EnableSignedLeftShifts />\n        <param.EnableSignedRightShifts />\n        <param.ParenthesesLevel />\n        <param.MaxIdLength />\n        <param.CustomSymbolStrGlobalVar />\n        <param.CustomSymbolStrType />\n        <param.CustomSymbolStrField />\n        <param.CustomSymbolStrFcn />\n        <param.CustomSymbolStrTmpVar />\n        <param.CustomSymbolStrMacro />\n        <param.CustomSymbolStrEMXArray />\n        <param.CustomSymbolStrEMXArrayFcn />\n        <param.ReservedNameArray />\n        <param.RuntimeChecks />\n        <param.Verbose />\n        <param.GenerateReport />\n        <param.GenerateCodeMetricsReport />\n        <param.GenerateCodeReplacementReport />\n        <param.HighlightPotentialDataTypeIssues />\n        <param.LaunchReport />\n        <param.SILDebugging />\n        <param.CodeExecutionProfiling />\n        <param.DefaultTestFile />\n        <param.MergeInstrumentationResults />\n        <param.RanPilSilVerification />\n        <param.VerificationMode />\n        <param.VerificationStatus />\n        <param.CustomSourceCode />\n        <param.CustomHeaderCode />\n        <param.CustomInitializer />\n        <param.CustomTerminator />\n        <param.CustomInclude />\n        <param.CustomSource />\n        <param.CustomLibrary />\n        <param.PostCodeGenCommand />\n        <param.TargetLangStandard />\n        <param.CodeReplacementLibrary />\n        <param.DeprecatedCRLFlag />\n        <param.SameHardware />\n        <param.Toolchain />\n        <param.BuildConfiguration />\n        <param.CustomToolchainOptions />\n        <var.ToolchainSettingsVisible />\n        <param.target.Data />\n        <param.target.ActiveType />\n        <param.target.ActiveTarget />\n        <param.HardwareVendor.Production />\n        <param.HardwareType.Production />\n        <param.HWDeviceType.Production />\n        <var.instance.enabled.Production />\n        <param.HardwareVendor.Target />\n        <param.HardwareType.Target />\n        <param.HWDeviceType.Target />\n        <var.instance.enabled.Target />\n        <param.CastingMode />\n        <param.IndentStyle />\n        <param.IndentSize />\n        <param.ConstantFoldingTimeout />\n        <param.RecursionLimit />\n        <param.IncludeTerminateFcn />\n        <param.GenerateExampleMain />\n        <param.PreserveVariableNames />\n        <param.TargetLang />\n        <param.CCompilerOptimization />\n        <param.CCompilerCustomOptimizations />\n        <param.GenerateMakefile />\n        <param.BuildToolEnable />\n        <param.MakeCommand />\n        <param.TemplateMakefile />\n        <param.BuildToolConfiguration />\n        <param.InlineThreshold />\n        <param.InlineThresholdMax />\n        <param.InlineStackLimit />\n        <param.EnableMemcpy />\n        <param.MemcpyThreshold />\n        <param.EnableOpenMP />\n        <param.InitFltsAndDblsToZero />\n        <param.PassStructByReference />\n        <param.UseECoderFeatures />\n      </unset>\n    </profile>\n    <profile key=\"profile.hdl\">\n      <param.hdl.Workflow />\n      <param.hdl.TargetLanguage />\n      <param.hdl.TargetPlatform />\n      <param.hdl.SynthesisTool />\n      <param.hdl.InputFrequency />\n      <param.hdl.TargetFrequency />\n      <param.hdl.IPCoreName />\n      <param.hdl.IPCoreVersion />\n      <param.hdl.AdditionalIPFiles />\n      <param.hdl.ExecutionMode />\n      <param.hdl.SynthesisToolChipFamily />\n      <param.hdl.SynthesisToolDeviceName />\n      <param.hdl.SynthesisToolPackageName />\n      <param.hdl.SynthesisToolSpeedValue />\n      <param.hdl.TargetInterface />\n      <param.hdl.CheckConformance />\n      <param.hdl.LaunchConformanceReport />\n      <param.hdl.GenerateEDAScripts />\n      <param.hdl.GenerateHDLCode />\n      <param.hdl.AdditionalSynthesisProjectFiles />\n      <param.hdl.CriticalPathSource />\n      <param.hdl.EmbeddedSystemTool />\n      <param.hdl.EmbeddedSystemProjectFolder />\n      <param.hdl.BitstreamBuildMode />\n      <param.hdl.ReferenceDesign />\n      <param.hdl.ReferenceDesignPath />\n      <param.hdl.LegacyDefaultTestFile />\n      <param.WorkingFolder>option.WorkingFolder.Project</param.WorkingFolder>\n      <param.SpecifiedWorkingFolder />\n      <param.BuildFolder>option.BuildFolder.Project</param.BuildFolder>\n      <param.SpecifiedBuildFolder />\n      <param.SearchPaths />\n      <param.hdl.MapPersistentVarsToRAM />\n      <param.hdl.RAMThreshold />\n      <param.hdl.RAMVariableNames />\n      <param.hdl.RegisterInputs />\n      <param.hdl.RegisterOutputs />\n      <param.hdl.DistributedPipelining />\n      <param.hdl.DistributedPipeliningPriority />\n      <param.hdl.PreserveDesignDelays />\n      <param.hdl.InputPipeline />\n      <param.hdl.OutputPipeline />\n      <param.hdl.PipelineVariables />\n      <param.hdl.ResourceSharing />\n      <param.hdl.ConstantMultiplierOptimization />\n      <param.hdl.LoopOptimization />\n      <param.GenerateComments>true</param.GenerateComments>\n      <param.MATLABSourceComments>false</param.MATLABSourceComments>\n      <param.hdl.VHDLFileExt />\n      <param.hdl.VerilogFileExt />\n      <param.hdl.DateComment />\n      <param.hdl.UserComment />\n      <param.hdl.ModulePrefix />\n      <param.hdl.PackagePostfix />\n      <param.hdl.EntityConflictPostfix />\n      <param.hdl.ReservedWordPostfix />\n      <param.hdl.ClockProcessPostfix />\n      <param.hdl.ComplexRealPostfix />\n      <param.hdl.ComplexImagPostfix />\n      <param.hdl.PipelinePostfix />\n      <param.hdl.EnablePrefix />\n      <param.hdl.InlineConfigurations />\n      <param.hdl.UseRisingEdge />\n      <param.hdl.UseMatrixTypesInHDL />\n      <param.hdl.HDLCompileFilePostfix />\n      <param.hdl.HDLCompileInit />\n      <param.hdl.HDLCompileVHDLCmd />\n      <param.hdl.HDLCompileVerilogCmd />\n      <param.hdl.HDLCompileTerm />\n      <param.hdl.HDLSimFilePostfix />\n      <param.hdl.HDLSimInit />\n      <param.hdl.HDLSimCmd />\n      <param.hdl.HDLSimViewWaveCmd />\n      <param.hdl.HDLSimTerm />\n      <param.hdl.HDLSynthTool />\n      <var.hasSynthesisToolScript />\n      <var.toolSpecificEDAScript />\n      <param.hdl.HDLSynthFilePostfix />\n      <param.hdl.HDLSynthInit />\n      <param.hdl.HDLSynthCmd />\n      <param.hdl.HDLSynthTerm />\n      <param.hdl.HDLLintTool />\n      <var.LintToolScript />\n      <var.hasHDLLintTool />\n      <param.hdl.HDLLintInit />\n      <param.hdl.HDLLintCmd />\n      <param.hdl.HDLLintTerm />\n      <param.hdl.ResetType />\n      <param.hdl.ResetAssertedLevel />\n      <param.hdl.ResetInputPort />\n      <param.hdl.ClockInputPort />\n      <param.hdl.ClockEdge />\n      <param.hdl.ClockEnableInputPort />\n      <param.hdl.Oversampling />\n      <param.hdl.EnableRate />\n      <param.hdl.InputType />\n      <param.hdl.OutputType />\n      <param.hdl.ClockEnableOutputPort />\n      <param.hdl.ScalarizePorts />\n      <param.hdl.HDLCodingStandard />\n      <var.HDLCodingStandard_FilterPassingRules_enable />\n      <var.HDLCodingStandard_DetectDuplicateNamesCheck_enable />\n      <var.HDLCodingStandard_HDLKeywords_enable />\n      <var.HDLCodingStandard_ModuleInstanceEntityNameLength_enable />\n      <var.HDLCodingStandard_ModuleInstanceEntityNameLength_min />\n      <var.HDLCodingStandard_ModuleInstanceEntityNameLength_max />\n      <var.HDLCodingStandard_SignalPortParamNameLength_enable />\n      <var.HDLCodingStandard_SignalPortParamNameLength_min />\n      <var.HDLCodingStandard_SignalPortParamNameLength_max />\n      <var.HDLCodingStandard_MinimizeVariableUsage_enable />\n      <var.HDLCodingStandard_InitialStatements_enable />\n      <var.HDLCodingStandard_IfElseChain_enable />\n      <var.HDLCodingStandard_IfElseChain_length />\n      <var.HDLCodingStandard_IfElseNesting_enable />\n      <var.HDLCodingStandard_IfElseNesting_depth />\n      <var.HDLCodingStandard_MultiplierBitWidth_enable />\n      <var.HDLCodingStandard_MultiplierBitWidth_width />\n      <var.HDLCodingStandard_NonIntegerTypes_enable />\n      <var.HDLCodingStandard_LineLength_enable />\n      <var.HDLCodingStandard_LineLength_length />\n      <param.hdl.GenerateCosimTestBench />\n      <param.hdl.CosimLogOutputs />\n      <param.hdl.CosimTool />\n      <param.hdl.CosimRunMode />\n      <param.hdl.SimulateCosimTestBench />\n      <param.hdl.CosimClockHighTime />\n      <param.hdl.CosimClockLowTime />\n      <param.hdl.CosimHoldTime />\n      <param.hdl.CosimClockEnableDelay />\n      <param.hdl.CosimResetLength />\n      <param.hdl.GenerateFILTestBench />\n      <param.hdl.FILLogOutputs />\n      <param.hdl.FILBoardName />\n      <param.hdl.FILConnection />\n      <param.hdl.FILBoardIPAddress />\n      <param.hdl.FILBoardMACAddress />\n      <param.hdl.FILAdditionalFiles />\n      <param.hdl.SimulateFILTestBench />\n      <var.hasTestBench />\n      <param.hdl.GenerateHDLTestBench />\n      <param.hdl.SimulateGeneratedCode />\n      <param.hdl.SimulationTool />\n      <param.hdl.TestBenchPostfix />\n      <param.hdl.ForceClock />\n      <param.hdl.ClockHighTime />\n      <param.hdl.ClockLowTime />\n      <param.hdl.HoldTime />\n      <param.hdl.ForceClockEnable />\n      <param.hdl.TestBenchClockEnableDelay />\n      <param.hdl.ForceReset />\n      <param.hdl.ResetLength />\n      <param.hdl.HoldInputDataBetweenSamples />\n      <param.hdl.InputDataInterval />\n      <param.hdl.InitializeTestBenchInputs />\n      <param.hdl.MultifileTestBench />\n      <param.hdl.TestBenchDataPostfix />\n      <param.hdl.TestReferencePostfix />\n      <param.hdl.UseFileIOInTestBench />\n      <param.hdl.IgnoreDataChecking />\n      <param.hdl.SimulationIterationLimit />\n      <param.hdl.UseFiAccelForTestBench />\n      <param.hdl.hdlVariables />\n      <param.hdl.hdlComputedVariables />\n      <param.hdl.InitializeBlockRAM />\n      <param.hdl.RAMArchitecture />\n      <param.hdl.PartitionFunctions />\n      <param.hdl.GenerateMLFcnBlock />\n      <param.hdl.GenerateXSGBlock />\n      <unset>\n        <param.hdl.Workflow />\n        <param.hdl.TargetLanguage />\n        <param.hdl.TargetPlatform />\n        <param.hdl.SynthesisTool />\n        <param.hdl.InputFrequency />\n        <param.hdl.TargetFrequency />\n        <param.hdl.IPCoreName />\n        <param.hdl.IPCoreVersion />\n        <param.hdl.AdditionalIPFiles />\n        <param.hdl.ExecutionMode />\n        <param.hdl.SynthesisToolChipFamily />\n        <param.hdl.SynthesisToolDeviceName />\n        <param.hdl.SynthesisToolPackageName />\n        <param.hdl.SynthesisToolSpeedValue />\n        <param.hdl.TargetInterface />\n        <param.hdl.CheckConformance />\n        <param.hdl.LaunchConformanceReport />\n        <param.hdl.GenerateEDAScripts />\n        <param.hdl.GenerateHDLCode />\n        <param.hdl.AdditionalSynthesisProjectFiles />\n        <param.hdl.CriticalPathSource />\n        <param.hdl.EmbeddedSystemTool />\n        <param.hdl.EmbeddedSystemProjectFolder />\n        <param.hdl.BitstreamBuildMode />\n        <param.hdl.ReferenceDesign />\n        <param.hdl.ReferenceDesignPath />\n        <param.hdl.LegacyDefaultTestFile />\n        <param.WorkingFolder />\n        <param.SpecifiedWorkingFolder />\n        <param.BuildFolder />\n        <param.SpecifiedBuildFolder />\n        <param.SearchPaths />\n        <param.hdl.MapPersistentVarsToRAM />\n        <param.hdl.RAMThreshold />\n        <param.hdl.RAMVariableNames />\n        <param.hdl.RegisterInputs />\n        <param.hdl.RegisterOutputs />\n        <param.hdl.DistributedPipelining />\n        <param.hdl.DistributedPipeliningPriority />\n        <param.hdl.PreserveDesignDelays />\n        <param.hdl.InputPipeline />\n        <param.hdl.OutputPipeline />\n        <param.hdl.PipelineVariables />\n        <param.hdl.ResourceSharing />\n        <param.hdl.ConstantMultiplierOptimization />\n        <param.hdl.LoopOptimization />\n        <param.GenerateComments />\n        <param.MATLABSourceComments />\n        <param.hdl.VHDLFileExt />\n        <param.hdl.VerilogFileExt />\n        <param.hdl.DateComment />\n        <param.hdl.UserComment />\n        <param.hdl.ModulePrefix />\n        <param.hdl.PackagePostfix />\n        <param.hdl.EntityConflictPostfix />\n        <param.hdl.ReservedWordPostfix />\n        <param.hdl.ClockProcessPostfix />\n        <param.hdl.ComplexRealPostfix />\n        <param.hdl.ComplexImagPostfix />\n        <param.hdl.PipelinePostfix />\n        <param.hdl.EnablePrefix />\n        <param.hdl.InlineConfigurations />\n        <param.hdl.UseRisingEdge />\n        <param.hdl.UseMatrixTypesInHDL />\n        <param.hdl.HDLCompileFilePostfix />\n        <param.hdl.HDLCompileInit />\n        <param.hdl.HDLCompileVHDLCmd />\n        <param.hdl.HDLCompileVerilogCmd />\n        <param.hdl.HDLCompileTerm />\n        <param.hdl.HDLSimFilePostfix />\n        <param.hdl.HDLSimInit />\n        <param.hdl.HDLSimCmd />\n        <param.hdl.HDLSimViewWaveCmd />\n        <param.hdl.HDLSimTerm />\n        <param.hdl.HDLSynthTool />\n        <var.hasSynthesisToolScript />\n        <var.toolSpecificEDAScript />\n        <param.hdl.HDLSynthFilePostfix />\n        <param.hdl.HDLSynthInit />\n        <param.hdl.HDLSynthCmd />\n        <param.hdl.HDLSynthTerm />\n        <param.hdl.HDLLintTool />\n        <var.LintToolScript />\n        <var.hasHDLLintTool />\n        <param.hdl.HDLLintInit />\n        <param.hdl.HDLLintCmd />\n        <param.hdl.HDLLintTerm />\n        <param.hdl.ResetType />\n        <param.hdl.ResetAssertedLevel />\n        <param.hdl.ResetInputPort />\n        <param.hdl.ClockInputPort />\n        <param.hdl.ClockEdge />\n        <param.hdl.ClockEnableInputPort />\n        <param.hdl.Oversampling />\n        <param.hdl.EnableRate />\n        <param.hdl.InputType />\n        <param.hdl.OutputType />\n        <param.hdl.ClockEnableOutputPort />\n        <param.hdl.ScalarizePorts />\n        <param.hdl.HDLCodingStandard />\n        <var.HDLCodingStandard_FilterPassingRules_enable />\n        <var.HDLCodingStandard_DetectDuplicateNamesCheck_enable />\n        <var.HDLCodingStandard_HDLKeywords_enable />\n        <var.HDLCodingStandard_ModuleInstanceEntityNameLength_enable />\n        <var.HDLCodingStandard_ModuleInstanceEntityNameLength_min />\n        <var.HDLCodingStandard_ModuleInstanceEntityNameLength_max />\n        <var.HDLCodingStandard_SignalPortParamNameLength_enable />\n        <var.HDLCodingStandard_SignalPortParamNameLength_min />\n        <var.HDLCodingStandard_SignalPortParamNameLength_max />\n        <var.HDLCodingStandard_MinimizeVariableUsage_enable />\n        <var.HDLCodingStandard_InitialStatements_enable />\n        <var.HDLCodingStandard_IfElseChain_enable />\n        <var.HDLCodingStandard_IfElseChain_length />\n        <var.HDLCodingStandard_IfElseNesting_enable />\n        <var.HDLCodingStandard_IfElseNesting_depth />\n        <var.HDLCodingStandard_MultiplierBitWidth_enable />\n        <var.HDLCodingStandard_MultiplierBitWidth_width />\n        <var.HDLCodingStandard_NonIntegerTypes_enable />\n        <var.HDLCodingStandard_LineLength_enable />\n        <var.HDLCodingStandard_LineLength_length />\n        <param.hdl.GenerateCosimTestBench />\n        <param.hdl.CosimLogOutputs />\n        <param.hdl.CosimTool />\n        <param.hdl.CosimRunMode />\n        <param.hdl.SimulateCosimTestBench />\n        <param.hdl.CosimClockHighTime />\n        <param.hdl.CosimClockLowTime />\n        <param.hdl.CosimHoldTime />\n        <param.hdl.CosimClockEnableDelay />\n        <param.hdl.CosimResetLength />\n        <param.hdl.GenerateFILTestBench />\n        <param.hdl.FILLogOutputs />\n        <param.hdl.FILBoardName />\n        <param.hdl.FILConnection />\n        <param.hdl.FILBoardIPAddress />\n        <param.hdl.FILBoardMACAddress />\n        <param.hdl.FILAdditionalFiles />\n        <param.hdl.SimulateFILTestBench />\n        <var.hasTestBench />\n        <param.hdl.GenerateHDLTestBench />\n        <param.hdl.SimulateGeneratedCode />\n        <param.hdl.SimulationTool />\n        <param.hdl.TestBenchPostfix />\n        <param.hdl.ForceClock />\n        <param.hdl.ClockHighTime />\n        <param.hdl.ClockLowTime />\n        <param.hdl.HoldTime />\n        <param.hdl.ForceClockEnable />\n        <param.hdl.TestBenchClockEnableDelay />\n        <param.hdl.ForceReset />\n        <param.hdl.ResetLength />\n        <param.hdl.HoldInputDataBetweenSamples />\n        <param.hdl.InputDataInterval />\n        <param.hdl.InitializeTestBenchInputs />\n        <param.hdl.MultifileTestBench />\n        <param.hdl.TestBenchDataPostfix />\n        <param.hdl.TestReferencePostfix />\n        <param.hdl.UseFileIOInTestBench />\n        <param.hdl.IgnoreDataChecking />\n        <param.hdl.SimulationIterationLimit />\n        <param.hdl.UseFiAccelForTestBench />\n        <param.hdl.hdlVariables />\n        <param.hdl.hdlComputedVariables />\n        <param.hdl.InitializeBlockRAM />\n        <param.hdl.RAMArchitecture />\n        <param.hdl.PartitionFunctions />\n        <param.hdl.GenerateMLFcnBlock />\n        <param.hdl.GenerateXSGBlock />\n      </unset>\n    </profile>\n    <param.objective>option.objective.c</param.objective>\n    <param.WorkflowStep>generateCode</param.WorkflowStep>\n    <param.TestSnippets>\n      <item>demo_start_v2</item>\n    </param.TestSnippets>\n    <param.DefaultImportExportVariable />\n    <param.UseGlobals>option.UseGlobals.No</param.UseGlobals>\n    <param.outputfile>${PROJECT_ROOT}/hmmParameters_mex.mexmaci64</param.outputfile>\n    <param.version />\n    <param.HasECoderFeatures>true</param.HasECoderFeatures>\n    <param.mex.mainhtml />\n    <param.grt.mainhtml />\n    <param.CallGeneratedCodeFromTest>true</param.CallGeneratedCodeFromTest>\n    <param.AutoInferDefaultFile />\n    <param.AutoInferUseVariableSize />\n    <param.AutoInferUseUnboundedSize />\n    <param.AutoInferVariableSizeThreshold />\n    <param.AutoInferUnboundedSizeThreshold />\n    <param.EnableFixedPointStep />\n    <param.EnableScreener>true</param.EnableScreener>\n    <param.AnnotationChecksum>3530211709</param.AnnotationChecksum>\n    <var.LegacyTarget />\n    <var.MirrorOnOpen>false</var.MirrorOnOpen>\n    <param.FixedPointEnabled>false</param.FixedPointEnabled>\n    <var.redirectedInputTypeData />\n    <var.DismissScreener>true</var.DismissScreener>\n    <param.unifiedParamStorage />\n    <var.gc.lastOutputRoot>codegen/mex/hmmParameters</var.gc.lastOutputRoot>\n    <var.gc.preBuildChecksum>4179426945</var.gc.preBuildChecksum>\n    <var.cfi.lastOutputRoot>codegen/mex/hmmParameters</var.cfi.lastOutputRoot>\n    <var.cfi.preBuildChecksum>1281319812</var.cfi.preBuildChecksum>\n    <var.lastCfiTestSnippet>demo_start_v2</var.lastCfiTestSnippet>\n    <var.outdatedOnRestore />\n    <var.lastUserSourceChecksum>&lt;?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?&gt;&lt;checksum&gt;&lt;includedFiles&gt;&lt;file&gt;/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/code/mexfiles/hmmParameters.m&lt;/file&gt;&lt;/includedFiles&gt;&lt;value&gt;1634473109&lt;/value&gt;&lt;/checksum&gt;</var.lastUserSourceChecksum>\n    <var.sourceSetState>&lt;?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?&gt;&lt;sourceModel&gt;&lt;primarySourceFiles&gt;&lt;file&gt;/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/code/mexfiles/hmmParameters.m&lt;/file&gt;&lt;/primarySourceFiles&gt;&lt;fixedPointSourceFiles/&gt;&lt;fixedPointSourceRegistered&gt;false&lt;/fixedPointSourceRegistered&gt;&lt;fixedPointSourceSelected&gt;false&lt;/fixedPointSourceSelected&gt;&lt;/sourceModel&gt;</var.sourceSetState>\n    <param.forceMexBuild>false</param.forceMexBuild>\n    <param.configImportActive>false</param.configImportActive>\n    <var.boundToGui>true</var.boundToGui>\n    <param.mex.outputfile>hmmParameters_mex</param.mex.outputfile>\n    <param.grt.outputfile>hmmParameters</param.grt.outputfile>\n    <param.artifact>option.target.artifact.mex</param.artifact>\n    <param.outputfile>${PROJECT_ROOT}/hmmParameters_mex.mexmaci64</param.outputfile>\n    <param.EnableAutoExtrinsicCalls>true</param.EnableAutoExtrinsicCalls>\n    <param.UsePreconditions>false</param.UsePreconditions>\n    <param.FeatureFlags />\n    <param.FixedPointMode>option.FixedPointMode.None</param.FixedPointMode>\n    <param.AutoScaleLoopIndexVariables />\n    <param.ComputedFixedPointData />\n    <param.UserFixedPointData />\n    <param.DefaultWordLength>16</param.DefaultWordLength>\n    <param.DefaultFractionLength>4</param.DefaultFractionLength>\n    <param.FixedPointSafetyMargin>0</param.FixedPointSafetyMargin>\n    <param.FixedPointFimath>fimath('RoundingMethod', 'Floor', 'OverflowAction', 'Wrap', 'ProductMode', 'FullPrecision', 'MaxProductWordLength', 128, 'SumMode', 'FullPrecision', 'MaxSumWordLength', 128)</param.FixedPointFimath>\n    <param.FixedPointTypeSource>option.FixedPointTypeSource.SimAndDerived</param.FixedPointTypeSource>\n    <param.StaticAnalysisTimeout />\n    <param.StaticAnalysisGlobalRangesOnly>false</param.StaticAnalysisGlobalRangesOnly>\n    <param.LogAllIOValues>false</param.LogAllIOValues>\n    <param.DetectOverflows>false</param.DetectOverflows>\n    <param.LogHistogram>false</param.LogHistogram>\n    <param.ShowCoverage>true</param.ShowCoverage>\n    <param.ExcludedFixedPointVerificationFiles />\n    <param.ExcludedFixedPointSimulationFiles />\n    <param.InstrumentedBuildChecksum />\n    <param.FixedPointStaticAnalysisChecksum />\n    <param.InstrumentedMexFile />\n    <param.FixedPointValidationChecksum />\n    <param.FixedPointSourceCodeChecksum />\n    <param.FixedPointFunctionReplacements />\n    <param.OptimizeWholeNumbers>true</param.OptimizeWholeNumbers>\n    <param.ContainerTypes>false</param.ContainerTypes>\n    <param.GeneratedFixedPointFileSuffix>_fixpt</param.GeneratedFixedPointFileSuffix>\n    <param.PlotFunction />\n    <param.SDIPlot>false</param.SDIPlot>\n    <param.EnableCodeEfficiencyChecks>false</param.EnableCodeEfficiencyChecks>\n    <param.DefaultFixedPointSignedness>option.DefaultFixedPointSignedness.Automatic</param.DefaultFixedPointSignedness>\n    <param.FixedPointTypeProposalMode>option.FixedPointTypeProposalMode.ProposeFractionLengths</param.FixedPointTypeProposalMode>\n    <param.EnableFixedPointStep />\n    <var.lastFixedPointAction />\n    <var.lastSimContext />\n    <var.lastVerifyContext />\n    <param.fpDataRoot />\n    <param.fpUserFileChecksum />\n    <var.snapshotChecksum />\n    <unset>\n      <param.DefaultImportExportVariable />\n      <param.UseGlobals />\n      <param.outputfile />\n      <param.version />\n      <param.HasECoderFeatures />\n      <param.mex.mainhtml />\n      <param.grt.mainhtml />\n      <param.CallGeneratedCodeFromTest />\n      <param.AutoInferDefaultFile />\n      <param.AutoInferUseVariableSize />\n      <param.AutoInferUseUnboundedSize />\n      <param.AutoInferVariableSizeThreshold />\n      <param.AutoInferUnboundedSizeThreshold />\n      <param.EnableFixedPointStep />\n      <param.EnableScreener />\n      <var.LegacyTarget />\n      <var.MirrorOnOpen />\n      <param.FixedPointEnabled />\n      <var.redirectedInputTypeData />\n      <param.unifiedParamStorage />\n      <var.outdatedOnRestore />\n      <param.configImportActive />\n      <param.mex.outputfile />\n      <param.grt.outputfile />\n      <param.EnableAutoExtrinsicCalls />\n      <param.UsePreconditions />\n      <param.FeatureFlags />\n      <param.FixedPointMode />\n      <param.AutoScaleLoopIndexVariables />\n      <param.ComputedFixedPointData />\n      <param.UserFixedPointData />\n      <param.DefaultWordLength />\n      <param.DefaultFractionLength />\n      <param.FixedPointSafetyMargin />\n      <param.FixedPointFimath />\n      <param.FixedPointTypeSource />\n      <param.StaticAnalysisTimeout />\n      <param.StaticAnalysisGlobalRangesOnly />\n      <param.LogAllIOValues />\n      <param.DetectOverflows />\n      <param.LogHistogram />\n      <param.ShowCoverage />\n      <param.ExcludedFixedPointVerificationFiles />\n      <param.ExcludedFixedPointSimulationFiles />\n      <param.InstrumentedBuildChecksum />\n      <param.FixedPointStaticAnalysisChecksum />\n      <param.InstrumentedMexFile />\n      <param.FixedPointValidationChecksum />\n      <param.FixedPointSourceCodeChecksum />\n      <param.FixedPointFunctionReplacements />\n      <param.OptimizeWholeNumbers />\n      <param.ContainerTypes />\n      <param.GeneratedFixedPointFileSuffix />\n      <param.PlotFunction />\n      <param.SDIPlot />\n      <param.EnableCodeEfficiencyChecks />\n      <param.DefaultFixedPointSignedness />\n      <param.FixedPointTypeProposalMode />\n      <var.lastFixedPointAction />\n      <var.lastSimContext />\n      <var.lastVerifyContext />\n      <param.fpDataRoot />\n      <param.fpUserFileChecksum />\n      <var.snapshotChecksum />\n    </unset>\n    <fileset.entrypoints>\n      <file custom-data-expanded=\"false\" value=\"${PROJECT_ROOT}/hmmParameters.m\">\n        <Inputs fileName=\"hmmParameters.m\" functionName=\"hmmParameters\">\n          <Input Name=\"exist_edge_on\">\n            <Class>double</Class>\n            <Size>1 x 40</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"exist_edge_off\">\n            <Class>double</Class>\n            <Size>1 x 40</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"ang_dev_on\">\n            <Class>double</Class>\n            <Size>1 x 181</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"ang_dev_off\">\n            <Class>double</Class>\n            <Size>1 x 181</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"node_idx\">\n            <Class>double</Class>\n            <Size>:inf x 1</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>true</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"Psi_t\">\n            <Class>double</Class>\n            <Size>2 x 2</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"pi_var\">\n            <Class>double</Class>\n            <Size>2 x 1</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"y_h\">\n            <Class>double</Class>\n            <Size>:inf x 1</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>true</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"distances\">\n            <Class>double</Class>\n            <Size>:inf x 1</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>true</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"range_dis\">\n            <Class>double</Class>\n            <Size>1 x 40</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"nexist_edge_on\">\n            <Class>double</Class>\n            <Size>1 x 40</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"nexist_edge_off\">\n            <Class>double</Class>\n            <Size>1 x 40</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"prob_on\">\n            <Class>double</Class>\n            <Size>1 x 1</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"prob_off\">\n            <Class>double</Class>\n            <Size>1 x 1</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"prob_stay_on\">\n            <Class>double</Class>\n            <Size>1 x 1</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"prob_leave_off\">\n            <Class>double</Class>\n            <Size>1 x 1</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"prob_leave_on\">\n            <Class>double</Class>\n            <Size>1 x 1</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"prob_stay_off\">\n            <Class>double</Class>\n            <Size>1 x 1</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"ang_dev\">\n            <Class>double</Class>\n            <Size>:inf x 1</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>true</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"range_ang\">\n            <Class>double</Class>\n            <Size>1 x 181</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n        </Inputs>\n      </file>\n    </fileset.entrypoints>\n    <fileset.testbench>\n      <file>/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/demo_start_v2.m</file>\n    </fileset.testbench>\n    <build-deliverables>\n      <file location=\"/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/code/mexfiles\" name=\"hmmParameters_mex.mexmaci64\" optional=\"false\">/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/code/mexfiles/hmmParameters_mex.mexmaci64</file>\n    </build-deliverables>\n    <workflow />\n    <matlab>\n      <root>/Applications/MATLAB_R2015b.app</root>\n      <toolboxes>\n        <toolbox name=\"matlabhdlcoder\" />\n        <toolbox name=\"fixedpoint\" />\n        <toolbox name=\"embeddedcoder\" />\n        <toolbox name=\"matlabcoder\" />\n      </toolboxes>\n      <toolbox>\n        <matlabhdlcoder>\n          <enabled>true</enabled>\n        </matlabhdlcoder>\n      </toolbox>\n      <toolbox>\n        <fixedpoint>\n          <enabled>true</enabled>\n        </fixedpoint>\n      </toolbox>\n      <toolbox>\n        <embeddedcoder>\n          <enabled>true</enabled>\n        </embeddedcoder>\n      </toolbox>\n      <toolbox>\n        <matlabcoder>\n          <enabled>true</enabled>\n        </matlabcoder>\n      </toolbox>\n    </matlab>\n    <platform>\n      <unix>true</unix>\n      <mac>true</mac>\n      <windows>false</windows>\n      <win2k>false</win2k>\n      <winxp>false</winxp>\n      <vista>false</vista>\n      <linux>false</linux>\n      <solaris>false</solaris>\n      <osver>10.12.6</osver>\n      <os32>false</os32>\n      <os64>true</os64>\n      <arch>maci64</arch>\n      <matlab>true</matlab>\n    </platform>\n  </configuration>\n</deployment-project>"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/mexfiles/mexRemoveVotes_v3_scale.c",
    "content": "/*\n *  Function:   mexRemoveVote_v2\n *\n *  Input:      Kernel value matrices (regular and flipped), and dimensional\n *              arguments, along with the voting map\n *\n *  Output:     Updated voting map\n *\n *  Author:     Ron Tal\n *\n *\n *  Usage:      Compiled and called through Matlab\n *\n */\n\n/* Include the following header files */\n# include \"mex.h\"\n#include \"matrix.h\"\n#include <stdio.h>\n#include <math.h>\n\n#define PI 3.141\n#define RMAX 400.0\n/* Input Arguments */\nextern mxArray *mxCreateSharedDataCopy(const mxArray *pr);\n\n#define\tEDG_L\tprhs[0]\n#define\tEDG_G\tprhs[1]\n#define KERN    prhs[2]\n#define KERNF   prhs[3]\n#define R_RES   prhs[4]\n#define T_RES   prhs[5]\n#define PP      prhs[6]\n#define KMAX    prhs[7]\n#define MAP     prhs[8]\n#define SCALE   prhs[9]\n\n\n/* Output Arguments */\n#define\tNMAP\tplhs[0]\n\n/* STRUCTS */\ntypedef struct \n{\n    int m;\n    int n;\n} matPoint;\n\ntypedef struct \n{\n    double r;\n    double th;\n} houghPoint;\n/* Global variables: */\n\nmwSize mmap, nmap, m_edge_loc, n_edge_loc, m_edge_grad, n_edge_grad, m_kern, m_kern_f;\ndouble* edge_loc, * edge_grad, * pp, r_res, th_res;\ndouble* map, * scale;\nmxArray* kernels, *kernels_flip, * k_max;\ndouble *outMatrix;\n\n\nint round_f (double val)\n{\n    return floor(val + 0.5);\n}\ndouble round2frac(double val, double res)\n{\n    double lrg = val/res;\n    double rnd = (double) round_f(lrg);\n    return rnd*res;\n}\nmatPoint hough2mat(double r, double th, double rres, double thres)\n{\n    matPoint val;\n    val.n = round_f((r + (double)RMAX**scale ) / rres  + 1);\n    val.m = round_f(th / thres + 1);\n    return val;\n}\nhoughPoint mat2hough(int m, int n, double rres, double thres)\n{\n    houghPoint val;\n    val.th = round2frac(m*thres, thres);\n    val.r = round2frac(n*rres - (double)RMAX**scale, rres);\n    return val;\n}\nvoid houghRemoveVotes(matPoint center, mxArray * k, mxArray * k_f, mxArray * k_m)\n{\n    /* Get Kernel properties */\n    int i;\n    int m = center.m;\n    int n = center.n;\n    int m_ker, n_max, m_max, n_lim_pos, n_lim_neg, m_lim_pos, m_lim_neg;\n    double * kernel;\n    double * kernel_flip;\n    double * k_mx;\n    double val;\n    m_ker = mxGetM(k);\n    \n    kernel = mxGetPr(k);\n    \n    kernel_flip = mxGetPr(k_f);\n    k_mx = mxGetPr(k_m);\n    n_max = k_mx[0];\n    m_max = k_mx[1];\n    n_lim_pos = n + (n_max-1)/2 - 1;\n    n_lim_neg = n - (n_max-1)/2 - 1;\n    m_lim_pos = m + (m_max-1)/2 - 1;\n    m_lim_neg = m - (m_max-1)/2 - 1;\n\n    /* Vote for each valid kernel value */\n    for (i = 0; i < m_ker; i++)\n    {\n        int m_on_map;\n        int n_on_map;\n        \n         m_on_map = m_lim_neg + (int)kernel[m_ker + i] - 1;\n         n_on_map = n_lim_neg + (int)kernel[i] - 1;\n         \n\n        /* Out of R bounds: do nothing */\n        if (n_on_map <= 0 ||n_on_map >= nmap) continue;\n        /* Handle wraparound in TH domain: to be added later: */\n        else if( m_on_map < 0) \n        {   \n\n            m_on_map = mmap + m_on_map ;\n            n_on_map =  nmap - n_on_map ;\n            if (n_on_map < 0 ||n_on_map >= nmap) continue;\n            if(map[(n_on_map )*mmap + m_on_map] - kernel[2*m_ker + (m_ker - i - 1)] >= 0)\n                map[(n_on_map )*mmap + m_on_map] -= kernel[2*m_ker + (m_ker - i - 1)];\n            \n        }else if(m_on_map >= mmap)\n        {\n\n            m_on_map = m_on_map - mmap ;\n            n_on_map =  nmap - n_on_map ;\n            if (map[(n_on_map )*mmap + m_on_map] - kernel[2*m_ker + (m_ker - i)] >= 0)\n                map[(n_on_map )*mmap + m_on_map] -= kernel[2*m_ker + (m_ker - i)]; \n            \n        }\n        /* No wraparound */\n        else\n        {\n\n            if(map[(n_on_map )*mmap + m_on_map] - kernel[2*m_ker + i] >= 0)\n                map[(n_on_map )*mmap + m_on_map] -= kernel[2*m_ker + i];\n        }\n    }\n\n    \n    \n}\n\n\nvoid loopThroughRemove()\n{\n    int i = 0;\n    for (i = 0; i < m_edge_loc;i++ )\n    {\n         double r, mag;\n\t\t double * kernel, * kernel_flip, * k_m, * m_l;\n\t\t int r_th, ind;\n         matPoint center;\n         double x = (double)edge_loc[i] - (double)pp[0];\n         double y = (double)edge_loc[m_edge_loc + i] - (double)pp[1];\n         double th = edge_grad[i];\n\n         if (th == 4.0) continue; \n         if (th < 0) th += PI;\n         if (th > PI) th -= PI;\n         th = PI - th;\n         r = x * cos(th) + y * sin(th);\n         \n         th = round2frac(th, th_res);\n         r = round2frac(r, r_res);\n         r_th = round_f(- x * sin(th) + y * cos(th));\n\n         if (r_th > (int)(400**scale)) r_th = (int)(400**scale); else if(r_th < - (int)(400**scale)) r_th = -(int)(400**scale);\n         \n         if (r_th == 0)\n         {\n             ind = 0;\n         } \n         else\n         {\n             ind = r_th + (double)RMAX**scale;\n         }\n         kernel = mxGetCell(kernels, ind);\n         kernel_flip = mxGetCell(kernels_flip, ind);\n         k_m = mxGetCell(k_max, ind);\n         \n         /* Center of kernel on voting map */\n         center = hough2mat(r, th, r_res, th_res);\n         houghRemoveVotes(center,kernel, kernel_flip, k_m);         \n    }\n    \n    \n}\n\n\nvoid mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )\n/*\n *  Function:           mexFunction\n *\n *  Inputs: nrhs ->     Integer representing the number of input arguments\n *                      sent from Matlab.\n *\n *          prhs[] ->   An mxArray structure of size nrhs holding pointers\n *                      to arguments sent from Matlab.\n *\n *          nlhs  ->    Integer representing the number of output arguments\n *                      requested from Matlab.\n *\n *          plhs[] ->   An mxArray structure of size nlhs holding pointers\n *                      to the location of output arguments.\n *\n *  Outputs:            (void)\n *\n *  Functionality:      Analogous to a 'main' function. This function will\n *                      be activated by default when Matlab calls this C\n *                      function. Used to interface between C and Matlab,\n *                      as to ensure output is in the location and format\n *                      Matlab expecs.\n */\n{\n    /* Declerations and initializations */\n\n    /* Check for proper number of arguments */\n    if (nrhs != 10) { \n\tmexErrMsgTxt(\"Nine input arguments required.\");\n    } \n\n    /* Get edge locations */\n    m_edge_loc = mxGetM(EDG_L); \n    n_edge_loc = mxGetN(EDG_L);\n    edge_loc = mxGetPr(EDG_L);\n    if (n_edge_loc != 2) { \n        mexErrMsgTxt(\"Wrong edge locations format.\");\n    } \n    /* Get edge gradients */\n    m_edge_grad = mxGetM(EDG_G); \n    n_edge_grad = mxGetN(EDG_G);\n    if (n_edge_grad != 1) { \n        mexErrMsgTxt(\"Wrong edge gradient format.\");\n    } \n    if (m_edge_loc != m_edge_grad) { \n        mexErrMsgTxt(\"Locations and gradients must correspond.\");\n    } \n    \n    edge_grad = mxGetPr(EDG_G);\n    /* Get pp */\n    pp = mxGetPr(PP);\n    scale=mxGetPr(SCALE);\n    r_res = mxGetScalar(R_RES);\n    th_res = mxGetScalar(T_RES);\n    /* Get map*/\n    nmap = (int)(800.0**scale/r_res) + 1;\n    mmap = (int)(3.141/th_res) + 1;\n    map = mxGetPr(MAP);\n    \n    /* Get Kernels*/\n    m_kern = mxGetNumberOfElements(KERN); \n    m_kern_f = mxGetNumberOfElements(KERNF);\n    kernels = KERN;\n    kernels_flip = KERNF;\n    k_max = KMAX;\n    loopThroughRemove();\n    NMAP=mxCreateSharedDataCopy(MAP);\n    return;\n}\n/*end mexFunction*/\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/mexfiles/mexVoteEdges_v3_scale.c",
    "content": "/*\n *  Function:   mexVoteEdges_v2\n *\n *  Input:      Kernel value matrices (regular and flipped), and dimensional\n *              arguments, along with the voting map\n *\n *  Output:     Updated voting map\n *\n *  Author:     Ron Tal\n *\n *\n *  Usage:      Compiled and called through Matlab\n *\n */\n\n/* Include the following header files */\n# include \"mex.h\"\n#include \"matrix.h\"\n#include <stdio.h>\n#include <math.h>\n\n\n#define PI 3.141\n#define RMAX 400.0\n/* Input Arguments */\n\n#define\tEDG_L\tprhs[0]\n#define\tEDG_G\tprhs[1]\n#define KERN    prhs[2]\n#define KERNF   prhs[3]\n#define R_RES   prhs[4]\n#define T_RES   prhs[5]\n#define PP      prhs[6]\n#define KMAX    prhs[7]\n#define SCALE   prhs[8]\n\n\n/* Output Arguments */\n#define\tNMAP\tplhs[0]\n\n/* STRUCTS */\ntypedef struct \n{\n    int m;\n    int n;\n} matPoint;\n\ntypedef struct \n{\n    double r;\n    double th;\n} houghPoint;\n\n/* Global variables: */\n\nmwSize mmap, nmap, m_edge_loc, n_edge_loc, m_edge_grad, n_edge_grad, m_kern, m_kern_f;\ndouble* edge_loc, * edge_grad, * pp, r_res, th_res;\ndouble* map,*scale;\nmxArray* kernels, *kernels_flip, * k_max;\n\nint round_f (double val)\n{\n    return floor(val + 0.5);\n}\ndouble round2frac(double val, double res)\n{\n    double lrg = val/res;\n    double rnd = (double) round_f(lrg);\n    return rnd*res;\n}\nmatPoint hough2mat(double r, double th, double rres, double thres)\n{\n    matPoint val;\n    val.n = round_f((r + (double)RMAX**scale ) / rres  + 1);\n    val.m = round_f(th / thres + 1);\n    return val;\n}\nhoughPoint mat2hough(int m, int n, double rres, double thres)\n{\n    houghPoint val;\n    val.th = round2frac(m*thres, thres);\n    val.r = round2frac(n*rres - (double)RMAX**scale, rres);\n    return val;\n}\nvoid houghVoteMap(matPoint center, mxArray * k, mxArray * k_f, mxArray * k_m, int x, int y, int r_th, int xd, int yd)\n{\n    /* Get Kernel properties */\n    int i;\n    int m = center.m;\n    int n = center.n;\n    int m_ker, n_max, m_max, n_lim_pos, n_lim_neg, m_lim_pos, m_lim_neg, n_ker;\n    double * kernel;\n    double * kernel_flip;\n    double * k_mx;\n    double val;\n\tdouble kvalue; \n\tint xx, yy;\n    m_ker = mxGetM(k);\n\tn_ker = mxGetN(k);\n    kernel = mxGetPr(k);\n    \n    kernel_flip = mxGetPr(k_f);\n    k_mx = mxGetPr(k_m);\n    n_max = k_mx[0];\n    m_max = k_mx[1];\n    n_lim_pos = n + (n_max-1)/2 - 1;\n    n_lim_neg = n - (n_max-1)/2 - 1;\n    m_lim_pos = m + (m_max-1)/2 - 1;\n    m_lim_neg = m - (m_max-1)/2 - 1;\n\txx = round_f(x + (double)pp[0]);\n\tyy = round_f(y + (double)pp[1]);\n\n    /* Vote for each valid kernel value */\n    for (i = 0; i < m_ker; i++)\n    {\n        int m_on_map;\n        int n_on_map;\n        \n        m_on_map = m_lim_neg + (int)kernel[m_ker + i] - 1;\n        n_on_map = n_lim_neg + (int)kernel[i] - 1;\n\n        /* Out of R bounds: do nothing */\n        if (n_on_map <= 0 ||n_on_map >= nmap) continue; \n        /* Handle wraparound in TH domain: to be added later: */\n        else if( m_on_map < 0) \n        {   \n            m_on_map = mmap + m_on_map ;\n            n_on_map =  nmap - n_on_map ;\n            if (n_on_map < 0 ||n_on_map >= nmap) continue;\n\n\t\t\tkvalue = kernel[2*m_ker + (m_ker - i - 1)]; \n            map[(n_on_map )*mmap + m_on_map] += kvalue;\n       \n        }else if(m_on_map >= mmap)\n        {\n            m_on_map = m_on_map - mmap ;\n            n_on_map =  nmap - n_on_map ;\n\n\t\t\tkvalue = kernel[2*m_ker + (m_ker - i)]; \n            map[(n_on_map )*mmap + m_on_map] += kvalue; \n            \n        }\n        /* No wraparound */\n        else\n        {\n\t\t\tkvalue = kernel[2*m_ker + i]; \n            map[(n_on_map )*mmap + m_on_map] += kvalue;\n        }\n\n    }\n\n    \n}\n\n\nvoid loopThrough()\n{\n\tint xx, yy;\n\tint i = 0;\n    for (i = 0; i < m_edge_loc;i++ )\n    {\n         double r, th;\n         double * kernel, * kernel_flip, * k_m, * m_l;\n\t\t int r_th;\n         matPoint center;\n\t\t int xx, yy, ind;\n \t\t \n         double x = (double)edge_loc[i] - (double)pp[0];\n         double y = (double)edge_loc[m_edge_loc + i] - (double)pp[1];\n         \n\t\t int xd = round_f((double)edge_loc[i]);\n\t\t int yd = round_f((double)edge_loc[m_edge_loc + i]);\n\n\t\t th = edge_grad[i];\n         if (th == 4.0) continue; \n         if (th < 0) th += PI;\n         if (th > PI) th -= PI;\n         th = PI - th;\n         r = x * cos(th) + y * sin(th);\n                  \n         th = round2frac(th, th_res);\n         r = round2frac(r, r_res);  \n         r_th = round_f(- x * sin(th) + y * cos(th));\n\n         if (r_th > (int)(400**scale)) r_th = (int)(400**scale); else if(r_th < - (int)(400**scale)) r_th = -(int)(400**scale);\n         \n         if (r_th == 0)\n         {\n             ind = 0;\n         } \n         else\n         {\n             ind = r_th + (double)RMAX**scale;\n         }\n         kernel = mxGetCell(kernels, ind);\n         kernel_flip = mxGetCell(kernels_flip, ind);\n         k_m = mxGetCell(k_max, ind);\n \n         /* Center of kernel on voting map */\n         center = hough2mat(r, th, r_res, th_res);\n         houghVoteMap(center,kernel, kernel_flip, k_m, x, y, r_th, xd, yd);        \n    }\n    \n    \n}\nvoid mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )\n/*\n *  Function:           mexFunction\n *\n *  Inputs: nrhs ->     Integer representing the number of input arguments\n *                      sent from Matlab.\n *\n *          prhs[] ->   An mxArray structure of size nrhs holding pointers\n *                      to arguments sent from Matlab.\n *\n *          nlhs  ->    Integer representing the number of output arguments\n *                      requested from Matlab.\n *\n *          plhs[] ->   An mxArray structure of size nlhs holding pointers\n *                      to the location of output arguments.\n *\n *  Outputs:            (void)\n *\n *  Functionality:      Analogous to a 'main' function. This function will\n *                      be activated by default when Matlab calls this C\n *                      function. Used to interface between C and Matlab,\n *                      as to ensure output is in the location and format\n *                      Matlab expecs.\n */\n{\n    /* Check for proper number of arguments */\n    if (nrhs != 9) { \n\tmexErrMsgTxt(\"Eight input arguments required.\");\n    } \n    printf(\"Inside C function_v2\\n\");\n    /* Get edge locations */\n    m_edge_loc = mxGetM(EDG_L); \n    n_edge_loc = mxGetN(EDG_L);\n    edge_loc = mxGetPr(EDG_L);\n    if (n_edge_loc != 2) { \n        mexErrMsgTxt(\"Wrong edge locations format.\");\n    } \n    /* Get edge gradients */\n    m_edge_grad = mxGetM(EDG_G); \n    n_edge_grad = mxGetN(EDG_G);\n    if (n_edge_grad != 1) { \n        mexErrMsgTxt(\"Wrong edge gradient format.\");\n    } \n    if (m_edge_loc != m_edge_grad) { \n        mexErrMsgTxt(\"Locations and gradients must correspond.\");\n    } \n    \n    edge_grad = mxGetPr(EDG_G);\n    /* Get pp */\n    pp = mxGetPr(PP);\n    r_res = mxGetScalar(R_RES);\n    th_res = mxGetScalar(T_RES);\n    scale=mxGetPr(SCALE);\n    /* Get map*/\n    nmap = (int)(800**scale/r_res) + 1;\n    mmap = (int)(3.141/th_res) + 1;\n    NMAP = mxCreateDoubleMatrix(mmap, nmap, mxREAL);\n    map = mxGetPr(NMAP);\n    /* Get Kernels*/\n    m_kern = mxGetNumberOfElements(KERN); \n    m_kern_f = mxGetNumberOfElements(KERNF);\n    kernels = KERN;\n    kernels_flip = KERNF;\n    k_max = KMAX;\n\tloopThrough();\n    return;\n}\n/*end mexFunction*/"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/mexfiles/returnLines.m",
    "content": "function [begin_points,end_points,lslength,startpositions,endpositions]=returnLines(points_proj,final_labels)\ncount = 0;\non_seg = false;\nbegin_pointsT = zeros(20,2);\ncounter_begin_points=1;\nend_pointsT = zeros(20,2);\ncounter_end_points=1;\nlslengthT = zeros(20,1);\ncounter_lslength=1;\nstartpos = 0;\nstartpositionsT = zeros(20,1);\ncounter_startpositions=1;\nendpositionsT = zeros(20,1);\ncounter_endpositions=1;\n\nfor i = 1:length(final_labels);\n   if ~on_seg\n       if final_labels(i) == 1\n           begin_pointsT(counter_begin_points,:)=points_proj(i,:);\n           counter_begin_points=counter_begin_points+1;\n           startpositionsT(counter_startpositions) = i;\n           counter_startpositions=counter_startpositions+1;\n           startpos = i;\n           on_seg = true;\n           count = count + 1;\n       end\n   elseif i == length(final_labels)\n       end_pointsT(counter_end_points,:) =points_proj(i,:);\n       counter_end_points=counter_end_points+1;\n       endpositionsT(counter_endpositions) = i;\n       counter_endpositions=counter_endpositions+1;\n       lslengthT(counter_lslength) = i-startpos;\n       counter_lslength=counter_lslength+1;\n       on_seg = false;\n   elseif final_labels(i) == 0\n       end_pointsT(counter_end_points,:) = points_proj(i-1,:);\n       counter_end_points=counter_end_points+1;\n       endpositionsT(counter_endpositions) = i-1;\n       counter_endpositions=counter_endpositions+1;\n       lslengthT(counter_lslength) = i-startpos;\n       counter_lslength=counter_lslength+1;\n       on_seg = false;\n   end\nend\n\nbegin_points = begin_pointsT(1:counter_begin_points-1,:);\nend_points =end_pointsT(1:counter_end_points-1,:);\nlslength =lslengthT(1:counter_lslength-1); \nstartpositions =startpositionsT(1:counter_startpositions);\nendpositions =endpositionsT(1:counter_endpositions-1);\n\nend\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/mexfiles/returnLines.prj",
    "content": "<deployment-project plugin=\"plugin.coder\" plugin-version=\"R2015b\">\n  <configuration build-checksum=\"980166774\" file=\"/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/code/mexfiles/returnLines.prj\" location=\"/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/code/mexfiles\" name=\"returnLines\" target=\"target.unifiedcoder\" target-name=\"MATLAB Coder\">\n    <profile key=\"profile.mex\">\n      <param.BuiltInstrumentedMex />\n      <param.RanInstrumentedMex />\n      <param.WorkingFolder />\n      <param.SpecifiedWorkingFolder />\n      <param.BuildFolder>option.BuildFolder.Project</param.BuildFolder>\n      <param.SpecifiedBuildFolder />\n      <param.SearchPaths />\n      <param.ResponsivenessChecks />\n      <param.ExtrinsicCalls />\n      <param.IntegrityChecks />\n      <param.SaturateOnIntegerOverflow />\n      <param.GlobalDataSyncMethod>option.GlobalDataSyncMethod.SyncAlways</param.GlobalDataSyncMethod>\n      <param.EnableVariableSizing />\n      <param.DynamicMemoryAllocation />\n      <param.DynamicMemoryAllocationThreshold />\n      <param.StackUsageMax />\n      <param.FilePartitionMethod />\n      <param.GenerateComments />\n      <param.MATLABSourceComments />\n      <param.ReservedNameArray />\n      <param.EnableDebugging />\n      <param.GenerateReport />\n      <param.LaunchReport />\n      <param.DefaultTestFile />\n      <param.MergeInstrumentationResults />\n      <param.VerificationMode>option.VerificationMode.None</param.VerificationMode>\n      <param.VerificationStatus>option.VerificationStatus.Passed</param.VerificationStatus>\n      <param.CustomSourceCode />\n      <param.CustomHeaderCode />\n      <param.CustomInitializer />\n      <param.CustomTerminator />\n      <param.CustomInclude />\n      <param.CustomSource />\n      <param.CustomLibrary />\n      <param.PostCodeGenCommand />\n      <param.mex.GenCodeOnly>false</param.mex.GenCodeOnly>\n      <param.ConstantFoldingTimeout />\n      <param.RecursionLimit />\n      <param.PreserveVariableNames />\n      <param.TargetLang />\n      <param.EchoExpressions />\n      <param.InlineThreshold />\n      <param.InlineThresholdMax />\n      <param.InlineStackLimit />\n      <param.EnableMemcpy />\n      <param.MemcpyThreshold />\n      <param.EnableOpenMP />\n      <param.InitFltsAndDblsToZero />\n      <param.ConstantInputs />\n      <unset>\n        <param.BuiltInstrumentedMex />\n        <param.RanInstrumentedMex />\n        <param.WorkingFolder />\n        <param.SpecifiedWorkingFolder />\n        <param.BuildFolder />\n        <param.SpecifiedBuildFolder />\n        <param.SearchPaths />\n        <param.ResponsivenessChecks />\n        <param.ExtrinsicCalls />\n        <param.IntegrityChecks />\n        <param.SaturateOnIntegerOverflow />\n        <param.EnableVariableSizing />\n        <param.DynamicMemoryAllocation />\n        <param.DynamicMemoryAllocationThreshold />\n        <param.StackUsageMax />\n        <param.FilePartitionMethod />\n        <param.GenerateComments />\n        <param.MATLABSourceComments />\n        <param.ReservedNameArray />\n        <param.EnableDebugging />\n        <param.GenerateReport />\n        <param.LaunchReport />\n        <param.DefaultTestFile />\n        <param.MergeInstrumentationResults />\n        <param.CustomSourceCode />\n        <param.CustomHeaderCode />\n        <param.CustomInitializer />\n        <param.CustomTerminator />\n        <param.CustomInclude />\n        <param.CustomSource />\n        <param.CustomLibrary />\n        <param.PostCodeGenCommand />\n        <param.ConstantFoldingTimeout />\n        <param.RecursionLimit />\n        <param.PreserveVariableNames />\n        <param.TargetLang />\n        <param.EchoExpressions />\n        <param.InlineThreshold />\n        <param.InlineThresholdMax />\n        <param.InlineStackLimit />\n        <param.EnableMemcpy />\n        <param.MemcpyThreshold />\n        <param.EnableOpenMP />\n        <param.InitFltsAndDblsToZero />\n        <param.ConstantInputs />\n      </unset>\n    </profile>\n    <profile key=\"profile.c\">\n      <param.grt.GenCodeOnly>false</param.grt.GenCodeOnly>\n      <param.WorkingFolder />\n      <param.SpecifiedWorkingFolder />\n      <param.BuildFolder>option.BuildFolder.Project</param.BuildFolder>\n      <param.SpecifiedBuildFolder />\n      <param.SearchPaths />\n      <param.SaturateOnIntegerOverflow />\n      <param.PurelyIntegerCode />\n      <param.SupportNonFinite />\n      <param.EnableVariableSizing />\n      <param.DynamicMemoryAllocation />\n      <param.DynamicMemoryAllocationThreshold />\n      <param.StackUsageMax />\n      <param.MultiInstanceCode />\n      <param.FilePartitionMethod />\n      <param.GenerateComments />\n      <param.CommentStyle />\n      <param.MATLABSourceComments />\n      <param.MATLABFcnDesc />\n      <param.DataTypeReplacement />\n      <param.ConvertIfToSwitch />\n      <param.PreserveExternInFcnDecls />\n      <param.EnableSignedLeftShifts />\n      <param.EnableSignedRightShifts />\n      <param.ParenthesesLevel />\n      <param.MaxIdLength />\n      <param.CustomSymbolStrGlobalVar />\n      <param.CustomSymbolStrType />\n      <param.CustomSymbolStrField />\n      <param.CustomSymbolStrFcn />\n      <param.CustomSymbolStrTmpVar />\n      <param.CustomSymbolStrMacro />\n      <param.CustomSymbolStrEMXArray />\n      <param.CustomSymbolStrEMXArrayFcn />\n      <param.ReservedNameArray />\n      <param.RuntimeChecks />\n      <param.Verbose />\n      <param.GenerateReport />\n      <param.GenerateCodeMetricsReport />\n      <param.GenerateCodeReplacementReport />\n      <param.HighlightPotentialDataTypeIssues />\n      <param.LaunchReport />\n      <param.SILDebugging />\n      <param.CodeExecutionProfiling />\n      <param.DefaultTestFile />\n      <param.MergeInstrumentationResults />\n      <param.RanPilSilVerification />\n      <param.VerificationMode />\n      <param.VerificationStatus />\n      <param.CustomSourceCode />\n      <param.CustomHeaderCode />\n      <param.CustomInitializer />\n      <param.CustomTerminator />\n      <param.CustomInclude />\n      <param.CustomSource />\n      <param.CustomLibrary />\n      <param.PostCodeGenCommand />\n      <param.TargetLangStandard />\n      <param.CodeReplacementLibrary />\n      <param.DeprecatedCRLFlag />\n      <param.SameHardware>true</param.SameHardware>\n      <param.Toolchain />\n      <param.BuildConfiguration />\n      <param.CustomToolchainOptions />\n      <var.ToolchainSettingsVisible />\n      <param.target.Data />\n      <param.target.ActiveType>option.target.TargetType.MatlabHost</param.target.ActiveType>\n      <param.target.ActiveTarget />\n      <param.HardwareVendor.Production>Generic</param.HardwareVendor.Production>\n      <param.HardwareType.Production>MATLAB Host Computer</param.HardwareType.Production>\n      <param.HWDeviceType.Production />\n      <var.instance.enabled.Production>true</var.instance.enabled.Production>\n      <param.HardwareSizeChar.Production>8</param.HardwareSizeChar.Production>\n      <param.HardwareSizeShort.Production>16</param.HardwareSizeShort.Production>\n      <param.HardwareSizeInt.Production>32</param.HardwareSizeInt.Production>\n      <param.HardwareSizeLong.Production>64</param.HardwareSizeLong.Production>\n      <param.HardwareSizeLongLong.Production>64</param.HardwareSizeLongLong.Production>\n      <param.HardwareSizeFloat.Production>32</param.HardwareSizeFloat.Production>\n      <param.HardwareSizeDouble.Production>64</param.HardwareSizeDouble.Production>\n      <param.HardwareSizeWord.Production>64</param.HardwareSizeWord.Production>\n      <param.HardwareSizePointer.Production>64</param.HardwareSizePointer.Production>\n      <param.HardwareEndianness.Production>option.HardwareEndianness.Little</param.HardwareEndianness.Production>\n      <param.HardwareArithmeticRightShift.Production>true</param.HardwareArithmeticRightShift.Production>\n      <param.HardwareLongLongMode.Production>true</param.HardwareLongLongMode.Production>\n      <param.HardwareAtomicIntegerSize.Production>option.HardwareAtomicIntegerSize.Char</param.HardwareAtomicIntegerSize.Production>\n      <param.HardwareAtomicFloatSize.Production>option.HardwareAtomicFloatSize.None</param.HardwareAtomicFloatSize.Production>\n      <param.HardwareDivisionRounding.Production>option.HardwareDivisionRounding.Zero</param.HardwareDivisionRounding.Production>\n      <param.HardwareVendor.Target>Generic</param.HardwareVendor.Target>\n      <param.HardwareType.Target>MATLAB Host Computer</param.HardwareType.Target>\n      <param.HWDeviceType.Target />\n      <var.instance.enabled.Target>false</var.instance.enabled.Target>\n      <param.HardwareSizeChar.Target>8</param.HardwareSizeChar.Target>\n      <param.HardwareSizeShort.Target>16</param.HardwareSizeShort.Target>\n      <param.HardwareSizeInt.Target>32</param.HardwareSizeInt.Target>\n      <param.HardwareSizeLong.Target>64</param.HardwareSizeLong.Target>\n      <param.HardwareSizeLongLong.Target>64</param.HardwareSizeLongLong.Target>\n      <param.HardwareSizeFloat.Target>32</param.HardwareSizeFloat.Target>\n      <param.HardwareSizeDouble.Target>64</param.HardwareSizeDouble.Target>\n      <param.HardwareSizeWord.Target>64</param.HardwareSizeWord.Target>\n      <param.HardwareSizePointer.Target>64</param.HardwareSizePointer.Target>\n      <param.HardwareEndianness.Target>option.HardwareEndianness.Little</param.HardwareEndianness.Target>\n      <param.HardwareArithmeticRightShift.Target>true</param.HardwareArithmeticRightShift.Target>\n      <param.HardwareLongLongMode.Target>true</param.HardwareLongLongMode.Target>\n      <param.HardwareAtomicIntegerSize.Target>option.HardwareAtomicIntegerSize.Char</param.HardwareAtomicIntegerSize.Target>\n      <param.HardwareAtomicFloatSize.Target>option.HardwareAtomicFloatSize.None</param.HardwareAtomicFloatSize.Target>\n      <param.HardwareDivisionRounding.Target>option.HardwareDivisionRounding.Zero</param.HardwareDivisionRounding.Target>\n      <param.CastingMode />\n      <param.IndentStyle />\n      <param.IndentSize />\n      <param.ConstantFoldingTimeout />\n      <param.RecursionLimit />\n      <param.IncludeTerminateFcn />\n      <param.GenerateExampleMain />\n      <param.PreserveVariableNames />\n      <param.TargetLang />\n      <param.CCompilerOptimization />\n      <param.CCompilerCustomOptimizations />\n      <param.GenerateMakefile />\n      <param.BuildToolEnable />\n      <param.MakeCommand />\n      <param.TemplateMakefile />\n      <param.BuildToolConfiguration />\n      <param.InlineThreshold />\n      <param.InlineThresholdMax />\n      <param.InlineStackLimit />\n      <param.EnableMemcpy />\n      <param.MemcpyThreshold />\n      <param.EnableOpenMP />\n      <param.InitFltsAndDblsToZero />\n      <param.PassStructByReference />\n      <param.UseECoderFeatures />\n      <unset>\n        <param.WorkingFolder />\n        <param.SpecifiedWorkingFolder />\n        <param.BuildFolder />\n        <param.SpecifiedBuildFolder />\n        <param.SearchPaths />\n        <param.SaturateOnIntegerOverflow />\n        <param.PurelyIntegerCode />\n        <param.SupportNonFinite />\n        <param.EnableVariableSizing />\n        <param.DynamicMemoryAllocation />\n        <param.DynamicMemoryAllocationThreshold />\n        <param.StackUsageMax />\n        <param.MultiInstanceCode />\n        <param.FilePartitionMethod />\n        <param.GenerateComments />\n        <param.CommentStyle />\n        <param.MATLABSourceComments />\n        <param.MATLABFcnDesc />\n        <param.DataTypeReplacement />\n        <param.ConvertIfToSwitch />\n        <param.PreserveExternInFcnDecls />\n        <param.EnableSignedLeftShifts />\n        <param.EnableSignedRightShifts />\n        <param.ParenthesesLevel />\n        <param.MaxIdLength />\n        <param.CustomSymbolStrGlobalVar />\n        <param.CustomSymbolStrType />\n        <param.CustomSymbolStrField />\n        <param.CustomSymbolStrFcn />\n        <param.CustomSymbolStrTmpVar />\n        <param.CustomSymbolStrMacro />\n        <param.CustomSymbolStrEMXArray />\n        <param.CustomSymbolStrEMXArrayFcn />\n        <param.ReservedNameArray />\n        <param.RuntimeChecks />\n        <param.Verbose />\n        <param.GenerateReport />\n        <param.GenerateCodeMetricsReport />\n        <param.GenerateCodeReplacementReport />\n        <param.HighlightPotentialDataTypeIssues />\n        <param.LaunchReport />\n        <param.SILDebugging />\n        <param.CodeExecutionProfiling />\n        <param.DefaultTestFile />\n        <param.MergeInstrumentationResults />\n        <param.RanPilSilVerification />\n        <param.VerificationMode />\n        <param.VerificationStatus />\n        <param.CustomSourceCode />\n        <param.CustomHeaderCode />\n        <param.CustomInitializer />\n        <param.CustomTerminator />\n        <param.CustomInclude />\n        <param.CustomSource />\n        <param.CustomLibrary />\n        <param.PostCodeGenCommand />\n        <param.TargetLangStandard />\n        <param.CodeReplacementLibrary />\n        <param.DeprecatedCRLFlag />\n        <param.SameHardware />\n        <param.Toolchain />\n        <param.BuildConfiguration />\n        <param.CustomToolchainOptions />\n        <var.ToolchainSettingsVisible />\n        <param.target.Data />\n        <param.target.ActiveType />\n        <param.target.ActiveTarget />\n        <param.HardwareVendor.Production />\n        <param.HardwareType.Production />\n        <param.HWDeviceType.Production />\n        <var.instance.enabled.Production />\n        <param.HardwareVendor.Target />\n        <param.HardwareType.Target />\n        <param.HWDeviceType.Target />\n        <var.instance.enabled.Target />\n        <param.CastingMode />\n        <param.IndentStyle />\n        <param.IndentSize />\n        <param.ConstantFoldingTimeout />\n        <param.RecursionLimit />\n        <param.IncludeTerminateFcn />\n        <param.GenerateExampleMain />\n        <param.PreserveVariableNames />\n        <param.TargetLang />\n        <param.CCompilerOptimization />\n        <param.CCompilerCustomOptimizations />\n        <param.GenerateMakefile />\n        <param.BuildToolEnable />\n        <param.MakeCommand />\n        <param.TemplateMakefile />\n        <param.BuildToolConfiguration />\n        <param.InlineThreshold />\n        <param.InlineThresholdMax />\n        <param.InlineStackLimit />\n        <param.EnableMemcpy />\n        <param.MemcpyThreshold />\n        <param.EnableOpenMP />\n        <param.InitFltsAndDblsToZero />\n        <param.PassStructByReference />\n        <param.UseECoderFeatures />\n      </unset>\n    </profile>\n    <profile key=\"profile.hdl\">\n      <param.hdl.Workflow />\n      <param.hdl.TargetLanguage />\n      <param.hdl.TargetPlatform />\n      <param.hdl.SynthesisTool />\n      <param.hdl.InputFrequency />\n      <param.hdl.TargetFrequency />\n      <param.hdl.IPCoreName />\n      <param.hdl.IPCoreVersion />\n      <param.hdl.AdditionalIPFiles />\n      <param.hdl.ExecutionMode />\n      <param.hdl.SynthesisToolChipFamily />\n      <param.hdl.SynthesisToolDeviceName />\n      <param.hdl.SynthesisToolPackageName />\n      <param.hdl.SynthesisToolSpeedValue />\n      <param.hdl.TargetInterface />\n      <param.hdl.CheckConformance />\n      <param.hdl.LaunchConformanceReport />\n      <param.hdl.GenerateEDAScripts />\n      <param.hdl.GenerateHDLCode />\n      <param.hdl.AdditionalSynthesisProjectFiles />\n      <param.hdl.CriticalPathSource />\n      <param.hdl.EmbeddedSystemTool />\n      <param.hdl.EmbeddedSystemProjectFolder />\n      <param.hdl.BitstreamBuildMode />\n      <param.hdl.ReferenceDesign />\n      <param.hdl.ReferenceDesignPath />\n      <param.hdl.LegacyDefaultTestFile />\n      <param.WorkingFolder />\n      <param.SpecifiedWorkingFolder />\n      <param.BuildFolder>option.BuildFolder.Project</param.BuildFolder>\n      <param.SpecifiedBuildFolder />\n      <param.SearchPaths />\n      <param.hdl.MapPersistentVarsToRAM />\n      <param.hdl.RAMThreshold />\n      <param.hdl.RAMVariableNames />\n      <param.hdl.RegisterInputs />\n      <param.hdl.RegisterOutputs />\n      <param.hdl.DistributedPipelining />\n      <param.hdl.DistributedPipeliningPriority />\n      <param.hdl.PreserveDesignDelays />\n      <param.hdl.InputPipeline />\n      <param.hdl.OutputPipeline />\n      <param.hdl.PipelineVariables />\n      <param.hdl.ResourceSharing />\n      <param.hdl.ConstantMultiplierOptimization />\n      <param.hdl.LoopOptimization />\n      <param.GenerateComments />\n      <param.MATLABSourceComments />\n      <param.hdl.VHDLFileExt />\n      <param.hdl.VerilogFileExt />\n      <param.hdl.DateComment />\n      <param.hdl.UserComment />\n      <param.hdl.ModulePrefix />\n      <param.hdl.PackagePostfix />\n      <param.hdl.EntityConflictPostfix />\n      <param.hdl.ReservedWordPostfix />\n      <param.hdl.ClockProcessPostfix />\n      <param.hdl.ComplexRealPostfix />\n      <param.hdl.ComplexImagPostfix />\n      <param.hdl.PipelinePostfix />\n      <param.hdl.EnablePrefix />\n      <param.hdl.InlineConfigurations />\n      <param.hdl.UseRisingEdge />\n      <param.hdl.UseMatrixTypesInHDL />\n      <param.hdl.HDLCompileFilePostfix />\n      <param.hdl.HDLCompileInit />\n      <param.hdl.HDLCompileVHDLCmd />\n      <param.hdl.HDLCompileVerilogCmd />\n      <param.hdl.HDLCompileTerm />\n      <param.hdl.HDLSimFilePostfix />\n      <param.hdl.HDLSimInit />\n      <param.hdl.HDLSimCmd />\n      <param.hdl.HDLSimViewWaveCmd />\n      <param.hdl.HDLSimTerm />\n      <param.hdl.HDLSynthTool />\n      <var.hasSynthesisToolScript />\n      <var.toolSpecificEDAScript />\n      <param.hdl.HDLSynthFilePostfix />\n      <param.hdl.HDLSynthInit />\n      <param.hdl.HDLSynthCmd />\n      <param.hdl.HDLSynthTerm />\n      <param.hdl.HDLLintTool />\n      <var.LintToolScript />\n      <var.hasHDLLintTool />\n      <param.hdl.HDLLintInit />\n      <param.hdl.HDLLintCmd />\n      <param.hdl.HDLLintTerm />\n      <param.hdl.ResetType />\n      <param.hdl.ResetAssertedLevel />\n      <param.hdl.ResetInputPort />\n      <param.hdl.ClockInputPort />\n      <param.hdl.ClockEdge />\n      <param.hdl.ClockEnableInputPort />\n      <param.hdl.Oversampling />\n      <param.hdl.EnableRate />\n      <param.hdl.InputType />\n      <param.hdl.OutputType />\n      <param.hdl.ClockEnableOutputPort />\n      <param.hdl.ScalarizePorts />\n      <param.hdl.HDLCodingStandard />\n      <var.HDLCodingStandard_FilterPassingRules_enable />\n      <var.HDLCodingStandard_DetectDuplicateNamesCheck_enable />\n      <var.HDLCodingStandard_HDLKeywords_enable />\n      <var.HDLCodingStandard_ModuleInstanceEntityNameLength_enable />\n      <var.HDLCodingStandard_ModuleInstanceEntityNameLength_min />\n      <var.HDLCodingStandard_ModuleInstanceEntityNameLength_max />\n      <var.HDLCodingStandard_SignalPortParamNameLength_enable />\n      <var.HDLCodingStandard_SignalPortParamNameLength_min />\n      <var.HDLCodingStandard_SignalPortParamNameLength_max />\n      <var.HDLCodingStandard_MinimizeVariableUsage_enable />\n      <var.HDLCodingStandard_InitialStatements_enable />\n      <var.HDLCodingStandard_IfElseChain_enable />\n      <var.HDLCodingStandard_IfElseChain_length />\n      <var.HDLCodingStandard_IfElseNesting_enable />\n      <var.HDLCodingStandard_IfElseNesting_depth />\n      <var.HDLCodingStandard_MultiplierBitWidth_enable />\n      <var.HDLCodingStandard_MultiplierBitWidth_width />\n      <var.HDLCodingStandard_NonIntegerTypes_enable />\n      <var.HDLCodingStandard_LineLength_enable />\n      <var.HDLCodingStandard_LineLength_length />\n      <param.hdl.GenerateCosimTestBench />\n      <param.hdl.CosimLogOutputs />\n      <param.hdl.CosimTool />\n      <param.hdl.CosimRunMode />\n      <param.hdl.SimulateCosimTestBench />\n      <param.hdl.CosimClockHighTime />\n      <param.hdl.CosimClockLowTime />\n      <param.hdl.CosimHoldTime />\n      <param.hdl.CosimClockEnableDelay />\n      <param.hdl.CosimResetLength />\n      <param.hdl.GenerateFILTestBench />\n      <param.hdl.FILLogOutputs />\n      <param.hdl.FILBoardName />\n      <param.hdl.FILConnection />\n      <param.hdl.FILBoardIPAddress />\n      <param.hdl.FILBoardMACAddress />\n      <param.hdl.FILAdditionalFiles />\n      <param.hdl.SimulateFILTestBench />\n      <var.hasTestBench />\n      <param.hdl.GenerateHDLTestBench />\n      <param.hdl.SimulateGeneratedCode />\n      <param.hdl.SimulationTool />\n      <param.hdl.TestBenchPostfix />\n      <param.hdl.ForceClock />\n      <param.hdl.ClockHighTime />\n      <param.hdl.ClockLowTime />\n      <param.hdl.HoldTime />\n      <param.hdl.ForceClockEnable />\n      <param.hdl.TestBenchClockEnableDelay />\n      <param.hdl.ForceReset />\n      <param.hdl.ResetLength />\n      <param.hdl.HoldInputDataBetweenSamples />\n      <param.hdl.InputDataInterval />\n      <param.hdl.InitializeTestBenchInputs />\n      <param.hdl.MultifileTestBench />\n      <param.hdl.TestBenchDataPostfix />\n      <param.hdl.TestReferencePostfix />\n      <param.hdl.UseFileIOInTestBench />\n      <param.hdl.IgnoreDataChecking />\n      <param.hdl.SimulationIterationLimit />\n      <param.hdl.UseFiAccelForTestBench />\n      <param.hdl.hdlVariables />\n      <param.hdl.hdlComputedVariables />\n      <param.hdl.InitializeBlockRAM />\n      <param.hdl.RAMArchitecture />\n      <param.hdl.PartitionFunctions />\n      <param.hdl.GenerateMLFcnBlock />\n      <param.hdl.GenerateXSGBlock />\n      <unset>\n        <param.hdl.Workflow />\n        <param.hdl.TargetLanguage />\n        <param.hdl.TargetPlatform />\n        <param.hdl.SynthesisTool />\n        <param.hdl.InputFrequency />\n        <param.hdl.TargetFrequency />\n        <param.hdl.IPCoreName />\n        <param.hdl.IPCoreVersion />\n        <param.hdl.AdditionalIPFiles />\n        <param.hdl.ExecutionMode />\n        <param.hdl.SynthesisToolChipFamily />\n        <param.hdl.SynthesisToolDeviceName />\n        <param.hdl.SynthesisToolPackageName />\n        <param.hdl.SynthesisToolSpeedValue />\n        <param.hdl.TargetInterface />\n        <param.hdl.CheckConformance />\n        <param.hdl.LaunchConformanceReport />\n        <param.hdl.GenerateEDAScripts />\n        <param.hdl.GenerateHDLCode />\n        <param.hdl.AdditionalSynthesisProjectFiles />\n        <param.hdl.CriticalPathSource />\n        <param.hdl.EmbeddedSystemTool />\n        <param.hdl.EmbeddedSystemProjectFolder />\n        <param.hdl.BitstreamBuildMode />\n        <param.hdl.ReferenceDesign />\n        <param.hdl.ReferenceDesignPath />\n        <param.hdl.LegacyDefaultTestFile />\n        <param.WorkingFolder />\n        <param.SpecifiedWorkingFolder />\n        <param.BuildFolder />\n        <param.SpecifiedBuildFolder />\n        <param.SearchPaths />\n        <param.hdl.MapPersistentVarsToRAM />\n        <param.hdl.RAMThreshold />\n        <param.hdl.RAMVariableNames />\n        <param.hdl.RegisterInputs />\n        <param.hdl.RegisterOutputs />\n        <param.hdl.DistributedPipelining />\n        <param.hdl.DistributedPipeliningPriority />\n        <param.hdl.PreserveDesignDelays />\n        <param.hdl.InputPipeline />\n        <param.hdl.OutputPipeline />\n        <param.hdl.PipelineVariables />\n        <param.hdl.ResourceSharing />\n        <param.hdl.ConstantMultiplierOptimization />\n        <param.hdl.LoopOptimization />\n        <param.GenerateComments />\n        <param.MATLABSourceComments />\n        <param.hdl.VHDLFileExt />\n        <param.hdl.VerilogFileExt />\n        <param.hdl.DateComment />\n        <param.hdl.UserComment />\n        <param.hdl.ModulePrefix />\n        <param.hdl.PackagePostfix />\n        <param.hdl.EntityConflictPostfix />\n        <param.hdl.ReservedWordPostfix />\n        <param.hdl.ClockProcessPostfix />\n        <param.hdl.ComplexRealPostfix />\n        <param.hdl.ComplexImagPostfix />\n        <param.hdl.PipelinePostfix />\n        <param.hdl.EnablePrefix />\n        <param.hdl.InlineConfigurations />\n        <param.hdl.UseRisingEdge />\n        <param.hdl.UseMatrixTypesInHDL />\n        <param.hdl.HDLCompileFilePostfix />\n        <param.hdl.HDLCompileInit />\n        <param.hdl.HDLCompileVHDLCmd />\n        <param.hdl.HDLCompileVerilogCmd />\n        <param.hdl.HDLCompileTerm />\n        <param.hdl.HDLSimFilePostfix />\n        <param.hdl.HDLSimInit />\n        <param.hdl.HDLSimCmd />\n        <param.hdl.HDLSimViewWaveCmd />\n        <param.hdl.HDLSimTerm />\n        <param.hdl.HDLSynthTool />\n        <var.hasSynthesisToolScript />\n        <var.toolSpecificEDAScript />\n        <param.hdl.HDLSynthFilePostfix />\n        <param.hdl.HDLSynthInit />\n        <param.hdl.HDLSynthCmd />\n        <param.hdl.HDLSynthTerm />\n        <param.hdl.HDLLintTool />\n        <var.LintToolScript />\n        <var.hasHDLLintTool />\n        <param.hdl.HDLLintInit />\n        <param.hdl.HDLLintCmd />\n        <param.hdl.HDLLintTerm />\n        <param.hdl.ResetType />\n        <param.hdl.ResetAssertedLevel />\n        <param.hdl.ResetInputPort />\n        <param.hdl.ClockInputPort />\n        <param.hdl.ClockEdge />\n        <param.hdl.ClockEnableInputPort />\n        <param.hdl.Oversampling />\n        <param.hdl.EnableRate />\n        <param.hdl.InputType />\n        <param.hdl.OutputType />\n        <param.hdl.ClockEnableOutputPort />\n        <param.hdl.ScalarizePorts />\n        <param.hdl.HDLCodingStandard />\n        <var.HDLCodingStandard_FilterPassingRules_enable />\n        <var.HDLCodingStandard_DetectDuplicateNamesCheck_enable />\n        <var.HDLCodingStandard_HDLKeywords_enable />\n        <var.HDLCodingStandard_ModuleInstanceEntityNameLength_enable />\n        <var.HDLCodingStandard_ModuleInstanceEntityNameLength_min />\n        <var.HDLCodingStandard_ModuleInstanceEntityNameLength_max />\n        <var.HDLCodingStandard_SignalPortParamNameLength_enable />\n        <var.HDLCodingStandard_SignalPortParamNameLength_min />\n        <var.HDLCodingStandard_SignalPortParamNameLength_max />\n        <var.HDLCodingStandard_MinimizeVariableUsage_enable />\n        <var.HDLCodingStandard_InitialStatements_enable />\n        <var.HDLCodingStandard_IfElseChain_enable />\n        <var.HDLCodingStandard_IfElseChain_length />\n        <var.HDLCodingStandard_IfElseNesting_enable />\n        <var.HDLCodingStandard_IfElseNesting_depth />\n        <var.HDLCodingStandard_MultiplierBitWidth_enable />\n        <var.HDLCodingStandard_MultiplierBitWidth_width />\n        <var.HDLCodingStandard_NonIntegerTypes_enable />\n        <var.HDLCodingStandard_LineLength_enable />\n        <var.HDLCodingStandard_LineLength_length />\n        <param.hdl.GenerateCosimTestBench />\n        <param.hdl.CosimLogOutputs />\n        <param.hdl.CosimTool />\n        <param.hdl.CosimRunMode />\n        <param.hdl.SimulateCosimTestBench />\n        <param.hdl.CosimClockHighTime />\n        <param.hdl.CosimClockLowTime />\n        <param.hdl.CosimHoldTime />\n        <param.hdl.CosimClockEnableDelay />\n        <param.hdl.CosimResetLength />\n        <param.hdl.GenerateFILTestBench />\n        <param.hdl.FILLogOutputs />\n        <param.hdl.FILBoardName />\n        <param.hdl.FILConnection />\n        <param.hdl.FILBoardIPAddress />\n        <param.hdl.FILBoardMACAddress />\n        <param.hdl.FILAdditionalFiles />\n        <param.hdl.SimulateFILTestBench />\n        <var.hasTestBench />\n        <param.hdl.GenerateHDLTestBench />\n        <param.hdl.SimulateGeneratedCode />\n        <param.hdl.SimulationTool />\n        <param.hdl.TestBenchPostfix />\n        <param.hdl.ForceClock />\n        <param.hdl.ClockHighTime />\n        <param.hdl.ClockLowTime />\n        <param.hdl.HoldTime />\n        <param.hdl.ForceClockEnable />\n        <param.hdl.TestBenchClockEnableDelay />\n        <param.hdl.ForceReset />\n        <param.hdl.ResetLength />\n        <param.hdl.HoldInputDataBetweenSamples />\n        <param.hdl.InputDataInterval />\n        <param.hdl.InitializeTestBenchInputs />\n        <param.hdl.MultifileTestBench />\n        <param.hdl.TestBenchDataPostfix />\n        <param.hdl.TestReferencePostfix />\n        <param.hdl.UseFileIOInTestBench />\n        <param.hdl.IgnoreDataChecking />\n        <param.hdl.SimulationIterationLimit />\n        <param.hdl.UseFiAccelForTestBench />\n        <param.hdl.hdlVariables />\n        <param.hdl.hdlComputedVariables />\n        <param.hdl.InitializeBlockRAM />\n        <param.hdl.RAMArchitecture />\n        <param.hdl.PartitionFunctions />\n        <param.hdl.GenerateMLFcnBlock />\n        <param.hdl.GenerateXSGBlock />\n      </unset>\n    </profile>\n    <param.objective>option.objective.c</param.objective>\n    <param.WorkflowStep>inputTypes</param.WorkflowStep>\n    <param.TestSnippets>\n      <item>demo_start_v2</item>\n    </param.TestSnippets>\n    <param.DefaultImportExportVariable />\n    <param.UseGlobals>option.UseGlobals.No</param.UseGlobals>\n    <param.outputfile>${PROJECT_ROOT}/returnLines_mex.mexmaci64</param.outputfile>\n    <param.version />\n    <param.HasECoderFeatures>true</param.HasECoderFeatures>\n    <param.mex.mainhtml />\n    <param.grt.mainhtml />\n    <param.CallGeneratedCodeFromTest />\n    <param.AutoInferDefaultFile />\n    <param.AutoInferUseVariableSize />\n    <param.AutoInferUseUnboundedSize />\n    <param.AutoInferVariableSizeThreshold />\n    <param.AutoInferUnboundedSizeThreshold />\n    <param.EnableFixedPointStep />\n    <param.EnableScreener>true</param.EnableScreener>\n    <param.AnnotationChecksum>354917700</param.AnnotationChecksum>\n    <var.LegacyTarget />\n    <var.MirrorOnOpen>false</var.MirrorOnOpen>\n    <param.FixedPointEnabled>false</param.FixedPointEnabled>\n    <var.redirectedInputTypeData />\n    <var.DismissScreener>true</var.DismissScreener>\n    <param.unifiedParamStorage />\n    <var.gc.lastOutputRoot>codegen/mex/returnLines</var.gc.lastOutputRoot>\n    <var.gc.preBuildChecksum>980166774</var.gc.preBuildChecksum>\n    <var.cfi.lastOutputRoot>codegen/mex/returnLines</var.cfi.lastOutputRoot>\n    <var.cfi.preBuildChecksum>946828686</var.cfi.preBuildChecksum>\n    <var.lastCfiTestSnippet>demo_start_v2</var.lastCfiTestSnippet>\n    <var.outdatedOnRestore />\n    <var.lastUserSourceChecksum>&lt;?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?&gt;&lt;checksum&gt;&lt;includedFiles&gt;&lt;file&gt;/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/code/mexfiles/returnLines.m&lt;/file&gt;&lt;/includedFiles&gt;&lt;value&gt;811592531&lt;/value&gt;&lt;/checksum&gt;</var.lastUserSourceChecksum>\n    <var.sourceSetState>&lt;?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?&gt;&lt;sourceModel&gt;&lt;primarySourceFiles&gt;&lt;file&gt;/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/code/mexfiles/returnLines.m&lt;/file&gt;&lt;/primarySourceFiles&gt;&lt;fixedPointSourceFiles/&gt;&lt;fixedPointSourceRegistered&gt;false&lt;/fixedPointSourceRegistered&gt;&lt;fixedPointSourceSelected&gt;false&lt;/fixedPointSourceSelected&gt;&lt;/sourceModel&gt;</var.sourceSetState>\n    <param.forceMexBuild>false</param.forceMexBuild>\n    <param.configImportActive>false</param.configImportActive>\n    <var.boundToGui>true</var.boundToGui>\n    <param.mex.outputfile>returnLines_mex</param.mex.outputfile>\n    <param.grt.outputfile>returnLines</param.grt.outputfile>\n    <param.artifact>option.target.artifact.mex</param.artifact>\n    <param.outputfile>${PROJECT_ROOT}/returnLines_mex.mexmaci64</param.outputfile>\n    <param.EnableAutoExtrinsicCalls />\n    <param.UsePreconditions>false</param.UsePreconditions>\n    <param.FeatureFlags />\n    <param.FixedPointMode>option.FixedPointMode.None</param.FixedPointMode>\n    <param.AutoScaleLoopIndexVariables />\n    <param.ComputedFixedPointData />\n    <param.UserFixedPointData />\n    <param.DefaultWordLength />\n    <param.DefaultFractionLength />\n    <param.FixedPointSafetyMargin />\n    <param.FixedPointFimath />\n    <param.FixedPointTypeSource />\n    <param.StaticAnalysisTimeout />\n    <param.StaticAnalysisGlobalRangesOnly />\n    <param.LogAllIOValues />\n    <param.DetectOverflows />\n    <param.LogHistogram />\n    <param.ShowCoverage />\n    <param.ExcludedFixedPointVerificationFiles />\n    <param.ExcludedFixedPointSimulationFiles />\n    <param.InstrumentedBuildChecksum />\n    <param.FixedPointStaticAnalysisChecksum />\n    <param.InstrumentedMexFile />\n    <param.FixedPointValidationChecksum />\n    <param.FixedPointSourceCodeChecksum />\n    <param.FixedPointFunctionReplacements />\n    <param.OptimizeWholeNumbers />\n    <param.ContainerTypes />\n    <param.GeneratedFixedPointFileSuffix>_fixpt</param.GeneratedFixedPointFileSuffix>\n    <param.PlotFunction />\n    <param.SDIPlot />\n    <param.EnableCodeEfficiencyChecks />\n    <param.DefaultFixedPointSignedness />\n    <param.FixedPointTypeProposalMode />\n    <param.EnableFixedPointStep />\n    <var.lastFixedPointAction />\n    <var.lastSimContext />\n    <var.lastVerifyContext />\n    <param.fpDataRoot />\n    <param.fpUserFileChecksum />\n    <var.snapshotChecksum />\n    <unset>\n      <param.DefaultImportExportVariable />\n      <param.UseGlobals />\n      <param.outputfile />\n      <param.version />\n      <param.HasECoderFeatures />\n      <param.mex.mainhtml />\n      <param.grt.mainhtml />\n      <param.CallGeneratedCodeFromTest />\n      <param.AutoInferDefaultFile />\n      <param.AutoInferUseVariableSize />\n      <param.AutoInferUseUnboundedSize />\n      <param.AutoInferVariableSizeThreshold />\n      <param.AutoInferUnboundedSizeThreshold />\n      <param.EnableFixedPointStep />\n      <param.EnableScreener />\n      <var.LegacyTarget />\n      <var.MirrorOnOpen />\n      <param.FixedPointEnabled />\n      <var.redirectedInputTypeData />\n      <param.unifiedParamStorage />\n      <var.outdatedOnRestore />\n      <param.configImportActive />\n      <param.mex.outputfile />\n      <param.grt.outputfile />\n      <param.EnableAutoExtrinsicCalls />\n      <param.UsePreconditions />\n      <param.FeatureFlags />\n      <param.FixedPointMode />\n      <param.AutoScaleLoopIndexVariables />\n      <param.ComputedFixedPointData />\n      <param.UserFixedPointData />\n      <param.DefaultWordLength />\n      <param.DefaultFractionLength />\n      <param.FixedPointSafetyMargin />\n      <param.FixedPointFimath />\n      <param.FixedPointTypeSource />\n      <param.StaticAnalysisTimeout />\n      <param.StaticAnalysisGlobalRangesOnly />\n      <param.LogAllIOValues />\n      <param.DetectOverflows />\n      <param.LogHistogram />\n      <param.ShowCoverage />\n      <param.ExcludedFixedPointVerificationFiles />\n      <param.ExcludedFixedPointSimulationFiles />\n      <param.InstrumentedBuildChecksum />\n      <param.FixedPointStaticAnalysisChecksum />\n      <param.InstrumentedMexFile />\n      <param.FixedPointValidationChecksum />\n      <param.FixedPointSourceCodeChecksum />\n      <param.FixedPointFunctionReplacements />\n      <param.OptimizeWholeNumbers />\n      <param.ContainerTypes />\n      <param.GeneratedFixedPointFileSuffix />\n      <param.PlotFunction />\n      <param.SDIPlot />\n      <param.EnableCodeEfficiencyChecks />\n      <param.DefaultFixedPointSignedness />\n      <param.FixedPointTypeProposalMode />\n      <var.lastFixedPointAction />\n      <var.lastSimContext />\n      <var.lastVerifyContext />\n      <param.fpDataRoot />\n      <param.fpUserFileChecksum />\n      <var.snapshotChecksum />\n    </unset>\n    <fileset.entrypoints>\n      <file custom-data-expanded=\"false\" value=\"${PROJECT_ROOT}/returnLines.m\">\n        <Inputs fileName=\"returnLines.m\" functionName=\"returnLines\">\n          <Input Name=\"points_proj\">\n            <Class>double</Class>\n            <Size>:inf x 2</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>true</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"final_labels\">\n            <Class>double</Class>\n            <Size>1 x :inf</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>true</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n        </Inputs>\n      </file>\n    </fileset.entrypoints>\n    <fileset.testbench>\n      <file>/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/demo_start_v2.m</file>\n    </fileset.testbench>\n    <build-deliverables>\n      <file location=\"/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/code/mexfiles\" name=\"returnLines_mex.mexmaci64\" optional=\"false\">/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/code/mexfiles/returnLines_mex.mexmaci64</file>\n    </build-deliverables>\n    <workflow />\n    <matlab>\n      <root>/Applications/MATLAB_R2015b.app</root>\n      <toolboxes>\n        <toolbox name=\"matlabhdlcoder\" />\n        <toolbox name=\"fixedpoint\" />\n        <toolbox name=\"embeddedcoder\" />\n        <toolbox name=\"matlabcoder\" />\n      </toolboxes>\n      <toolbox>\n        <matlabhdlcoder>\n          <enabled>true</enabled>\n        </matlabhdlcoder>\n      </toolbox>\n      <toolbox>\n        <fixedpoint>\n          <enabled>true</enabled>\n        </fixedpoint>\n      </toolbox>\n      <toolbox>\n        <embeddedcoder>\n          <enabled>true</enabled>\n        </embeddedcoder>\n      </toolbox>\n      <toolbox>\n        <matlabcoder>\n          <enabled>true</enabled>\n        </matlabcoder>\n      </toolbox>\n    </matlab>\n    <platform>\n      <unix>true</unix>\n      <mac>true</mac>\n      <windows>false</windows>\n      <win2k>false</win2k>\n      <winxp>false</winxp>\n      <vista>false</vista>\n      <linux>false</linux>\n      <solaris>false</solaris>\n      <osver>10.12.6</osver>\n      <os32>false</os32>\n      <os64>true</os64>\n      <arch>maci64</arch>\n      <matlab>true</matlab>\n    </platform>\n  </configuration>\n</deployment-project>"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/mexfiles/sampleLine.m",
    "content": "function L = sampleLine(rho,theta,m,n,pp)\n%Returns locations of line samples together with the locations\n%of the associated pixels in the image.\n%(rho, theta) represents the line as per Fig. 1 of Tal (2012):\n%rho = x*cos(theta) + y*sin(theta) <--> ax + by + c = 0 where\n%a = cos(theta), b = sin(theta), c = -rho.\n%pp is the principal point, in pixels.\n%(m, n) is the width and height of the image in pixels.\n%The returned matrix L is N x 4, where N is the number of\n%samples on the line.  The 4 columns represent (x,y,xp,yp) \n%where (x,y) indicates the real-valued location of the line\n%sample and (xp,yp) represents the integer-valued location\n%of the associated pixel.  Note that the y index increases down.\n\n%Translate to standard representation of line\na = cos(theta);\nb = sin(theta);\nc = -rho;\n\n%Location of centre of image\nx0 = pp(1);\ny0 = pp(2);\n\n%Find image bounds\nleft = 1 - x0;\nright = m - x0;\ntop = 1 - y0;\nbottom = n - y0;\n\n%Identify pixels within 2 pixels of line\nmaxpts = round(5*sqrt(m^2+n^2));\n%Pre-allocate for efficiency\nxp = zeros(maxpts,1);yp = zeros(maxpts,1);\nidx = 1;\n%Closer to horizontal - march along x.\nif theta > pi/4 && theta < 3*pi/4\n    x = left:right;\n    yu = floor(min(bottom,(-c+2 - x*a)/b));\n    yl = ceil(max(top,(-c-2 - x*a)/b));\n    for i = 1:m\n        npts = max(0,yu(i)-yl(i) + 1);\n        xp(idx:idx + npts-1) = x(i);\n        yp(idx:idx + npts-1) = yl(i):yu(i);\n        idx = idx + npts;\n    end\nelse %Closer to vertical - march along y\n    y = top:bottom;\n    %if theta<pi/2, increasing rho increases x.  \n    %Otherwise, decreasing rho increases x.\n    s = sign(cos(theta)); \n    xu = floor(min(right,(-c+2*s - y*b)/a));\n    xl = ceil(max(left,(-c-2*s - y*b)/a));\n    for i = 1:n\n        npts = max(0,xu(i)-xl(i) + 1);\n        yp(idx:idx + npts-1) = y(i);\n        xp(idx:idx + npts-1) = xl(i):xu(i);\n        idx = idx + npts;\n    end\nend\nxp = xp(1:idx-1);\nyp = yp(1:idx-1);\n\nL=[xp,yp];\n% %Find orthogonal projections to line\n% x = b*(b*xp-a*yp)-a*c;\n% y = a*(-b*xp+a*yp)-b*c;\n% \n% L = [x,y,xp,yp];\n% %Sort line samples\n% if theta > pi/4 & theta < 3*pi/4\n%     [x,idx] = sort(x);\n% else\n%     [y,idx] = sort(y);\n% end  \n% L = L(idx,:);\n% npts = size(L,1);\n% npts;\n% figure;\n% eps = endpoints(rho,theta,left,right,top,bottom);\n% plot(eps(:,1),eps(:,2),'r');\n% hold on;\n% plot(xp,yp,'.');\n% axis ij;\n% axis equal;\n% axis([left,right,top,bottom]);\n\n\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/mexfiles/sampleLine.prj",
    "content": "<deployment-project plugin=\"plugin.coder\" plugin-version=\"R2015b\">\n  <configuration build-checksum=\"2341851798\" file=\"/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/code/mexfiles/sampleLine.prj\" location=\"/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/code/mexfiles\" name=\"sampleLine\" target=\"target.unifiedcoder\" target-name=\"MATLAB Coder\">\n    <profile key=\"profile.mex\">\n      <param.BuiltInstrumentedMex />\n      <param.RanInstrumentedMex>false</param.RanInstrumentedMex>\n      <param.WorkingFolder>option.WorkingFolder.Project</param.WorkingFolder>\n      <param.SpecifiedWorkingFolder />\n      <param.BuildFolder>option.BuildFolder.Project</param.BuildFolder>\n      <param.SpecifiedBuildFolder />\n      <param.SearchPaths />\n      <param.ResponsivenessChecks>true</param.ResponsivenessChecks>\n      <param.ExtrinsicCalls>true</param.ExtrinsicCalls>\n      <param.IntegrityChecks>true</param.IntegrityChecks>\n      <param.SaturateOnIntegerOverflow>true</param.SaturateOnIntegerOverflow>\n      <param.GlobalDataSyncMethod>option.GlobalDataSyncMethod.SyncAlways</param.GlobalDataSyncMethod>\n      <param.EnableVariableSizing>true</param.EnableVariableSizing>\n      <param.DynamicMemoryAllocation>option.DynamicMemoryAllocation.Threshold</param.DynamicMemoryAllocation>\n      <param.DynamicMemoryAllocationThreshold>65536</param.DynamicMemoryAllocationThreshold>\n      <param.StackUsageMax>200000</param.StackUsageMax>\n      <param.FilePartitionMethod>option.FilePartitionMethod.MapMFileToCFile</param.FilePartitionMethod>\n      <param.GenerateComments>true</param.GenerateComments>\n      <param.MATLABSourceComments>false</param.MATLABSourceComments>\n      <param.ReservedNameArray />\n      <param.EnableDebugging>false</param.EnableDebugging>\n      <param.GenerateReport>true</param.GenerateReport>\n      <param.LaunchReport>false</param.LaunchReport>\n      <param.DefaultTestFile />\n      <param.MergeInstrumentationResults>false</param.MergeInstrumentationResults>\n      <param.VerificationMode>option.VerificationMode.None</param.VerificationMode>\n      <param.VerificationStatus>option.VerificationStatus.Passed</param.VerificationStatus>\n      <param.CustomSourceCode />\n      <param.CustomHeaderCode />\n      <param.CustomInitializer />\n      <param.CustomTerminator />\n      <param.CustomInclude />\n      <param.CustomSource />\n      <param.CustomLibrary />\n      <param.PostCodeGenCommand />\n      <param.mex.GenCodeOnly>false</param.mex.GenCodeOnly>\n      <param.ConstantFoldingTimeout>40000</param.ConstantFoldingTimeout>\n      <param.RecursionLimit />\n      <param.PreserveVariableNames>option.PreserveVariableNames.UserNames</param.PreserveVariableNames>\n      <param.TargetLang>option.TargetLang.C</param.TargetLang>\n      <param.EchoExpressions>true</param.EchoExpressions>\n      <param.InlineThreshold>10</param.InlineThreshold>\n      <param.InlineThresholdMax>200</param.InlineThresholdMax>\n      <param.InlineStackLimit>4000</param.InlineStackLimit>\n      <param.EnableMemcpy>true</param.EnableMemcpy>\n      <param.MemcpyThreshold>64</param.MemcpyThreshold>\n      <param.EnableOpenMP>true</param.EnableOpenMP>\n      <param.InitFltsAndDblsToZero>true</param.InitFltsAndDblsToZero>\n      <param.ConstantInputs>option.ConstantInputs.CheckValues</param.ConstantInputs>\n      <unset>\n        <param.BuiltInstrumentedMex />\n        <param.RanInstrumentedMex />\n        <param.WorkingFolder />\n        <param.SpecifiedWorkingFolder />\n        <param.BuildFolder />\n        <param.SpecifiedBuildFolder />\n        <param.SearchPaths />\n        <param.ResponsivenessChecks />\n        <param.ExtrinsicCalls />\n        <param.IntegrityChecks />\n        <param.SaturateOnIntegerOverflow />\n        <param.EnableVariableSizing />\n        <param.DynamicMemoryAllocationThreshold />\n        <param.StackUsageMax />\n        <param.FilePartitionMethod />\n        <param.GenerateComments />\n        <param.MATLABSourceComments />\n        <param.ReservedNameArray />\n        <param.EnableDebugging />\n        <param.GenerateReport />\n        <param.LaunchReport />\n        <param.DefaultTestFile />\n        <param.MergeInstrumentationResults />\n        <param.CustomSourceCode />\n        <param.CustomHeaderCode />\n        <param.CustomInitializer />\n        <param.CustomTerminator />\n        <param.CustomInclude />\n        <param.CustomSource />\n        <param.CustomLibrary />\n        <param.PostCodeGenCommand />\n        <param.ConstantFoldingTimeout />\n        <param.RecursionLimit />\n        <param.PreserveVariableNames />\n        <param.TargetLang />\n        <param.EchoExpressions />\n        <param.InlineThreshold />\n        <param.InlineThresholdMax />\n        <param.InlineStackLimit />\n        <param.EnableMemcpy />\n        <param.MemcpyThreshold />\n        <param.EnableOpenMP />\n        <param.InitFltsAndDblsToZero />\n        <param.ConstantInputs />\n      </unset>\n    </profile>\n    <profile key=\"profile.c\">\n      <param.grt.GenCodeOnly>false</param.grt.GenCodeOnly>\n      <param.WorkingFolder>option.WorkingFolder.Project</param.WorkingFolder>\n      <param.SpecifiedWorkingFolder />\n      <param.BuildFolder>option.BuildFolder.Project</param.BuildFolder>\n      <param.SpecifiedBuildFolder />\n      <param.SearchPaths />\n      <param.SaturateOnIntegerOverflow>true</param.SaturateOnIntegerOverflow>\n      <param.PurelyIntegerCode />\n      <param.SupportNonFinite />\n      <param.EnableVariableSizing>true</param.EnableVariableSizing>\n      <param.DynamicMemoryAllocation />\n      <param.DynamicMemoryAllocationThreshold>65536</param.DynamicMemoryAllocationThreshold>\n      <param.StackUsageMax>200000</param.StackUsageMax>\n      <param.MultiInstanceCode />\n      <param.FilePartitionMethod>option.FilePartitionMethod.MapMFileToCFile</param.FilePartitionMethod>\n      <param.GenerateComments>true</param.GenerateComments>\n      <param.CommentStyle />\n      <param.MATLABSourceComments>false</param.MATLABSourceComments>\n      <param.MATLABFcnDesc />\n      <param.DataTypeReplacement />\n      <param.ConvertIfToSwitch />\n      <param.PreserveExternInFcnDecls />\n      <param.EnableSignedLeftShifts />\n      <param.EnableSignedRightShifts />\n      <param.ParenthesesLevel />\n      <param.MaxIdLength />\n      <param.CustomSymbolStrGlobalVar>$M$N</param.CustomSymbolStrGlobalVar>\n      <param.CustomSymbolStrType>$M$N</param.CustomSymbolStrType>\n      <param.CustomSymbolStrField>$M$N</param.CustomSymbolStrField>\n      <param.CustomSymbolStrFcn>$M$N</param.CustomSymbolStrFcn>\n      <param.CustomSymbolStrTmpVar>$M$N</param.CustomSymbolStrTmpVar>\n      <param.CustomSymbolStrMacro>$M$N</param.CustomSymbolStrMacro>\n      <param.CustomSymbolStrEMXArray>emxArray_$M$N</param.CustomSymbolStrEMXArray>\n      <param.CustomSymbolStrEMXArrayFcn />\n      <param.ReservedNameArray />\n      <param.RuntimeChecks />\n      <param.Verbose />\n      <param.GenerateReport>true</param.GenerateReport>\n      <param.GenerateCodeMetricsReport />\n      <param.GenerateCodeReplacementReport />\n      <param.HighlightPotentialDataTypeIssues />\n      <param.LaunchReport>false</param.LaunchReport>\n      <param.SILDebugging />\n      <param.CodeExecutionProfiling />\n      <param.DefaultTestFile />\n      <param.MergeInstrumentationResults>false</param.MergeInstrumentationResults>\n      <param.RanPilSilVerification>false</param.RanPilSilVerification>\n      <param.VerificationMode />\n      <param.VerificationStatus />\n      <param.CustomSourceCode />\n      <param.CustomHeaderCode />\n      <param.CustomInitializer />\n      <param.CustomTerminator />\n      <param.CustomInclude />\n      <param.CustomSource />\n      <param.CustomLibrary />\n      <param.PostCodeGenCommand />\n      <param.TargetLangStandard />\n      <param.CodeReplacementLibrary />\n      <param.DeprecatedCRLFlag />\n      <param.SameHardware>true</param.SameHardware>\n      <param.Toolchain>Automatically locate an installed toolchain</param.Toolchain>\n      <param.BuildConfiguration />\n      <param.CustomToolchainOptions />\n      <var.ToolchainSettingsVisible />\n      <param.target.Data />\n      <param.target.ActiveType>option.target.TargetType.MatlabHost</param.target.ActiveType>\n      <param.target.ActiveTarget />\n      <param.HardwareVendor.Production>Generic</param.HardwareVendor.Production>\n      <param.HardwareType.Production>MATLAB Host Computer</param.HardwareType.Production>\n      <param.HWDeviceType.Production />\n      <var.instance.enabled.Production>true</var.instance.enabled.Production>\n      <param.HardwareSizeChar.Production>8</param.HardwareSizeChar.Production>\n      <param.HardwareSizeShort.Production>16</param.HardwareSizeShort.Production>\n      <param.HardwareSizeInt.Production>32</param.HardwareSizeInt.Production>\n      <param.HardwareSizeLong.Production>64</param.HardwareSizeLong.Production>\n      <param.HardwareSizeLongLong.Production>64</param.HardwareSizeLongLong.Production>\n      <param.HardwareSizeFloat.Production>32</param.HardwareSizeFloat.Production>\n      <param.HardwareSizeDouble.Production>64</param.HardwareSizeDouble.Production>\n      <param.HardwareSizeWord.Production>64</param.HardwareSizeWord.Production>\n      <param.HardwareSizePointer.Production>64</param.HardwareSizePointer.Production>\n      <param.HardwareEndianness.Production>option.HardwareEndianness.Little</param.HardwareEndianness.Production>\n      <param.HardwareArithmeticRightShift.Production>true</param.HardwareArithmeticRightShift.Production>\n      <param.HardwareLongLongMode.Production>true</param.HardwareLongLongMode.Production>\n      <param.HardwareAtomicIntegerSize.Production>option.HardwareAtomicIntegerSize.Char</param.HardwareAtomicIntegerSize.Production>\n      <param.HardwareAtomicFloatSize.Production>option.HardwareAtomicFloatSize.None</param.HardwareAtomicFloatSize.Production>\n      <param.HardwareDivisionRounding.Production>option.HardwareDivisionRounding.Zero</param.HardwareDivisionRounding.Production>\n      <param.HardwareVendor.Target>Generic</param.HardwareVendor.Target>\n      <param.HardwareType.Target>MATLAB Host Computer</param.HardwareType.Target>\n      <param.HWDeviceType.Target />\n      <var.instance.enabled.Target>false</var.instance.enabled.Target>\n      <param.HardwareSizeChar.Target>8</param.HardwareSizeChar.Target>\n      <param.HardwareSizeShort.Target>16</param.HardwareSizeShort.Target>\n      <param.HardwareSizeInt.Target>32</param.HardwareSizeInt.Target>\n      <param.HardwareSizeLong.Target>64</param.HardwareSizeLong.Target>\n      <param.HardwareSizeLongLong.Target>64</param.HardwareSizeLongLong.Target>\n      <param.HardwareSizeFloat.Target>32</param.HardwareSizeFloat.Target>\n      <param.HardwareSizeDouble.Target>64</param.HardwareSizeDouble.Target>\n      <param.HardwareSizeWord.Target>64</param.HardwareSizeWord.Target>\n      <param.HardwareSizePointer.Target>64</param.HardwareSizePointer.Target>\n      <param.HardwareEndianness.Target>option.HardwareEndianness.Little</param.HardwareEndianness.Target>\n      <param.HardwareArithmeticRightShift.Target>true</param.HardwareArithmeticRightShift.Target>\n      <param.HardwareLongLongMode.Target>true</param.HardwareLongLongMode.Target>\n      <param.HardwareAtomicIntegerSize.Target>option.HardwareAtomicIntegerSize.Char</param.HardwareAtomicIntegerSize.Target>\n      <param.HardwareAtomicFloatSize.Target>option.HardwareAtomicFloatSize.None</param.HardwareAtomicFloatSize.Target>\n      <param.HardwareDivisionRounding.Target>option.HardwareDivisionRounding.Zero</param.HardwareDivisionRounding.Target>\n      <param.CastingMode />\n      <param.IndentStyle />\n      <param.IndentSize />\n      <param.ConstantFoldingTimeout>40000</param.ConstantFoldingTimeout>\n      <param.RecursionLimit />\n      <param.IncludeTerminateFcn />\n      <param.GenerateExampleMain>option.GenerateExampleMain.GenerateCodeOnly</param.GenerateExampleMain>\n      <param.PreserveVariableNames>option.PreserveVariableNames.UserNames</param.PreserveVariableNames>\n      <param.TargetLang>option.TargetLang.C</param.TargetLang>\n      <param.CCompilerOptimization />\n      <param.CCompilerCustomOptimizations />\n      <param.GenerateMakefile />\n      <param.BuildToolEnable />\n      <param.MakeCommand />\n      <param.TemplateMakefile />\n      <param.BuildToolConfiguration />\n      <param.InlineThreshold>10</param.InlineThreshold>\n      <param.InlineThresholdMax>200</param.InlineThresholdMax>\n      <param.InlineStackLimit>4000</param.InlineStackLimit>\n      <param.EnableMemcpy>true</param.EnableMemcpy>\n      <param.MemcpyThreshold>64</param.MemcpyThreshold>\n      <param.EnableOpenMP>true</param.EnableOpenMP>\n      <param.InitFltsAndDblsToZero>true</param.InitFltsAndDblsToZero>\n      <param.PassStructByReference />\n      <param.UseECoderFeatures />\n      <unset>\n        <param.WorkingFolder />\n        <param.SpecifiedWorkingFolder />\n        <param.BuildFolder />\n        <param.SpecifiedBuildFolder />\n        <param.SearchPaths />\n        <param.SaturateOnIntegerOverflow />\n        <param.PurelyIntegerCode />\n        <param.SupportNonFinite />\n        <param.EnableVariableSizing />\n        <param.DynamicMemoryAllocation />\n        <param.DynamicMemoryAllocationThreshold />\n        <param.StackUsageMax />\n        <param.MultiInstanceCode />\n        <param.FilePartitionMethod />\n        <param.GenerateComments />\n        <param.CommentStyle />\n        <param.MATLABSourceComments />\n        <param.MATLABFcnDesc />\n        <param.DataTypeReplacement />\n        <param.ConvertIfToSwitch />\n        <param.PreserveExternInFcnDecls />\n        <param.EnableSignedLeftShifts />\n        <param.EnableSignedRightShifts />\n        <param.ParenthesesLevel />\n        <param.MaxIdLength />\n        <param.CustomSymbolStrGlobalVar />\n        <param.CustomSymbolStrType />\n        <param.CustomSymbolStrField />\n        <param.CustomSymbolStrFcn />\n        <param.CustomSymbolStrTmpVar />\n        <param.CustomSymbolStrMacro />\n        <param.CustomSymbolStrEMXArray />\n        <param.CustomSymbolStrEMXArrayFcn />\n        <param.ReservedNameArray />\n        <param.RuntimeChecks />\n        <param.Verbose />\n        <param.GenerateReport />\n        <param.GenerateCodeMetricsReport />\n        <param.GenerateCodeReplacementReport />\n        <param.HighlightPotentialDataTypeIssues />\n        <param.LaunchReport />\n        <param.SILDebugging />\n        <param.CodeExecutionProfiling />\n        <param.DefaultTestFile />\n        <param.MergeInstrumentationResults />\n        <param.RanPilSilVerification />\n        <param.VerificationMode />\n        <param.VerificationStatus />\n        <param.CustomSourceCode />\n        <param.CustomHeaderCode />\n        <param.CustomInitializer />\n        <param.CustomTerminator />\n        <param.CustomInclude />\n        <param.CustomSource />\n        <param.CustomLibrary />\n        <param.PostCodeGenCommand />\n        <param.TargetLangStandard />\n        <param.DeprecatedCRLFlag />\n        <param.SameHardware />\n        <param.Toolchain />\n        <param.BuildConfiguration />\n        <param.CustomToolchainOptions />\n        <var.ToolchainSettingsVisible />\n        <param.target.Data />\n        <param.target.ActiveType />\n        <param.target.ActiveTarget />\n        <param.HardwareVendor.Production />\n        <param.HardwareType.Production />\n        <param.HWDeviceType.Production />\n        <var.instance.enabled.Production />\n        <param.HardwareVendor.Target />\n        <param.HardwareType.Target />\n        <param.HWDeviceType.Target />\n        <var.instance.enabled.Target />\n        <param.CastingMode />\n        <param.IndentStyle />\n        <param.IndentSize />\n        <param.ConstantFoldingTimeout />\n        <param.RecursionLimit />\n        <param.IncludeTerminateFcn />\n        <param.GenerateExampleMain />\n        <param.PreserveVariableNames />\n        <param.TargetLang />\n        <param.CCompilerOptimization />\n        <param.CCompilerCustomOptimizations />\n        <param.GenerateMakefile />\n        <param.BuildToolEnable />\n        <param.MakeCommand />\n        <param.TemplateMakefile />\n        <param.BuildToolConfiguration />\n        <param.InlineThreshold />\n        <param.InlineThresholdMax />\n        <param.InlineStackLimit />\n        <param.EnableMemcpy />\n        <param.MemcpyThreshold />\n        <param.EnableOpenMP />\n        <param.InitFltsAndDblsToZero />\n        <param.PassStructByReference />\n        <param.UseECoderFeatures />\n      </unset>\n    </profile>\n    <profile key=\"profile.hdl\">\n      <param.hdl.Workflow />\n      <param.hdl.TargetLanguage />\n      <param.hdl.TargetPlatform />\n      <param.hdl.SynthesisTool />\n      <param.hdl.InputFrequency />\n      <param.hdl.TargetFrequency />\n      <param.hdl.IPCoreName />\n      <param.hdl.IPCoreVersion />\n      <param.hdl.AdditionalIPFiles />\n      <param.hdl.ExecutionMode />\n      <param.hdl.SynthesisToolChipFamily />\n      <param.hdl.SynthesisToolDeviceName />\n      <param.hdl.SynthesisToolPackageName />\n      <param.hdl.SynthesisToolSpeedValue />\n      <param.hdl.TargetInterface />\n      <param.hdl.CheckConformance />\n      <param.hdl.LaunchConformanceReport />\n      <param.hdl.GenerateEDAScripts />\n      <param.hdl.GenerateHDLCode />\n      <param.hdl.AdditionalSynthesisProjectFiles />\n      <param.hdl.CriticalPathSource />\n      <param.hdl.EmbeddedSystemTool />\n      <param.hdl.EmbeddedSystemProjectFolder />\n      <param.hdl.BitstreamBuildMode />\n      <param.hdl.ReferenceDesign />\n      <param.hdl.ReferenceDesignPath />\n      <param.hdl.LegacyDefaultTestFile />\n      <param.WorkingFolder>option.WorkingFolder.Project</param.WorkingFolder>\n      <param.SpecifiedWorkingFolder />\n      <param.BuildFolder>option.BuildFolder.Project</param.BuildFolder>\n      <param.SpecifiedBuildFolder />\n      <param.SearchPaths />\n      <param.hdl.MapPersistentVarsToRAM />\n      <param.hdl.RAMThreshold />\n      <param.hdl.RAMVariableNames />\n      <param.hdl.RegisterInputs />\n      <param.hdl.RegisterOutputs />\n      <param.hdl.DistributedPipelining />\n      <param.hdl.DistributedPipeliningPriority />\n      <param.hdl.PreserveDesignDelays />\n      <param.hdl.InputPipeline />\n      <param.hdl.OutputPipeline />\n      <param.hdl.PipelineVariables />\n      <param.hdl.ResourceSharing />\n      <param.hdl.ConstantMultiplierOptimization />\n      <param.hdl.LoopOptimization />\n      <param.GenerateComments>true</param.GenerateComments>\n      <param.MATLABSourceComments>false</param.MATLABSourceComments>\n      <param.hdl.VHDLFileExt />\n      <param.hdl.VerilogFileExt />\n      <param.hdl.DateComment />\n      <param.hdl.UserComment />\n      <param.hdl.ModulePrefix />\n      <param.hdl.PackagePostfix />\n      <param.hdl.EntityConflictPostfix />\n      <param.hdl.ReservedWordPostfix />\n      <param.hdl.ClockProcessPostfix />\n      <param.hdl.ComplexRealPostfix />\n      <param.hdl.ComplexImagPostfix />\n      <param.hdl.PipelinePostfix />\n      <param.hdl.EnablePrefix />\n      <param.hdl.InlineConfigurations />\n      <param.hdl.UseRisingEdge />\n      <param.hdl.UseMatrixTypesInHDL />\n      <param.hdl.HDLCompileFilePostfix />\n      <param.hdl.HDLCompileInit />\n      <param.hdl.HDLCompileVHDLCmd />\n      <param.hdl.HDLCompileVerilogCmd />\n      <param.hdl.HDLCompileTerm />\n      <param.hdl.HDLSimFilePostfix />\n      <param.hdl.HDLSimInit />\n      <param.hdl.HDLSimCmd />\n      <param.hdl.HDLSimViewWaveCmd />\n      <param.hdl.HDLSimTerm />\n      <param.hdl.HDLSynthTool />\n      <var.hasSynthesisToolScript />\n      <var.toolSpecificEDAScript />\n      <param.hdl.HDLSynthFilePostfix />\n      <param.hdl.HDLSynthInit />\n      <param.hdl.HDLSynthCmd />\n      <param.hdl.HDLSynthTerm />\n      <param.hdl.HDLLintTool />\n      <var.LintToolScript />\n      <var.hasHDLLintTool />\n      <param.hdl.HDLLintInit />\n      <param.hdl.HDLLintCmd />\n      <param.hdl.HDLLintTerm />\n      <param.hdl.ResetType />\n      <param.hdl.ResetAssertedLevel />\n      <param.hdl.ResetInputPort />\n      <param.hdl.ClockInputPort />\n      <param.hdl.ClockEdge />\n      <param.hdl.ClockEnableInputPort />\n      <param.hdl.Oversampling />\n      <param.hdl.EnableRate />\n      <param.hdl.InputType />\n      <param.hdl.OutputType />\n      <param.hdl.ClockEnableOutputPort />\n      <param.hdl.ScalarizePorts />\n      <param.hdl.HDLCodingStandard />\n      <var.HDLCodingStandard_FilterPassingRules_enable />\n      <var.HDLCodingStandard_DetectDuplicateNamesCheck_enable />\n      <var.HDLCodingStandard_HDLKeywords_enable />\n      <var.HDLCodingStandard_ModuleInstanceEntityNameLength_enable />\n      <var.HDLCodingStandard_ModuleInstanceEntityNameLength_min />\n      <var.HDLCodingStandard_ModuleInstanceEntityNameLength_max />\n      <var.HDLCodingStandard_SignalPortParamNameLength_enable />\n      <var.HDLCodingStandard_SignalPortParamNameLength_min />\n      <var.HDLCodingStandard_SignalPortParamNameLength_max />\n      <var.HDLCodingStandard_MinimizeVariableUsage_enable />\n      <var.HDLCodingStandard_InitialStatements_enable />\n      <var.HDLCodingStandard_IfElseChain_enable />\n      <var.HDLCodingStandard_IfElseChain_length />\n      <var.HDLCodingStandard_IfElseNesting_enable />\n      <var.HDLCodingStandard_IfElseNesting_depth />\n      <var.HDLCodingStandard_MultiplierBitWidth_enable />\n      <var.HDLCodingStandard_MultiplierBitWidth_width />\n      <var.HDLCodingStandard_NonIntegerTypes_enable />\n      <var.HDLCodingStandard_LineLength_enable />\n      <var.HDLCodingStandard_LineLength_length />\n      <param.hdl.GenerateCosimTestBench />\n      <param.hdl.CosimLogOutputs />\n      <param.hdl.CosimTool />\n      <param.hdl.CosimRunMode />\n      <param.hdl.SimulateCosimTestBench />\n      <param.hdl.CosimClockHighTime />\n      <param.hdl.CosimClockLowTime />\n      <param.hdl.CosimHoldTime />\n      <param.hdl.CosimClockEnableDelay />\n      <param.hdl.CosimResetLength />\n      <param.hdl.GenerateFILTestBench />\n      <param.hdl.FILLogOutputs />\n      <param.hdl.FILBoardName />\n      <param.hdl.FILConnection />\n      <param.hdl.FILBoardIPAddress />\n      <param.hdl.FILBoardMACAddress />\n      <param.hdl.FILAdditionalFiles />\n      <param.hdl.SimulateFILTestBench />\n      <var.hasTestBench />\n      <param.hdl.GenerateHDLTestBench />\n      <param.hdl.SimulateGeneratedCode />\n      <param.hdl.SimulationTool />\n      <param.hdl.TestBenchPostfix />\n      <param.hdl.ForceClock />\n      <param.hdl.ClockHighTime />\n      <param.hdl.ClockLowTime />\n      <param.hdl.HoldTime />\n      <param.hdl.ForceClockEnable />\n      <param.hdl.TestBenchClockEnableDelay />\n      <param.hdl.ForceReset />\n      <param.hdl.ResetLength />\n      <param.hdl.HoldInputDataBetweenSamples />\n      <param.hdl.InputDataInterval />\n      <param.hdl.InitializeTestBenchInputs />\n      <param.hdl.MultifileTestBench />\n      <param.hdl.TestBenchDataPostfix />\n      <param.hdl.TestReferencePostfix />\n      <param.hdl.UseFileIOInTestBench />\n      <param.hdl.IgnoreDataChecking />\n      <param.hdl.SimulationIterationLimit />\n      <param.hdl.UseFiAccelForTestBench />\n      <param.hdl.hdlVariables />\n      <param.hdl.hdlComputedVariables />\n      <param.hdl.InitializeBlockRAM />\n      <param.hdl.RAMArchitecture />\n      <param.hdl.PartitionFunctions />\n      <param.hdl.GenerateMLFcnBlock />\n      <param.hdl.GenerateXSGBlock />\n      <unset>\n        <param.hdl.Workflow />\n        <param.hdl.TargetLanguage />\n        <param.hdl.TargetPlatform />\n        <param.hdl.SynthesisTool />\n        <param.hdl.InputFrequency />\n        <param.hdl.TargetFrequency />\n        <param.hdl.IPCoreName />\n        <param.hdl.IPCoreVersion />\n        <param.hdl.AdditionalIPFiles />\n        <param.hdl.ExecutionMode />\n        <param.hdl.SynthesisToolChipFamily />\n        <param.hdl.SynthesisToolDeviceName />\n        <param.hdl.SynthesisToolPackageName />\n        <param.hdl.SynthesisToolSpeedValue />\n        <param.hdl.TargetInterface />\n        <param.hdl.CheckConformance />\n        <param.hdl.LaunchConformanceReport />\n        <param.hdl.GenerateEDAScripts />\n        <param.hdl.GenerateHDLCode />\n        <param.hdl.AdditionalSynthesisProjectFiles />\n        <param.hdl.CriticalPathSource />\n        <param.hdl.EmbeddedSystemTool />\n        <param.hdl.EmbeddedSystemProjectFolder />\n        <param.hdl.BitstreamBuildMode />\n        <param.hdl.ReferenceDesign />\n        <param.hdl.ReferenceDesignPath />\n        <param.hdl.LegacyDefaultTestFile />\n        <param.WorkingFolder />\n        <param.SpecifiedWorkingFolder />\n        <param.BuildFolder />\n        <param.SpecifiedBuildFolder />\n        <param.SearchPaths />\n        <param.hdl.MapPersistentVarsToRAM />\n        <param.hdl.RAMThreshold />\n        <param.hdl.RAMVariableNames />\n        <param.hdl.RegisterInputs />\n        <param.hdl.RegisterOutputs />\n        <param.hdl.DistributedPipelining />\n        <param.hdl.DistributedPipeliningPriority />\n        <param.hdl.PreserveDesignDelays />\n        <param.hdl.InputPipeline />\n        <param.hdl.OutputPipeline />\n        <param.hdl.PipelineVariables />\n        <param.hdl.ResourceSharing />\n        <param.hdl.ConstantMultiplierOptimization />\n        <param.hdl.LoopOptimization />\n        <param.GenerateComments />\n        <param.MATLABSourceComments />\n        <param.hdl.VHDLFileExt />\n        <param.hdl.VerilogFileExt />\n        <param.hdl.DateComment />\n        <param.hdl.UserComment />\n        <param.hdl.ModulePrefix />\n        <param.hdl.PackagePostfix />\n        <param.hdl.EntityConflictPostfix />\n        <param.hdl.ReservedWordPostfix />\n        <param.hdl.ClockProcessPostfix />\n        <param.hdl.ComplexRealPostfix />\n        <param.hdl.ComplexImagPostfix />\n        <param.hdl.PipelinePostfix />\n        <param.hdl.EnablePrefix />\n        <param.hdl.InlineConfigurations />\n        <param.hdl.UseRisingEdge />\n        <param.hdl.UseMatrixTypesInHDL />\n        <param.hdl.HDLCompileFilePostfix />\n        <param.hdl.HDLCompileInit />\n        <param.hdl.HDLCompileVHDLCmd />\n        <param.hdl.HDLCompileVerilogCmd />\n        <param.hdl.HDLCompileTerm />\n        <param.hdl.HDLSimFilePostfix />\n        <param.hdl.HDLSimInit />\n        <param.hdl.HDLSimCmd />\n        <param.hdl.HDLSimViewWaveCmd />\n        <param.hdl.HDLSimTerm />\n        <param.hdl.HDLSynthTool />\n        <var.hasSynthesisToolScript />\n        <var.toolSpecificEDAScript />\n        <param.hdl.HDLSynthFilePostfix />\n        <param.hdl.HDLSynthInit />\n        <param.hdl.HDLSynthCmd />\n        <param.hdl.HDLSynthTerm />\n        <param.hdl.HDLLintTool />\n        <var.LintToolScript />\n        <var.hasHDLLintTool />\n        <param.hdl.HDLLintInit />\n        <param.hdl.HDLLintCmd />\n        <param.hdl.HDLLintTerm />\n        <param.hdl.ResetType />\n        <param.hdl.ResetAssertedLevel />\n        <param.hdl.ResetInputPort />\n        <param.hdl.ClockInputPort />\n        <param.hdl.ClockEdge />\n        <param.hdl.ClockEnableInputPort />\n        <param.hdl.Oversampling />\n        <param.hdl.EnableRate />\n        <param.hdl.InputType />\n        <param.hdl.OutputType />\n        <param.hdl.ClockEnableOutputPort />\n        <param.hdl.ScalarizePorts />\n        <param.hdl.HDLCodingStandard />\n        <var.HDLCodingStandard_FilterPassingRules_enable />\n        <var.HDLCodingStandard_DetectDuplicateNamesCheck_enable />\n        <var.HDLCodingStandard_HDLKeywords_enable />\n        <var.HDLCodingStandard_ModuleInstanceEntityNameLength_enable />\n        <var.HDLCodingStandard_ModuleInstanceEntityNameLength_min />\n        <var.HDLCodingStandard_ModuleInstanceEntityNameLength_max />\n        <var.HDLCodingStandard_SignalPortParamNameLength_enable />\n        <var.HDLCodingStandard_SignalPortParamNameLength_min />\n        <var.HDLCodingStandard_SignalPortParamNameLength_max />\n        <var.HDLCodingStandard_MinimizeVariableUsage_enable />\n        <var.HDLCodingStandard_InitialStatements_enable />\n        <var.HDLCodingStandard_IfElseChain_enable />\n        <var.HDLCodingStandard_IfElseChain_length />\n        <var.HDLCodingStandard_IfElseNesting_enable />\n        <var.HDLCodingStandard_IfElseNesting_depth />\n        <var.HDLCodingStandard_MultiplierBitWidth_enable />\n        <var.HDLCodingStandard_MultiplierBitWidth_width />\n        <var.HDLCodingStandard_NonIntegerTypes_enable />\n        <var.HDLCodingStandard_LineLength_enable />\n        <var.HDLCodingStandard_LineLength_length />\n        <param.hdl.GenerateCosimTestBench />\n        <param.hdl.CosimLogOutputs />\n        <param.hdl.CosimTool />\n        <param.hdl.CosimRunMode />\n        <param.hdl.SimulateCosimTestBench />\n        <param.hdl.CosimClockHighTime />\n        <param.hdl.CosimClockLowTime />\n        <param.hdl.CosimHoldTime />\n        <param.hdl.CosimClockEnableDelay />\n        <param.hdl.CosimResetLength />\n        <param.hdl.GenerateFILTestBench />\n        <param.hdl.FILLogOutputs />\n        <param.hdl.FILBoardName />\n        <param.hdl.FILConnection />\n        <param.hdl.FILBoardIPAddress />\n        <param.hdl.FILBoardMACAddress />\n        <param.hdl.FILAdditionalFiles />\n        <param.hdl.SimulateFILTestBench />\n        <var.hasTestBench />\n        <param.hdl.GenerateHDLTestBench />\n        <param.hdl.SimulateGeneratedCode />\n        <param.hdl.SimulationTool />\n        <param.hdl.TestBenchPostfix />\n        <param.hdl.ForceClock />\n        <param.hdl.ClockHighTime />\n        <param.hdl.ClockLowTime />\n        <param.hdl.HoldTime />\n        <param.hdl.ForceClockEnable />\n        <param.hdl.TestBenchClockEnableDelay />\n        <param.hdl.ForceReset />\n        <param.hdl.ResetLength />\n        <param.hdl.HoldInputDataBetweenSamples />\n        <param.hdl.InputDataInterval />\n        <param.hdl.InitializeTestBenchInputs />\n        <param.hdl.MultifileTestBench />\n        <param.hdl.TestBenchDataPostfix />\n        <param.hdl.TestReferencePostfix />\n        <param.hdl.UseFileIOInTestBench />\n        <param.hdl.IgnoreDataChecking />\n        <param.hdl.SimulationIterationLimit />\n        <param.hdl.UseFiAccelForTestBench />\n        <param.hdl.hdlVariables />\n        <param.hdl.hdlComputedVariables />\n        <param.hdl.InitializeBlockRAM />\n        <param.hdl.RAMArchitecture />\n        <param.hdl.PartitionFunctions />\n        <param.hdl.GenerateMLFcnBlock />\n        <param.hdl.GenerateXSGBlock />\n      </unset>\n    </profile>\n    <param.objective>option.objective.c</param.objective>\n    <param.WorkflowStep>inputTypes</param.WorkflowStep>\n    <param.TestSnippets>\n      <item>demo_start_v2</item>\n    </param.TestSnippets>\n    <param.DefaultImportExportVariable />\n    <param.UseGlobals>option.UseGlobals.No</param.UseGlobals>\n    <param.outputfile>${PROJECT_ROOT}/sampleLine_mex.mexmaci64</param.outputfile>\n    <param.version />\n    <param.HasECoderFeatures>true</param.HasECoderFeatures>\n    <param.mex.mainhtml />\n    <param.grt.mainhtml />\n    <param.CallGeneratedCodeFromTest>true</param.CallGeneratedCodeFromTest>\n    <param.AutoInferDefaultFile />\n    <param.AutoInferUseVariableSize />\n    <param.AutoInferUseUnboundedSize />\n    <param.AutoInferVariableSizeThreshold />\n    <param.AutoInferUnboundedSizeThreshold />\n    <param.EnableFixedPointStep />\n    <param.EnableScreener>true</param.EnableScreener>\n    <param.AnnotationChecksum>1898965005</param.AnnotationChecksum>\n    <var.LegacyTarget />\n    <var.MirrorOnOpen>false</var.MirrorOnOpen>\n    <param.FixedPointEnabled>false</param.FixedPointEnabled>\n    <var.redirectedInputTypeData />\n    <var.DismissScreener>true</var.DismissScreener>\n    <param.unifiedParamStorage />\n    <var.gc.lastOutputRoot>codegen/mex/sampleLine</var.gc.lastOutputRoot>\n    <var.gc.preBuildChecksum>2341851798</var.gc.preBuildChecksum>\n    <var.cfi.lastOutputRoot>codegen/mex/sampleLine</var.cfi.lastOutputRoot>\n    <var.cfi.preBuildChecksum>2739719242</var.cfi.preBuildChecksum>\n    <var.lastCfiTestSnippet>demo_start_v2</var.lastCfiTestSnippet>\n    <var.outdatedOnRestore>false</var.outdatedOnRestore>\n    <var.lastUserSourceChecksum>&lt;?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?&gt;&lt;checksum&gt;&lt;includedFiles&gt;&lt;file&gt;/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/code/mexfiles/sampleLine.m&lt;/file&gt;&lt;/includedFiles&gt;&lt;value&gt;1282936523&lt;/value&gt;&lt;/checksum&gt;</var.lastUserSourceChecksum>\n    <var.sourceSetState>&lt;?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?&gt;&lt;sourceModel&gt;&lt;primarySourceFiles/&gt;&lt;fixedPointSourceFiles/&gt;&lt;fixedPointSourceRegistered&gt;false&lt;/fixedPointSourceRegistered&gt;&lt;fixedPointSourceSelected&gt;false&lt;/fixedPointSourceSelected&gt;&lt;/sourceModel&gt;</var.sourceSetState>\n    <param.forceMexBuild>false</param.forceMexBuild>\n    <param.configImportActive>false</param.configImportActive>\n    <var.boundToGui>true</var.boundToGui>\n    <param.mex.outputfile>sampleLine_mex</param.mex.outputfile>\n    <param.grt.outputfile>sampleLine</param.grt.outputfile>\n    <param.artifact>option.target.artifact.mex</param.artifact>\n    <param.outputfile>${PROJECT_ROOT}/sampleLine_mex.mexmaci64</param.outputfile>\n    <param.EnableAutoExtrinsicCalls>true</param.EnableAutoExtrinsicCalls>\n    <param.UsePreconditions>false</param.UsePreconditions>\n    <param.FeatureFlags />\n    <param.FixedPointMode>option.FixedPointMode.None</param.FixedPointMode>\n    <param.AutoScaleLoopIndexVariables />\n    <param.ComputedFixedPointData />\n    <param.UserFixedPointData />\n    <param.DefaultWordLength>16</param.DefaultWordLength>\n    <param.DefaultFractionLength>4</param.DefaultFractionLength>\n    <param.FixedPointSafetyMargin>0</param.FixedPointSafetyMargin>\n    <param.FixedPointFimath>fimath('RoundingMethod', 'Floor', 'OverflowAction', 'Wrap', 'ProductMode', 'FullPrecision', 'MaxProductWordLength', 128, 'SumMode', 'FullPrecision', 'MaxSumWordLength', 128)</param.FixedPointFimath>\n    <param.FixedPointTypeSource>option.FixedPointTypeSource.SimAndDerived</param.FixedPointTypeSource>\n    <param.StaticAnalysisTimeout />\n    <param.StaticAnalysisGlobalRangesOnly>false</param.StaticAnalysisGlobalRangesOnly>\n    <param.LogAllIOValues>false</param.LogAllIOValues>\n    <param.DetectOverflows>false</param.DetectOverflows>\n    <param.LogHistogram>false</param.LogHistogram>\n    <param.ShowCoverage>true</param.ShowCoverage>\n    <param.ExcludedFixedPointVerificationFiles />\n    <param.ExcludedFixedPointSimulationFiles />\n    <param.InstrumentedBuildChecksum />\n    <param.FixedPointStaticAnalysisChecksum />\n    <param.InstrumentedMexFile />\n    <param.FixedPointValidationChecksum />\n    <param.FixedPointSourceCodeChecksum />\n    <param.FixedPointFunctionReplacements />\n    <param.OptimizeWholeNumbers>true</param.OptimizeWholeNumbers>\n    <param.ContainerTypes>false</param.ContainerTypes>\n    <param.GeneratedFixedPointFileSuffix>_fixpt</param.GeneratedFixedPointFileSuffix>\n    <param.PlotFunction />\n    <param.SDIPlot>false</param.SDIPlot>\n    <param.EnableCodeEfficiencyChecks>false</param.EnableCodeEfficiencyChecks>\n    <param.DefaultFixedPointSignedness>option.DefaultFixedPointSignedness.Automatic</param.DefaultFixedPointSignedness>\n    <param.FixedPointTypeProposalMode>option.FixedPointTypeProposalMode.ProposeFractionLengths</param.FixedPointTypeProposalMode>\n    <param.EnableFixedPointStep />\n    <var.lastFixedPointAction />\n    <var.lastSimContext />\n    <var.lastVerifyContext />\n    <param.fpDataRoot />\n    <param.fpUserFileChecksum />\n    <var.snapshotChecksum />\n    <unset>\n      <param.DefaultImportExportVariable />\n      <param.UseGlobals />\n      <param.outputfile />\n      <param.version />\n      <param.HasECoderFeatures />\n      <param.mex.mainhtml />\n      <param.grt.mainhtml />\n      <param.CallGeneratedCodeFromTest />\n      <param.AutoInferDefaultFile />\n      <param.AutoInferUseVariableSize />\n      <param.AutoInferUseUnboundedSize />\n      <param.AutoInferVariableSizeThreshold />\n      <param.AutoInferUnboundedSizeThreshold />\n      <param.EnableFixedPointStep />\n      <param.EnableScreener />\n      <var.LegacyTarget />\n      <var.MirrorOnOpen />\n      <param.FixedPointEnabled />\n      <var.redirectedInputTypeData />\n      <param.unifiedParamStorage />\n      <var.outdatedOnRestore />\n      <param.configImportActive />\n      <param.mex.outputfile />\n      <param.grt.outputfile />\n      <param.EnableAutoExtrinsicCalls />\n      <param.UsePreconditions />\n      <param.FeatureFlags />\n      <param.FixedPointMode />\n      <param.AutoScaleLoopIndexVariables />\n      <param.ComputedFixedPointData />\n      <param.UserFixedPointData />\n      <param.DefaultWordLength />\n      <param.DefaultFractionLength />\n      <param.FixedPointSafetyMargin />\n      <param.FixedPointFimath />\n      <param.FixedPointTypeSource />\n      <param.StaticAnalysisTimeout />\n      <param.StaticAnalysisGlobalRangesOnly />\n      <param.LogAllIOValues />\n      <param.DetectOverflows />\n      <param.LogHistogram />\n      <param.ShowCoverage />\n      <param.ExcludedFixedPointVerificationFiles />\n      <param.ExcludedFixedPointSimulationFiles />\n      <param.InstrumentedBuildChecksum />\n      <param.FixedPointStaticAnalysisChecksum />\n      <param.InstrumentedMexFile />\n      <param.FixedPointValidationChecksum />\n      <param.FixedPointSourceCodeChecksum />\n      <param.FixedPointFunctionReplacements />\n      <param.OptimizeWholeNumbers />\n      <param.ContainerTypes />\n      <param.GeneratedFixedPointFileSuffix />\n      <param.PlotFunction />\n      <param.SDIPlot />\n      <param.EnableCodeEfficiencyChecks />\n      <param.DefaultFixedPointSignedness />\n      <param.FixedPointTypeProposalMode />\n      <var.lastFixedPointAction />\n      <var.lastSimContext />\n      <var.lastVerifyContext />\n      <param.fpDataRoot />\n      <param.fpUserFileChecksum />\n      <var.snapshotChecksum />\n    </unset>\n    <fileset.entrypoints>\n      <file custom-data-expanded=\"false\" value=\"${PROJECT_ROOT}/sampleLine.m\">\n        <Inputs fileName=\"sampleLine.m\" functionName=\"sampleLine\">\n          <Input Name=\"rho\">\n            <Class>double</Class>\n            <Size>1 x 1</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"theta\">\n            <Class>double</Class>\n            <Size>1 x 1</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"m\">\n            <Class>double</Class>\n            <Size>1 x 1</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"n\">\n            <Class>double</Class>\n            <Size>1 x 1</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n          <Input Name=\"pp\">\n            <Class>double</Class>\n            <Size>1 x 2</Size>\n            <Value />\n            <InitialValue />\n            <UserDefined>false</UserDefined>\n            <Complex>false</Complex>\n          </Input>\n        </Inputs>\n      </file>\n    </fileset.entrypoints>\n    <fileset.testbench>\n      <file>/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/demo_start_v2.m</file>\n      <file>/Users/yimingqian/Dropbox/PhD/Road Evaluation Project/roadDetectionCode/code/LineSegDet2017/demo_start_v2.m</file>\n    </fileset.testbench>\n    <build-deliverables>\n      <file location=\"/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/code/mexfiles\" name=\"sampleLine_mex.mexmaci64\" optional=\"false\">/Users/yimingqian/Dropbox/My Publications/CVPR 2017/code/LineSegDet2017/code/mexfiles/sampleLine_mex.mexmaci64</file>\n    </build-deliverables>\n    <workflow />\n    <matlab>\n      <root>/Applications/MATLAB_R2015b.app</root>\n      <toolboxes>\n        <toolbox name=\"matlabhdlcoder\" />\n        <toolbox name=\"fixedpoint\" />\n        <toolbox name=\"embeddedcoder\" />\n        <toolbox name=\"matlabcoder\" />\n      </toolboxes>\n      <toolbox>\n        <matlabhdlcoder>\n          <enabled>true</enabled>\n        </matlabhdlcoder>\n      </toolbox>\n      <toolbox>\n        <fixedpoint>\n          <enabled>true</enabled>\n        </fixedpoint>\n      </toolbox>\n      <toolbox>\n        <embeddedcoder>\n          <enabled>true</enabled>\n        </embeddedcoder>\n      </toolbox>\n      <toolbox>\n        <matlabcoder>\n          <enabled>true</enabled>\n        </matlabcoder>\n      </toolbox>\n    </matlab>\n    <platform>\n      <unix>true</unix>\n      <mac>true</mac>\n      <windows>false</windows>\n      <win2k>false</win2k>\n      <winxp>false</winxp>\n      <vista>false</vista>\n      <linux>false</linux>\n      <solaris>false</solaris>\n      <osver>10.12.6</osver>\n      <os32>false</os32>\n      <os64>true</os64>\n      <arch>maci64</arch>\n      <matlab>true</matlab>\n    </platform>\n  </configuration>\n</deployment-project>"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/precompute_kernels_sparse_res2.m",
    "content": "function [ kernels, kernels_flip, kernel_params] = precompute_kernels_sparse_res2(r_max, SIGMA_X, SIGMA_TH, r_res, th_res)\n%PRECOMPUTE_KERNELS Precomputes the kernels for Hough Transform\n%\n%   Inputs:\n%               r_max:      Maximum value r_th can take\n%               SIGMA_X:    Variance of the distribution of position\n%               SIGMA_TH:   Variance of the distribution of angular\n%                           uncertainty\n%\n%   Output:\n%               kernels:    Precomputed kernels for the ranges\n%\n%   Author:\n%               Ron Tal\n%\n%   Date:\n%               January 18, 2009\n%\n%   Description:\n%               This function precomputes the kernels to be used in the\n%               Hough Transform method. The kernels are computed for the\n%               given range at the given resolutions, using the given sigma\n%               values.\n%\n%   Recommended value for SIGMA_TH: 0.1308\n%   Recommended value for SIGMA_X:  0.3933\n%\n    kernels = cell(1, r_max);\n    kernels_flip = cell(1, r_max);\n    kernel_params = cell(1, r_max);\n    for e = -r_max:1:r_max\n        [kern,ind]=computeKernel(e,r_max,SIGMA_X, SIGMA_TH, r_res, th_res);\n        kernels(1, ind) = {kern};\n        kernels_flip(1, ind) = {kern};\n        kernel_params(1, ind) = {max(kern)};\n    end  \nend\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/project_point_to_line_segment_vec.m",
    "content": "function [q, d] = project_point_to_line_segment_vec(A,B,p)\n  % returns q the closest point to p on the line segment from A to B \n%   q = zeros(size(p));\n  % vector from A to B\n  % Vectorize input\n  [m, n] = size(p);\n  A_v = repmat(A,m,1);\n  B_v = repmat(B, m,1);\n  AB = (B_v-A_v);\n  % squared distance from A to B\n  AB_squared = dot(AB(1,:),AB(1,:));\n  if(AB_squared == 0)\n    % A and B are the same point\n    q = A_v;\n  else\n    % vector from A to p\n    Ap = (p-A_v);\n    t = dot(Ap,AB, 2)/AB_squared;\n    q = A_v + repmat(t,1,2).* AB;\n    q(t < 0.0,:) = A_v(t < 0.0,:);\n    q(t > 1.0,:) = B_v(t > 1.0,:);\n  end\n  diff = q-p;\n  d = sqrt(diff(:,1).^2 + diff(:,2).^2);\nend"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/run_lineSegmentAlgorithm.m",
    "content": "function [out, P] = run_lineSegmentAlgorithm(kernels, kernels_flip, kernel_params, sig_bound, r_res, th_res, img,scale_factor,pp)                                  \n\n\n\nfrac = 0.05;\n%the maximum number of lines that could be extract from the algorithm\nmaxLine=5000;\nLIKE_MODEL = load(['parameters', filesep, 'likelihood_model.mat']);\n[P, edgeStruct] = determine_hough_lines_kernel_vote_remove(img, pp, kernels, kernels_flip, maxLine, kernel_params, r_res, th_res, sig_bound, frac,scale_factor);\n[begin_points, end_points,ls_likelihoods] = get_all_segments_assoc_edgeremoval( P, edgeStruct, pp, LIKE_MODEL, scale_factor);\nttlLS = size(begin_points,1);\nout = zeros(ttlLS,5);  \nfor dd = 1:ttlLS \n    out(dd,:) = [begin_points(dd,1), begin_points(dd,2), end_points(dd,1), end_points(dd,2),ls_likelihoods(dd)]; %E.A.         \nend\n\n\n\n\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/trace_Back.m",
    "content": "function [ lsjoint, lslogz, final_labels, on_nodes, likelihoods ] = trace_Back(DP_table, aux_table, z, node_idx, obsLike)\n% It traces back the dinamic programming results assigning labels to each\n% position (On, Off). It also computes the joint probability and the log\n% evidenct for each line segment. Additionally computes the sum of the\n% marginals of all locations along the detected segments\n%\n% Input\n%   - DP_Table: Table that contains the partial results of the Dynamic\n%   programing solution\n%   - aux_table: table that contains the labels and it will be used to\n%   unbound the results\n%   - z: Normalization constant\n%   - gamma: Marginals at each position along the line\n%   - node_idx: Locations along the line to be considered\n%\n% Output:\n%   - lsjoint: Joint probabilty at segment level\n%   - lslogz: Evidence of line segments\n%   - lsgamma: Sum of the marginals of the positions along segments\n%   - final_labels: labels associated with the positions along the line\n%   - on_nodes: list of indeces associated with a segment\n\nfinal_labels = zeros(1, length(node_idx));\n[~, final_labels(1,end)] = max(DP_table(:,end));\non_nodes = [];\nlsjoint = [];\nlslogz = [];\nlikelihoods = [];\nprev = 2; %control start and end line segments -- E.A.\nlogz_tmp = 0;\nctrl = 0; % used to control end of the line cases\nlsId = 1;\nfor i = length(node_idx)-1:-1:1\n   ind = final_labels(i+1);\n   final_labels(i) = aux_table(ind, i+1);\n   %sum the log of the partial evidences.\n   if ctrl == 1 && ind == 1 \n       logz_tmp = logz_tmp + log(z(i+1));\n%       lsgamma(:,lsId) = lsgamma(:,lsId) + gamma(:,i+1);\n       likelihoods(lsId) = likelihoods(lsId) + obsLike(1,i+1);\n       on_nodes = [on_nodes; node_idx(i+1)];\n   end\n   if ind == 1 && prev == 2 %begining of a segment\n       endProb = DP_table(ind,i+1);\n       logz_tmp = log(z(i+1));\n%       lsgamma(:,lsId) = gamma(:,i+1); \n       likelihoods(lsId) = obsLike(1,i+1);\n       on_nodes = [on_nodes; node_idx(i+1)];\n       ctrl = 1;\n   elseif ind == 2 && prev == 1\n       startProb = DP_table(ind, i+1);\n       lsjoint = [lsjoint; endProb - startProb];\n       lslogz = [lslogz; logz_tmp];\n       lsId = lsId + 1;\n       logz_tmp = 0;\n       ctrl = 0;\n   elseif ind == 1 && i == 1\n       lsjoint = [lsjoint; endProb];\n       lslogz = [lslogz; logz_tmp];\n\n   end\n   prev = ind;\n   %%\nend\n        \n%% E.A. Posterior prob.\nlsjoint = flipud(lsjoint); %E.A. To match the line segment output\nlslogz = flipud(lslogz); %E.A. To match the line segment output\n\nlikelihoods = fliplr(likelihoods);\n\nend\n\n"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/utils/getDebug.m",
    "content": "function r = getDebug\nglobal debug\nr = debug;"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/utils/getImg.m",
    "content": "function r = getImg\nglobal origImg\nr = origImg;"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/utils/getLegend.m",
    "content": "function r = getLegend\nglobal legendStr\nr = legendStr;"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/utils/setDebug.m",
    "content": "function setDebug(val)\nglobal debug\ndebug = val;"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/utils/setImg.m",
    "content": "function setImg(img)\nglobal origImg\norigImg = img;"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/code/utils/setLegend.m",
    "content": "function setLegend(val)\nglobal legendStr\nlegendStr = val;"
  },
  {
    "path": "thirdparty/MCMLSD/MCMLSD/demo_start_v2.m",
    "content": "clear\nclc\nclose all\n\naddpath(genpath('code/'));\naddpath('Imgs/');\nimg = imread(['Imgs', filesep, 'P1040823hr.jpg']);\nimg = imresize(img, [round(size(img,1)/4), round(size(img,2)/4)]);\n\n%compute the kernel for the image size\n%you only need to compute the kernal once for one an image size\n[kernels, kernels_flip, kernel_params] =kernelInitialization(img);\nticId = tic;\n%the lines variable contains the detected line segmentations it arranged as\n%[x1 y1 x2 y2 probability]\n%The fullLines are the detected lines. It is arranged as [rho theta probability]\n[lines, fullLines] =lineSegmentation_HighRes(img,kernels, kernels_flip, kernel_params);\ndisplay('Total time');\ntoc(ticId)\nfig = figure;\nimshow(img);\nhold all\n   %Order lines by probability\n   lines = sortrows(lines, -5);\n   ttlLines = size(lines,1);\n   for i = 1:90\n     %plot the top 90 lines\n     line([lines(i,1) lines(i,3)], [lines(i,2) lines(i,4)],'Color', rand(1,3), 'LineWidth', 3);\n   end\n\n%please use code in Evaluation code.zip to evaluate the performance of the line segmentation algorithm\n"
  }
]