abcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcababcab