#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
#!
GUI IGNORE SourceDataset_FFS_1,FFS_IN_PASSPHRASE_FFS_1,FFS_IN_SEARCH_ENVELOPE_MINX_FFS_1,FFS_IN_SEARCH_ENVELOPE_MINY_FFS_1,FFS_IN_SEARCH_ENVELOPE_MAXX_FFS_1,FFS_IN_SEARCH_ENVELOPE_MAXY_FFS_1,FFS_IN_CLIP_TO_ENVELOPE_FFS_1,_SEARCH_CLOSEST_POINT_FFS_1,SourceDataset_POSTGIS_1,POSTGIS_IN_HOST_POSTGIS_1,POSTGIS_IN_PORT_POSTGIS_1,POSTGIS_IN_USER_NAME_POSTGIS_1,POSTGIS_IN_PASSWORD_POSTGIS_1,POSTGIS_IN_SEARCH_ENVELOPE_MINX_POSTGIS_1,POSTGIS_IN_SEARCH_ENVELOPE_MINY_POSTGIS_1,POSTGIS_IN_SEARCH_ENVELOPE_MAXX_POSTGIS_1,POSTGIS_IN_SEARCH_ENVELOPE_MAXY_POSTGIS_1,POSTGIS_IN_CLIP_TO_ENVELOPE_POSTGIS_1,POSTGIS_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_POSTGIS_1,POSTGIS_IN_SEARCH_METHOD_POSTGIS_1,POSTGIS_IN_FEATURES_PER_FETCH_POSTGIS_1,POSTGIS_IN_SIMPLIFY_AGGREGATES_POSTGIS_1,DestDataset_TEXTLINE_1,TEXTLINE_OUT_OVERWRITE_FILE_TEXTLINE_1,TEXTLINE_OUT_ENCODING_TEXTLINE_1,TEXTLINE_OUT_END_OF_LINE_TEXTLINE_1
DEFAULT_MACRO bboxWest 18.5
GUI FLOAT bboxWest Bounding box - minimum X coordinate
DEFAULT_MACRO bboxSouth 59
GUI FLOAT bboxSouth Bounding box - minimum Y coordinate
DEFAULT_MACRO bboxEast 19
GUI FLOAT bboxEast Bounding box - maximum X coordinate
DEFAULT_MACRO bboxNorth 59.5
GUI FLOAT bboxNorth Bounding box - maximum Y coordinate
DEFAULT_MACRO destCoordSystem EPSG:4326
GUI COORDSYS destCoordSystem Query and Destination Coordinate System
DEFAULT_MACRO FEATURE_TYPES ProtectedSite
GUI LISTBOX_ENCODED FEATURE_TYPES ProtectedSite Feature types to read (layers)
DEFAULT_MACRO SourceDataset_POSTGIS postgis
GUI OPTIONAL TEXT SourceDataset_POSTGIS Source PostGIS Dataset:
DEFAULT_MACRO MAX_FEATURES 600
GUI OPTIONAL INTEGER MAX_FEATURES Max features to read:
INCLUDE [ if {{$(bboxWest)} == {}} { puts_real {Parameter 'bboxWest' must be given a value.}; exit 1; }; ]
INCLUDE [ if {{$(bboxSouth)} == {}} { puts_real {Parameter 'bboxSouth' must be given a value.}; exit 1; }; ]
INCLUDE [ if {{$(bboxEast)} == {}} { puts_real {Parameter 'bboxEast' must be given a value.}; exit 1; }; ]
INCLUDE [ if {{$(bboxNorth)} == {}} { puts_real {Parameter 'bboxNorth' must be given a value.}; exit 1; }; ]
INCLUDE [ if {{$(destCoordSystem)} == {}} { puts_real {Parameter 'destCoordSystem' must be given a value.}; exit 1; }; ]
INCLUDE [ if {{$(FEATURE_TYPES)} == {}} { puts_real {Parameter 'FEATURE_TYPES' must be given a value.}; exit 1; }; ]
#! START_HEADER
#! START_WB_HEADER
READER_TYPE MULTI_READER
MULTI_READER_TYPE{0} NULL
MULTI_READER_KEYWORD{0} FFS_1
MULTI_READER_GEN_DIRECTIVES{0} USE_SEARCH_ENVELOPE,NO,SEARCH_ENVELOPE_MINX,0,_MERGE_SCHEMAS,YES,SEARCH_ENVELOPE_MAXY,0,SEARCH_ENVELOPE_MAXX,0,PASSPHRASE,,CLIP_TO_ENVELOPE,NO,SEARCH_ENVELOPE_MINY,0,FFS_EXPOSE_FORMAT_ATTRS,
MULTI_READER_TYPE{1} POSTGIS
MULTI_READER_KEYWORD{1} POSTGIS_1
MULTI_READER_GEN_DIRECTIVES{1} USE_SEARCH_ENVELOPE,NO,_MERGE_SCHEMAS,YES,SEARCH_ENVELOPE_MAXY,0,SEARCH_ENVELOPE_MAXX,0,PORT,5432,HOST,localhost,USER_NAME,postgres,PASSWORD,kiruna13,SEARCH_ENVELOPE_MINX,0,TABLELIST,public.ProtectedSite,CLIP_TO_ENVELOPE,NO,SEARCH_ENVELOPE_MINY,0,POSTGIS_EXPOSE_FORMAT_ATTRS,
WRITER_TYPE TEXTLINE
WRITER_KEYWORD TEXTLINE_1
#! END_WB_HEADER
#! START_WB_HEADER
MACRO WB_KEYWORD "FFS_1"
#! END_WB_HEADER
#! START_SOURCE_HEADER FFS FFS_1
# ============================================================================
# The following GUI line prompts for the Feature Store file to be read
# The dataset this mapping file was generated from was:
#! END_SOURCE_HEADER
#! START_WB_HEADER
DEFAULT_MACRO SourceDataset
INCLUDE [ if {{$(SourceDataset)} != ""} { \
puts {DEFAULT_MACRO SourceDataset_FFS_1 $(SourceDataset)} \
} ]
#! END_WB_HEADER
#! START_SOURCE_HEADER FFS FFS_1
DEFAULT_MACRO SourceDataset_FFS_1 C:\Projects\Inspire\ProtectedAreas\Workspaces\Dean_v6.2\DB\InspireProtectedSitesDB.ffs
GUI MULTIFILE SourceDataset_FFS_1 FME_Feature_Store_Files(*.ffs)|*.ffs|All_Files|*.* Source FME Feature Store (FFS) File(s):
# ============================================================================
# Set the passphrase (which is optional)
DEFAULT_MACRO FFS_IN_PASSPHRASE_FFS_1
FFS_1_PASSPHRASE "$(FFS_IN_PASSPHRASE_FFS_1)"
GUI OPTIONAL PASSWORD FFS_IN_PASSPHRASE_FFS_1 Password (optional):
# Include this file in source setting section to add native search envelope processing
# Zero as a default means we don't do any search -- this makes workbench happier
# ===========================================================================
DEFAULT_MACRO FFS_IN_SEARCH_ENVELOPE_MINX_FFS_1 $(bboxWest)
FFS_1_SEARCH_ENVELOPE "$(FFS_IN_SEARCH_ENVELOPE_MINX_FFS_1)"
GUI OPTIONAL FLOAT FFS_IN_SEARCH_ENVELOPE_MINX_FFS_1 Minimum X:
# ===========================================================================
DEFAULT_MACRO FFS_IN_SEARCH_ENVELOPE_MINY_FFS_1 $(bboxSouth)
FFS_1_SEARCH_ENVELOPE "$(FFS_IN_SEARCH_ENVELOPE_MINY_FFS_1)"
GUI OPTIONAL FLOAT FFS_IN_SEARCH_ENVELOPE_MINY_FFS_1 Minimum Y:
# ===========================================================================
DEFAULT_MACRO FFS_IN_SEARCH_ENVELOPE_MAXX_FFS_1 $(bboxEast)
FFS_1_SEARCH_ENVELOPE "$(FFS_IN_SEARCH_ENVELOPE_MAXX_FFS_1)"
GUI OPTIONAL FLOAT FFS_IN_SEARCH_ENVELOPE_MAXX_FFS_1 Maximum X:
# ===========================================================================
DEFAULT_MACRO FFS_IN_SEARCH_ENVELOPE_MAXY_FFS_1 $(bboxNorth)
FFS_1_SEARCH_ENVELOPE "$(FFS_IN_SEARCH_ENVELOPE_MAXY_FFS_1)"
GUI OPTIONAL FLOAT FFS_IN_SEARCH_ENVELOPE_MAXY_FFS_1 Maximum Y:
# ===========================================================================
DEFAULT_MACRO FFS_IN_CLIP_TO_ENVELOPE_FFS_1 YES
FFS_1_CLIP_TO_ENVELOPE "$(FFS_IN_CLIP_TO_ENVELOPE_FFS_1)"
GUI OPTIONAL CHECKBOX FFS_IN_CLIP_TO_ENVELOPE_FFS_1 YES%NO Clip to Search Envelope
# By default, strip FME meta-attributes (likemulti_reader_keyword) from
# the features the FFS reader creates.
FFS_1_STRIP_META_ATTRS YES
# By default, ignore spillover files (*_1.ffs,*_2.ffs,etc).
# When enabled, these files will be ignored by the reader, and only read when
# *.ffs itself is read.
FFS_1_ENFORCE_SECONDARY_FILE_NAMES YES
# ========================================================================
# If desired, the below string can specify a point, and the closest feature
# in the FFS file will be read and returned.
DEFAULT_MACRO _SEARCH_CLOSEST_POINT_FFS_1
GUI OPTIONAL TEXT _SEARCH_CLOSEST_POINT_FFS_1 Closest Search Point:
FFS_1_SEARCH_CLOSEST_POINT $(_SEARCH_CLOSEST_POINT_FFS_1)
FFS_1_DATASET "$(SourceDataset_FFS_1)"
#! END_SOURCE_HEADER
#! START_WB_HEADER
MACRO WB_KEYWORD "POSTGIS_1"
#! END_WB_HEADER
#! START_SOURCE_HEADER POSTGIS POSTGIS_1
# The dataset this mapping file was generated from was:
#! END_SOURCE_HEADER
#! START_WB_HEADER
DEFAULT_MACRO SourceDataset
INCLUDE [ if {{$(SourceDataset)} != ""} { \
puts {DEFAULT_MACRO SourceDataset_POSTGIS_1 $(SourceDataset)} \
} ]
#! END_WB_HEADER
#! START_SOURCE_HEADER POSTGIS POSTGIS_1
DEFAULT_MACRO SourceDataset_POSTGIS_1 $(SourceDataset_POSTGIS)
GUI OPTIONAL TEXT SourceDataset_POSTGIS_1 Source PostGIS Dataset:
DEFAULT_MACRO POSTGIS_IN_HOST_POSTGIS_1 localhost
POSTGIS_1_HOST "$(POSTGIS_IN_HOST_POSTGIS_1)"
GUI TEXT POSTGIS_IN_HOST_POSTGIS_1 Host:
DEFAULT_MACRO POSTGIS_IN_PORT_POSTGIS_1 5432
POSTGIS_1_PORT "$(POSTGIS_IN_PORT_POSTGIS_1)"
GUI INTEGER POSTGIS_IN_PORT_POSTGIS_1 Port:
DEFAULT_MACRO POSTGIS_IN_USER_NAME_POSTGIS_1 postgres
POSTGIS_1_USER_NAME "$(POSTGIS_IN_USER_NAME_POSTGIS_1)"
GUI TEXT POSTGIS_IN_USER_NAME_POSTGIS_1 Username:
DEFAULT_MACRO POSTGIS_IN_PASSWORD_POSTGIS_1 postgres
POSTGIS_1_PASSWORD "$(POSTGIS_IN_PASSWORD_POSTGIS_1)"
GUI OPTIONAL PASSWORD POSTGIS_IN_PASSWORD_POSTGIS_1 Password:
# Include this file in source setting section to add native search envelope processing
# Zero as a default means we don't do any search -- this makes workbench happier
# ===========================================================================
DEFAULT_MACRO POSTGIS_IN_SEARCH_ENVELOPE_MINX_POSTGIS_1 $(bboxWest)
POSTGIS_1_SEARCH_ENVELOPE "$(POSTGIS_IN_SEARCH_ENVELOPE_MINX_POSTGIS_1)"
GUI OPTIONAL FLOAT POSTGIS_IN_SEARCH_ENVELOPE_MINX_POSTGIS_1 Minimum X:
# ===========================================================================
DEFAULT_MACRO POSTGIS_IN_SEARCH_ENVELOPE_MINY_POSTGIS_1 $(bboxSouth)
POSTGIS_1_SEARCH_ENVELOPE "$(POSTGIS_IN_SEARCH_ENVELOPE_MINY_POSTGIS_1)"
GUI OPTIONAL FLOAT POSTGIS_IN_SEARCH_ENVELOPE_MINY_POSTGIS_1 Minimum Y:
# ===========================================================================
DEFAULT_MACRO POSTGIS_IN_SEARCH_ENVELOPE_MAXX_POSTGIS_1 $(bboxEast)
POSTGIS_1_SEARCH_ENVELOPE "$(POSTGIS_IN_SEARCH_ENVELOPE_MAXX_POSTGIS_1)"
GUI OPTIONAL FLOAT POSTGIS_IN_SEARCH_ENVELOPE_MAXX_POSTGIS_1 Maximum X:
# ===========================================================================
DEFAULT_MACRO POSTGIS_IN_SEARCH_ENVELOPE_MAXY_POSTGIS_1 $(bboxNorth)
POSTGIS_1_SEARCH_ENVELOPE "$(POSTGIS_IN_SEARCH_ENVELOPE_MAXY_POSTGIS_1)"
GUI OPTIONAL FLOAT POSTGIS_IN_SEARCH_ENVELOPE_MAXY_POSTGIS_1 Maximum Y:
# ===========================================================================
DEFAULT_MACRO POSTGIS_IN_CLIP_TO_ENVELOPE_POSTGIS_1 NO
POSTGIS_1_CLIP_TO_ENVELOPE "$(POSTGIS_IN_CLIP_TO_ENVELOPE_POSTGIS_1)"
GUI OPTIONAL CHECKBOX POSTGIS_IN_CLIP_TO_ENVELOPE_POSTGIS_1 YES%NO Clip to Search Envelope
# ============================================================================
# Search Envelope Coordinate System
DEFAULT_MACRO POSTGIS_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_POSTGIS_1
GUI OPTIONAL COORDSYS POSTGIS_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_POSTGIS_1 Search Envelope Coordinate System:
POSTGIS_1_SEARCH_ENVELOPE_COORDINATE_SYSTEM "$(POSTGIS_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_POSTGIS_1)"
DEFAULT_MACRO POSTGIS_IN_SEARCH_METHOD_POSTGIS_1 MBR_OVERLAPS
GUI CHOICE POSTGIS_IN_SEARCH_METHOD_POSTGIS_1 MBR_OVERLAPS%CONTAINS%DISJOINT%EQUALS%INTERSECTS%OVERLAPS%TOUCHES%WITHIN Search Method:
POSTGIS_1_SEARCH_METHOD $(POSTGIS_IN_SEARCH_METHOD_POSTGIS_1)
DEFAULT_MACRO POSTGIS_IN_FEATURES_PER_FETCH_POSTGIS_1 10000
GUI FLOAT POSTGIS_IN_FEATURES_PER_FETCH_POSTGIS_1 Number Of Records To Fetch At A Time:
POSTGIS_1_FEATURES_PER_FETCH $(POSTGIS_IN_FEATURES_PER_FETCH_POSTGIS_1)
DEFAULT_MACRO POSTGIS_IN_SIMPLIFY_AGGREGATES_POSTGIS_1 YES
GUI CHOICE POSTGIS_IN_SIMPLIFY_AGGREGATES_POSTGIS_1 YES%NO Simplify Aggregate Geometries:
POSTGIS_1_SIMPLIFY_AGGREGATES $(POSTGIS_IN_SIMPLIFY_AGGREGATES_POSTGIS_1)
POSTGIS_1_DATASET "$(SourceDataset_POSTGIS_1)"
#! END_SOURCE_HEADER
#! START_WB_HEADER
MACRO WB_KEYWORD "TEXTLINE_1"
#! END_WB_HEADER
#! START_DEST_HEADER TEXTLINE TEXTLINE_1
# =====================================================================
# The following GUI line prompts for a directory to be used as the
# the destination for the TextLine files. The user input is stored in
# a macro, which is then used to define the dataset to be written.
#! END_DEST_HEADER
#! START_WB_HEADER
DEFAULT_MACRO DestDataset
INCLUDE [ if {"$(DestDataset)" != ""} { \
puts {DEFAULT_MACRO DestDataset_TEXTLINE_1 $(DestDataset)} \
} ]
#! END_WB_HEADER
#! START_DEST_HEADER TEXTLINE TEXTLINE_1
DEFAULT_MACRO DestDataset_TEXTLINE_1 protectedAreasExport.gml
GUI FILENAME DestDataset_TEXTLINE_1 Text/Compressed_Text_Files(*.txt;*.txt.gz)|*.txt;*.txt.gz|Text_Files(*.txt)|*.txt|Compressed_Text_Files(*.txt.gz)|*.txt.gz|All_files(*.*)|*.* Destination Text File File:
# =====================================================================
# The following GUI line prompts for the overwrite flag. The default is
# YES. Possible values are YES or NO. Any value other than NO or
# no is interpreted as YES.
DEFAULT_MACRO TEXTLINE_OUT_OVERWRITE_FILE_TEXTLINE_1 YES
TEXTLINE_1_OVERWRITE_FILE "$(TEXTLINE_OUT_OVERWRITE_FILE_TEXTLINE_1)"
GUI CHOICE TEXTLINE_OUT_OVERWRITE_FILE_TEXTLINE_1 YES%NO Overwrite Existing File:
# =====================================================================
# Set the type of encoding for the output file
DEFAULT_MACRO TEXTLINE_OUT_ENCODING_TEXTLINE_1 UTF-16BE
TEXTLINE_1_ENCODING "$(TEXTLINE_OUT_ENCODING_TEXTLINE_1)"
GUI OPTIONAL STRING_OR_CHOICE TEXTLINE_OUT_ENCODING_TEXTLINE_1 UTF-8%UTF-16LE%UTF-16BE%ANSI%BIG5%SJIS%CP437%CP708%CP720%CP737%CP775%CP850%CP852%CP855%CP857%CP860%CP861%CP862%CP863%CP864%CP865%CP866%CP869%CP932%CP936%CP950%CP1250%CP1251%CP1252%CP1253%CP1254%CP1255%CP1256%CP1257%CP1258%ISO8859-1%ISO8859-2%ISO8859-3%ISO8859-4%ISO8859-5%ISO8859-6%ISO8859-7%ISO8859-8%ISO8859-9%ISO8859-13%ISO8859-15 Character Encoding (optional):
# =====================================================================
# Set line termination character
DEFAULT_MACRO TEXTLINE_OUT_END_OF_LINE_TEXTLINE_1
TEXTLINE_1_END_OF_LINE "$(TEXTLINE_OUT_END_OF_LINE_TEXTLINE_1)"
GUI OPTIONAL CHOICE TEXTLINE_OUT_END_OF_LINE_TEXTLINE_1 Windows%Unix%Macintosh Line Termination:
# =====================================================================
# Set the mime type. Note -- it is actually only used inside of workspaces
# as a FORMAT_PARAMETER which even then is parsed only by the FME Server
# Repository Manager
DEFAULT_MACRO TEXTLINE_OUT_MIME_TYPE_TEXTLINE_1 text/plain
TEXTLINE_1_MIME_TYPE "$(TEXTLINE_OUT_MIME_TYPE_TEXTLINE_1)"
TEXTLINE_1_DATASET "$(DestDataset_TEXTLINE_1)"
#! END_DEST_HEADER
#! END_HEADER
LOG_FILENAME "$(FME_MF_DIR)InspirePAexporter_OgcWfs.log"
LOG_APPEND NO
LOG_MAX_FEATURES 200
LOG_MAX_RECORDED_FEATURES 200
FME_REPROJECTION_ENGINE FME
FME_GEOMETRY_HANDLING Classic
FME_STROKE_MAX_DEVIATION 0
MAPPING_FILE_ID OGCWFSService
LOG_TIMINGS YES
LOG_FILTER_MASK -1
DEFAULT_MACRO DATASET_KEYWORD_FFS_1 FFS_1
DEFAULT_MACRO DATASET_KEYWORD_POSTGIS_1 POSTGIS_1
DEFAULT_MACRO DATASET_KEYWORD_TEXTLINE_1 TEXTLINE_1
# -------------------------------------------------------------------------
FFS_1_READER_META_ATTRIBUTES fme_feature_type
# -------------------------------------------------------------------------
POSTGIS_1_READER_META_ATTRIBUTES fme_feature_type
# -------------------------------------------------------------------------
FFS_1_FEATURE_TYPES $(FEATURE_TYPES)
POSTGIS_1_MAX_FEATURES $(MAX_FEATURES)
POSTGIS_1_FEATURE_TYPES $(FEATURE_TYPES)
MULTI_READER_CONTINUE_ON_READER_FAILURE Yes
# -------------------------------------------------------------------------
MACRO WORKSPACE_NAME InspirePAexporter_OgcWfs
MACRO FME_VIEWER_APP fmeview
# -------------------------------------------------------------------------
POSTGIS_1_DEF ProtectedSite postgis_type "postgis_none postgis_point postgis_line postgis_area postgis_curve postgis_curvepolygon postgis_compoundcurve" postgis_sql_where_clause "" postgis_sql_statement "" inspire_applicationschema varchar(32) inspire_localid varchar(32) inspire_namespace varchar(32) inspire_legalfoundationdate varchar(32) inspire_title varchar(32) inspire_date varchar(32) inspire_datetype varchar(32) inspire_designation varchar(32) inspire_designationscheme varchar(32) inspire_percentageunderdesignation varchar(32) inspire_sitename varchar(240) inspire_language varchar(32) inspire_nativeness varchar(32) inspire_namestatus varchar(32) inspire_sourceofname varchar(32) inspire_pronunciationofname varchar(32) inspire_protectionclassification varchar(32) inspire_siteidentifier varchar(32) inspire_siteidentifierscheme varchar(32) inspire_denominator varchar(32) inspire_qualityandimportance varchar(255) inspire_vulnerability varchar(255) inspire_ownership varchar(255) inspire_documentation varchar(255) inspire_fundingtype varchar(32) inspire_projectname varchar(64) inspire_datasource varchar(240) inspire_role varchar(32) inspire_organisationname varchar(250) inspire_contactinfo varchar(250) inspire_electronicmailadress varchar(64) inspire_officialsitearea varchar(32) inspire_sitelength varchar(32) inspire_title_2 varchar(64) inspire_date_2 varchar(32) inspire_isexecutedby varchar(255) inspire_endlifespanversion varchar(32) inspire_responsibleagencyname varchar(240) inspire_beginlifespanversion_2 varchar(32) inspire_endlifespanversion_2 varchar(32) inspire_localid_3 varchar(32) inspire_habitattype varchar(32) inspire_habitatclass varchar(32) inspire_representativity varchar(32) inspire_conservationstatus varchar(32) inspire_conservationstatus_2 varchar(32) inspire_beginlifespanversion_3 varchar(32) inspire_endlifespanversion_3 varchar(32) inspire_localid_4 varchar(32) inspire_regionclassification varchar(32) inspire_sitedescription varchar(255) inspire_legalexpirydate varchar(32) inspire_objectidentifier varchar(64) inspire_beginlifespanversion varchar(32) _geometry varchar(22000) inspire_gml_id_1 varchar(64) inspire_gml_id_2 varchar(64) inspire_gml_id_3 varchar(64) list_inspire_activity_line varchar(7500) list_inspire_globalassessment_line varchar(14000) list_inspire_percentageunderhabitat_line varchar(2500)
# -------------------------------------------------------------------------
Lookup ___KnownFeatureTypes___ "$(DATASET_KEYWORD_FFS_1)_ProtectedSite" yes "$(DATASET_KEYWORD_POSTGIS_1)_ProtectedSite" yes "" no
# -------------------------------------------------------------------------
FACTORY_DEF * TestFactory FACTORY_NAME "Unexpected Input Remover" INPUT FEATURE_TYPE * TEST @Lookup(___KnownFeatureTypes___,@Concatenate(&multi_reader_keyword,"_",@FeatureType())) == yes OUTPUT PASSED FEATURE_TYPE *
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME "Source -> Generic" INPUT FEATURE_TYPE * OUTPUT FEATURE_TYPE * @Transform(&multi_reader_type,FME_GENERIC,PRESERVE_GEOMETRY)
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME "ProtectedSite (POSTGIS_1) Splitter" INPUT FEATURE_TYPE ProtectedSite multi_reader_keyword $(DATASET_KEYWORD_POSTGIS_1) OUTPUT FEATURE_TYPE ProtectedSite_POSTGIS_1
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME "ProtectedSite (FFS_1) Splitter" INPUT FEATURE_TYPE ProtectedSite multi_reader_keyword $(DATASET_KEYWORD_FFS_1) OUTPUT FEATURE_TYPE ProtectedSite_FFS_1
DEFAULT_MACRO WB_CURRENT_CONTEXT
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME "AttributesToUpper_ProtectedSite Input Input Collector" INPUT FEATURE_TYPE ProtectedSite_POSTGIS_1 OUTPUT FEATURE_TYPE AttributesToUpper_ProtectedSite_Input
MACRO AttributesToUpper_WORKSPACE_NAME AttributesToUpper_ProtectedSite
MACRO $(AttributesToUpper_WORKSPACE_NAME)_XFORMER_NAME AttributesToUpper_ProtectedSite
MACRO $(AttributesToUpper_WORKSPACE_NAME)_SUB_DOC_NAME AttributesToUpper
DEFAULT_MACRO AttributesToUpper_WORKSPACE_NAME ""
INCLUDE [puts {MACRO WB_OLD_CONTEXT_$(AttributesToUpper_WORKSPACE_NAME) $(WB_CURRENT_CONTEXT)}; puts {MACRO WB_CURRENT_CONTEXT $(AttributesToUpper_WORKSPACE_NAME)}]
FACTORY_DEF * TeeFactory FACTORY_NAME "$(AttributesToUpper_WORKSPACE_NAME)_Input Input Splitter" INPUT FEATURE_TYPE "$(AttributesToUpper_WORKSPACE_NAME)_Input" OUTPUT FEATURE_TYPE "$(AttributesToUpper_WORKSPACE_NAME)_Input"
# -------------------------------------------------------------------------
Tcl2 FME_Decode procattrToUpperforeachattrFME_AttributeNamesFME_CopyAttributestringtoupperattrattr
FACTORY_DEF * TeeFactory FACTORY_NAME $(AttributesToUpper_WORKSPACE_NAME)_TCL_IDsToUpper_2 INPUT FEATURE_TYPE "$(AttributesToUpper_WORKSPACE_NAME)_Input" OUTPUT FEATURE_TYPE "$(AttributesToUpper_WORKSPACE_NAME)_TCL_IDsToUpper_2_OUTPUT" _result @Tcl2("attrToUpper")
# -------------------------------------------------------------------------
# Expose all attributes. This ensures that if you expose fme_dataset, you will get it.
READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename
FACTORY_DEF * TeeFactory FACTORY_NAME $(AttributesToUpper_WORKSPACE_NAME)_AttributeExposer INPUT FEATURE_TYPE "$(AttributesToUpper_WORKSPACE_NAME)_TCL_IDsToUpper_2_OUTPUT" OUTPUT FEATURE_TYPE "$(AttributesToUpper_WORKSPACE_NAME)_AttributeExposer_OUTPUT"
FACTORY_DEF * TeeFactory FACTORY_NAME "$(AttributesToUpper_WORKSPACE_NAME)_Output Output Collector" INPUT FEATURE_TYPE "$(AttributesToUpper_WORKSPACE_NAME)_AttributeExposer_OUTPUT" OUTPUT FEATURE_TYPE "$(AttributesToUpper_WORKSPACE_NAME)_Output"
INCLUDE [puts {MACRO WB_CURRENT_CONTEXT $(WB_OLD_CONTEXT_$(AttributesToUpper_WORKSPACE_NAME))}]
FACTORY_DEF * TeeFactory FACTORY_NAME "AttributesToUpper_ProtectedSite Output Output Renamer/Nuker" INPUT FEATURE_TYPE AttributesToUpper_ProtectedSite_Output OUTPUT FEATURE_TYPE AttributesToUpper_ProtectedSite_Output
# -------------------------------------------------------------------------
Tcl2 proc AttributeTrimmer_trimmer {} { set attrs [split {list_inspire_activity_line,list_inspire_globalassessment_line,list_inspire_percentageunderhabitat_line} {,}]; set trimChars [FME_DecodeTextOrAttr {}]; foreach attr $attrs { set attrVal [FME_GetAttribute $attr]; set length [string length $attrVal]; if {$length > 0} { if {[string length $trimChars] == 0} { set result [string trim $attrVal]; } else { set result [string trim $attrVal $trimChars]; }; if {[string length $result] == 0 && {Yes} == {No}} { if { {trim} == {trimleft}} { set lastPos [expr $length - 1]; set result [string range $attrVal $lastPos $lastPos ]; } elseif { {trim} == {trimright}} { set result [string range $attrVal 0 0]; } else { set midPos [expr $length / 2]; set result [string range $attrVal $midPos $midPos]; }; }; FME_SetAttribute $attr $result; }; }; }
FACTORY_DEF * TeeFactory FACTORY_NAME AttributeTrimmer INPUT FEATURE_TYPE AttributesToUpper_ProtectedSite_Output OUTPUT FEATURE_TYPE AttributeTrimmer_OUTPUT @Tcl2(AttributeTrimmer_trimmer)
# -------------------------------------------------------------------------
# Wipe out the source setting if it was untouched from the default setting
DEFAULT_MACRO Reprojector_SOURCE Read from feature
INCLUDE [if { {Read from feature} == {Read from feature} } { puts {MACRO Reprojector_SOURCE} } ]
FACTORY_DEF * TeeFactory FACTORY_NAME Reprojector INPUT FEATURE_TYPE AttributeTrimmer_OUTPUT INPUT FEATURE_TYPE ProtectedSite_FFS_1 OUTPUT FEATURE_TYPE Reprojector_REPROJECTED @Reproject($(Reprojector_SOURCE),$(destCoordSystem),NearestNeighbor,PreserveCells)
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME "HardClipper CLIPPEE Input Collector" INPUT FEATURE_TYPE Reprojector_REPROJECTED OUTPUT FEATURE_TYPE HardClipper_CLIPPEE
MACRO HardClipper_WORKSPACE_NAME HardClipper
MACRO $(HardClipper_WORKSPACE_NAME)_XFORMER_NAME HardClipper
MACRO $(HardClipper_WORKSPACE_NAME)_MINX $(bboxWest)
MACRO $(HardClipper_WORKSPACE_NAME)_MINY $(bboxSouth)
MACRO $(HardClipper_WORKSPACE_NAME)_MAXX $(bboxEast)
MACRO $(HardClipper_WORKSPACE_NAME)_MAXY $(bboxNorth)
MACRO $(HardClipper_WORKSPACE_NAME)_BBOX_COORDSYS $(destCoordSystem)
MACRO $(HardClipper_WORKSPACE_NAME)_COORDSYS EPSG:4326
MACRO $(HardClipper_WORKSPACE_NAME)_SUB_DOC_NAME HardClipper
DEFAULT_MACRO HardClipper_WORKSPACE_NAME ""
INCLUDE [puts {MACRO WB_OLD_CONTEXT_$(HardClipper_WORKSPACE_NAME) $(WB_CURRENT_CONTEXT)}; puts {MACRO WB_CURRENT_CONTEXT $(HardClipper_WORKSPACE_NAME)}]
FACTORY_DEF * TeeFactory FACTORY_NAME "$(HardClipper_WORKSPACE_NAME)_CLIPPEE Input Splitter" INPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_CLIPPEE" OUTPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_CLIPPEE"
# -------------------------------------------------------------------------
Tcl2 proc $(HardClipper_WORKSPACE_NAME)_Creator_CoordSysRemover {} { global FME_CoordSys; set FME_CoordSys {}; }
MACRO $(HardClipper_WORKSPACE_NAME)_Creator_XML NOT_ACTIVATED
MACRO $(HardClipper_WORKSPACE_NAME)_Creator_CLASSIC NOT_ACTIVATED
MACRO $(HardClipper_WORKSPACE_NAME)_Creator_2D3D 2D_GEOMETRY
MACRO $(HardClipper_WORKSPACE_NAME)_Creator_COORDS
INCLUDE [ if { {XML Geometry} == {XML Geometry} } { puts {MACRO $(HardClipper_WORKSPACE_NAME)_Creator_XML *} } ]
INCLUDE [ if { {XML Geometry} == {2D Coordinate List} } { puts {MACRO $(HardClipper_WORKSPACE_NAME)_Creator_2D3D 2D_GEOMETRY}; puts {MACRO $(HardClipper_WORKSPACE_NAME)_Creator_CLASSIC *} } ]
INCLUDE [ if { {XML Geometry} == {3D Coordinate List} } { puts {MACRO $(HardClipper_WORKSPACE_NAME)_Creator_2D3D 3D_GEOMETRY}; puts {MACRO $(HardClipper_WORKSPACE_NAME)_Creator_CLASSIC *} } ]
INCLUDE [ if { {XML Geometry} == {2D Min/Max Box} } { set comment { We need to turn the COORDS which are minX minY maxX maxY into a full polygon list of coordinates }; set splitCoords [split [string trim {}]]; if { [llength $splitCoords] != 4 } { error {$(HardClipper_WORKSPACE_NAME)_Creator: Coordinate List MUST have four numbers - `' is invalid}; }; set minX [lindex $splitCoords 0]; set minY [lindex $splitCoords 1]; set maxX [lindex $splitCoords 2]; set maxY [lindex $splitCoords 3]; puts "MACRO $(HardClipper_WORKSPACE_NAME)_Creator_COORDS $minX $minY $minX $maxY $maxX $maxY $maxX $minY $minX $minY"; puts {MACRO $(HardClipper_WORKSPACE_NAME)_Creator_2D3D 2D_GEOMETRY}; puts {MACRO $(HardClipper_WORKSPACE_NAME)_Creator_CLASSIC *} } ]
FACTORY_DEF $($(HardClipper_WORKSPACE_NAME)_Creator_XML) CreationFactory FACTORY_NAME $(HardClipper_WORKSPACE_NAME)_Creator_XML_Creator CREATE_AT_END no OUTPUT FEATURE_TYPE _____CREATED______ @Geometry(FROM_ENCODED_STRING,?xmlversion=1.0encoding=US_ASCIIstandalone=no?geometryboxminCoordx=1y=1z=0maxCoordx=2y=2z=0boxgeometry)
FACTORY_DEF $($(HardClipper_WORKSPACE_NAME)_Creator_CLASSIC) CreationFactory FACTORY_NAME $(HardClipper_WORKSPACE_NAME)_Creator_CLASSIC_Creator $($(HardClipper_WORKSPACE_NAME)_Creator_2D3D) $($(HardClipper_WORKSPACE_NAME)_Creator_COORDS) CREATE_AT_END no OUTPUT FEATURE_TYPE _____CREATED______
FACTORY_DEF * TeeFactory FACTORY_NAME $(HardClipper_WORKSPACE_NAME)_Creator_Cloner INPUT FEATURE_TYPE _____CREATED______ NUMBER_OF_COPIES 1 COPY_NUMBER_ATTRIBUTE _creation_instance OUTPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_Creator_CREATED" @Tcl2($(HardClipper_WORKSPACE_NAME)_Creator_CoordSysRemover) @CoordSys($($(HardClipper_WORKSPACE_NAME)_BBOX_COORDSYS))
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME $(HardClipper_WORKSPACE_NAME)_2DBoxReplacer INPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_Creator_CREATED" OUTPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_2DBoxReplacer_BOX" @Dimension(2) @XValue("$($(HardClipper_WORKSPACE_NAME)_MINX)",RESET) @YValue("$($(HardClipper_WORKSPACE_NAME)_MINY)") @XValue("$($(HardClipper_WORKSPACE_NAME)_MINX)") @YValue("$($(HardClipper_WORKSPACE_NAME)_MAXY)") @XValue("$($(HardClipper_WORKSPACE_NAME)_MAXX)") @YValue("$($(HardClipper_WORKSPACE_NAME)_MAXY)") @XValue("$($(HardClipper_WORKSPACE_NAME)_MAXX)") @YValue("$($(HardClipper_WORKSPACE_NAME)_MINY)") @XValue("$($(HardClipper_WORKSPACE_NAME)_MINX)") @YValue("$($(HardClipper_WORKSPACE_NAME)_MINY)") @GeometryType(fme_polygon)
FACTORY_DEF * TeeFactory FACTORY_NAME "$(HardClipper_WORKSPACE_NAME)_2DBoxReplacer BOX Splitter" INPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_2DBoxReplacer_BOX" OUTPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_2DBoxReplacer_BOX_0" OUTPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_2DBoxReplacer_BOX_1"
# -------------------------------------------------------------------------
# Wipe out the source setting if it was untouched from the default setting
DEFAULT_MACRO $(HardClipper_WORKSPACE_NAME)_reprojectBbox_SOURCE Read from feature
INCLUDE [if { {Read from feature} == {Read from feature} } { puts {MACRO $(HardClipper_WORKSPACE_NAME)_reprojectBbox_SOURCE} } ]
FACTORY_DEF * TeeFactory FACTORY_NAME $(HardClipper_WORKSPACE_NAME)_reprojectBbox INPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_2DBoxReplacer_BOX_0" OUTPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_reprojectBbox_REPROJECTED" @Reproject($($(HardClipper_WORKSPACE_NAME)_reprojectBbox_SOURCE),$($(HardClipper_WORKSPACE_NAME)_COORDSYS),NearestNeighbor,PreserveCells)
FACTORY_DEF * TeeFactory FACTORY_NAME "$(HardClipper_WORKSPACE_NAME)_reprojectBbox REPROJECTED Splitter" INPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_reprojectBbox_REPROJECTED" OUTPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_reprojectBbox_REPROJECTED_0" OUTPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_reprojectBbox_REPROJECTED_1"
# -------------------------------------------------------------------------
FACTORY_DEF * ClippingFactory FACTORY_NAME $(HardClipper_WORKSPACE_NAME)_Clipper INPUT CLIPPER FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_reprojectBbox_REPROJECTED_0" INPUT CLIPPEE FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_CLIPPEE" MULTICLIP CLIPPERS_FIRST CLIPPEE_ON_BOUNDARY INSIDE MERGE_CLIPPER_ATTRIBUTES No DO_NOT_AGGREGATE NO CLIPPER_ATTR_PREFIX "clipper_" OUTPUT INSIDE FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_Clipper_INSIDE" OUTPUT CLIPPED_INSIDE FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_Clipper_CLIPPED_INSIDE" OUTPUT EXTRA_CLIPPER FEATURE_TYPE $(HardClipper_WORKSPACE_NAME)_Clipper__delete__ @Tcl2("FME_LogMessage fme_warn 917351 $(HardClipper_WORKSPACE_NAME)_Clipper") OUTPUT NONPOLY_CLIPPER FEATURE_TYPE $(HardClipper_WORKSPACE_NAME)_Clipper__delete__ @Tcl2("FME_LogMessage fme_warn 917352 $(HardClipper_WORKSPACE_NAME)_Clipper")
FACTORY_DEF * TeeFactory FACTORY_NAME $(HardClipper_WORKSPACE_NAME)_Clipper_Nuker INPUT FEATURE_TYPE $(HardClipper_WORKSPACE_NAME)_Clipper__delete__ @Log("Offending feature was:")
FACTORY_DEF * TeeFactory FACTORY_NAME "$(HardClipper_WORKSPACE_NAME)_ORIGINAL_BBOX Output Collector" INPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_2DBoxReplacer_BOX_1" OUTPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_ORIGINAL_BBOX"
FACTORY_DEF * TeeFactory FACTORY_NAME "$(HardClipper_WORKSPACE_NAME)_CLIPPER_BBOX Output Collector" INPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_reprojectBbox_REPROJECTED_1" OUTPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_CLIPPER_BBOX"
FACTORY_DEF * TeeFactory FACTORY_NAME "$(HardClipper_WORKSPACE_NAME)_CLIPPED Output Collector" INPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_Clipper_INSIDE" INPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_Clipper_CLIPPED_INSIDE" OUTPUT FEATURE_TYPE "$(HardClipper_WORKSPACE_NAME)_CLIPPED"
INCLUDE [puts {MACRO WB_CURRENT_CONTEXT $(WB_OLD_CONTEXT_$(HardClipper_WORKSPACE_NAME))}]
FACTORY_DEF * TeeFactory FACTORY_NAME "HardClipper ORIGINAL_BBOX Output Renamer/Nuker" INPUT FEATURE_TYPE HardClipper_ORIGINAL_BBOX
FACTORY_DEF * TeeFactory FACTORY_NAME "HardClipper CLIPPER_BBOX Output Renamer/Nuker" INPUT FEATURE_TYPE HardClipper_CLIPPER_BBOX
FACTORY_DEF * TeeFactory FACTORY_NAME "HardClipper CLIPPED Output Renamer/Nuker" INPUT FEATURE_TYPE HardClipper_CLIPPED OUTPUT FEATURE_TYPE HardClipper_CLIPPED
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME DuplicateRemover_Match_Value_Extractor INPUT FEATURE_TYPE HardClipper_CLIPPED OUTPUT FEATURE_TYPE ___TODUPTEST___ __DUPTOCHECK__ @Concatenate(___DuplicateRemover_,fme_attribute_name,"INSPIRE_GML_ID_1")
FACTORY_DEF * TestFactory FACTORY_NAME DuplicateRemover INPUT FEATURE_TYPE ___TODUPTEST___ TEST @Count(fme_attribute_name,__DUPTOCHECK__) > 0 OUTPUT FAILED FEATURE_TYPE DuplicateRemover_UNIQUE @Count(fme_attribute_name,__DUPTOCHECK__) @RemoveAttributes(__DUPTOCHECK__)
# -------------------------------------------------------------------------
# -------------------------------------------------------------------------
Tcl2 proc ParameterFetcher_doFetch {} { FME_SetAttribute {_request_version} [FME_DecodeText {1.1.0}] }
FACTORY_DEF * TeeFactory FACTORY_NAME ParameterFetcher INPUT FEATURE_TYPE DuplicateRemover_UNIQUE OUTPUT FEATURE_TYPE ParameterFetcher_OUTPUT @Tcl2(ParameterFetcher_doFetch)
# -------------------------------------------------------------------------
FACTORY_DEF * TestFactory FACTORY_NAME Tester INPUT FEATURE_TYPE ParameterFetcher_OUTPUT TEST @Value(_request_version) = 1.1.0 BOOLEAN_OPERATOR OR OUTPUT PASSED FEATURE_TYPE Tester_PASSED OUTPUT FAILED FEATURE_TYPE Tester_FAILED
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME Logger_Logger INPUT FEATURE_TYPE Tester_FAILED OUTPUT FEATURE_TYPE * @FeatureType("") @Log("ERROR GML2 Not Supported:",20,20) @FeatureType(__NUKE_LOGGED__)
FACTORY_DEF * TeeFactory FACTORY_NAME Logger_Nuker INPUT FEATURE_TYPE __NUKE_LOGGED__
# -------------------------------------------------------------------------
Tcl2 set {StringConcatenator_valList} [split temp,&list_inspire_globalassessment_line,temp ,];
# We use Tcl here instead of @Concatenate because Tcl is more flexible.
Tcl2 proc StringConcatenator_concatter {} { global {StringConcatenator_valList}; set val {}; foreach {valEnc} [set {StringConcatenator_valList}] { append val [FME_DecodeTextOrAttr $valEnc]; }; FME_SetAttribute {list_inspire_globalassessment_line} $val; }
FACTORY_DEF * TeeFactory FACTORY_NAME StringConcatenator INPUT FEATURE_TYPE Tester_PASSED OUTPUT FEATURE_TYPE StringConcatenator_OUTPUT @Tcl2(StringConcatenator_concatter)
# -------------------------------------------------------------------------
Tcl2 set {StringConcatenator_2_valList} [split temp,&list_inspire_activity_line,temp ,];
# We use Tcl here instead of @Concatenate because Tcl is more flexible.
Tcl2 proc StringConcatenator_2_concatter {} { global {StringConcatenator_2_valList}; set val {}; foreach {valEnc} [set {StringConcatenator_2_valList}] { append val [FME_DecodeTextOrAttr $valEnc]; }; FME_SetAttribute {list_inspire_activity_line} $val; }
FACTORY_DEF * TeeFactory FACTORY_NAME StringConcatenator_2 INPUT FEATURE_TYPE StringConcatenator_OUTPUT OUTPUT FEATURE_TYPE StringConcatenator_2_OUTPUT @Tcl2(StringConcatenator_2_concatter)
# -------------------------------------------------------------------------
Tcl2 set {StringConcatenator_3_valList} [split temp,&list_inspire_percentageunderhabitat_line,temp ,];
# We use Tcl here instead of @Concatenate because Tcl is more flexible.
Tcl2 proc StringConcatenator_3_concatter {} { global {StringConcatenator_3_valList}; set val {}; foreach {valEnc} [set {StringConcatenator_3_valList}] { append val [FME_DecodeTextOrAttr $valEnc]; }; FME_SetAttribute {list_inspire_percentageunderhabitat_line} $val; }
FACTORY_DEF * TeeFactory FACTORY_NAME StringConcatenator_3 INPUT FEATURE_TYPE StringConcatenator_2_OUTPUT OUTPUT FEATURE_TYPE StringConcatenator_3_OUTPUT @Tcl2(StringConcatenator_3_concatter)
# -------------------------------------------------------------------------
FACTORY_DEF * XQueryFactory FACTORY_NAME XMLTemplater INPUT SOURCE_DOCUMENT FEATURE_TYPE StringConcatenator_3_OUTPUT XQUERY_FILE "$(FME_MF_DIR)protectedSites_featureTemplate_v6.2.xml" MODE SINGLE_FEATURE EXTRACT_MODE YES RESULT_ATTR _features XML_TEMPLATER_XFORMER YES OUTPUT QUERY_RESULTS FEATURE_TYPE XMLTemplater_OUTPUT OUTPUT INVALID FEATURE_TYPE XMLTemplater_INVALID
FACTORY_DEF * TeeFactory FACTORY_NAME "XMLTemplater OUTPUT Splitter" INPUT FEATURE_TYPE XMLTemplater_OUTPUT OUTPUT FEATURE_TYPE XMLTemplater_OUTPUT_0 OUTPUT FEATURE_TYPE XMLTemplater_OUTPUT_1
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME Logger_BadXML_Feature_Logger INPUT FEATURE_TYPE XMLTemplater_INVALID OUTPUT FEATURE_TYPE * @FeatureType("") @Log("Invalid XML from Feature Templater:",20,2) @FeatureType(__NUKE_LOGGED__)
FACTORY_DEF * TeeFactory FACTORY_NAME Logger_BadXML_Feature_Nuker INPUT FEATURE_TYPE __NUKE_LOGGED__
# -------------------------------------------------------------------------
MACRO casemac
INCLUDE [ if { {no} == {no} } { puts {MACRO casemac -nocase}} ]
Tcl2 proc StringReplacer_replacer {} { set attrs [split \"_features\" {,}]; set findValue [FME_DecodeTextOrAttr {temp}]; set replaceValue [FME_DecodeTextOrAttr {}]; foreach attr $attrs { set attrVal [FME_GetAttribute $attr]; set length [string length $attrVal]; if {$length > 0} { if {{no} == {yes}} { FME_SetAttribute $attr [regsub $(casemac) -all $findValue [FME_GetAttribute $attr] $replaceValue]; } else { FME_SetAttribute $attr [string map $(casemac) [list $findValue $replaceValue] [FME_GetAttribute $attr]]; }; }; }; }
FACTORY_DEF * TeeFactory FACTORY_NAME StringReplacer INPUT FEATURE_TYPE XMLTemplater_OUTPUT_1 OUTPUT FEATURE_TYPE StringReplacer_OUTPUT @Tcl2(StringReplacer_replacer)
# -------------------------------------------------------------------------
MACRO casemac
INCLUDE [ if { {no} == {no} } { puts {MACRO casemac -nocase}} ]
Tcl2 proc StringReplacer_2_replacer {} { set attrs [split \"_features\" {,}]; set findValue [FME_DecodeTextOrAttr {temp}]; set replaceValue [FME_DecodeTextOrAttr {}]; foreach attr $attrs { set attrVal [FME_GetAttribute $attr]; set length [string length $attrVal]; if {$length > 0} { if {{no} == {yes}} { FME_SetAttribute $attr [regsub $(casemac) -all $findValue [FME_GetAttribute $attr] $replaceValue]; } else { FME_SetAttribute $attr [string map $(casemac) [list $findValue $replaceValue] [FME_GetAttribute $attr]]; }; }; }; }
FACTORY_DEF * TeeFactory FACTORY_NAME StringReplacer_2 INPUT FEATURE_TYPE StringReplacer_OUTPUT OUTPUT FEATURE_TYPE StringReplacer_2_OUTPUT @Tcl2(StringReplacer_2_replacer)
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME AttributeKeeper INPUT FEATURE_TYPE StringReplacer_2_OUTPUT OUTPUT FEATURE_TYPE AttributeKeeper_OUTPUT @KeepAttributes(_features,fme_regexp_match,^fme_)
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME ListBuilder_fme_type_remover INPUT FEATURE_TYPE AttributeKeeper_OUTPUT OUTPUT FEATURE_TYPE ListBuilder_no_fme_type @RemoveAttributes(fme_type,fme_geometry)
FACTORY_DEF * ListFactory FACTORY_NAME ListBuilder INPUT FEATURE_TYPE ListBuilder_no_fme_type LIST_NAME _list{} OUTPUT LIST FEATURE_TYPE ListBuilder_OUTPUT
# -------------------------------------------------------------------------
# Expose all attributes. This ensures that if you expose fme_dataset, you will get it.
READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename
FACTORY_DEF * TeeFactory FACTORY_NAME AttributeExposer_3 INPUT FEATURE_TYPE ListBuilder_OUTPUT OUTPUT FEATURE_TYPE AttributeExposer_3_OUTPUT
# -------------------------------------------------------------------------
FACTORY_DEF * XQueryFactory FACTORY_NAME XMLTemplater_dataSet INPUT SOURCE_DOCUMENT FEATURE_TYPE AttributeExposer_3_OUTPUT XQUERY_FILE "$(FME_MF_DIR)protectedSites_datasetTemplate_v6.2.xml" MODE SINGLE_FEATURE EXTRACT_MODE YES RESULT_ATTR text_line_data XML_TEMPLATER_XFORMER YES OUTPUT QUERY_RESULTS FEATURE_TYPE XMLTemplater_dataSet_OUTPUT OUTPUT INVALID FEATURE_TYPE XMLTemplater_dataSet_INVALID
FACTORY_DEF * TeeFactory FACTORY_NAME "XMLTemplater_dataSet OUTPUT Splitter" INPUT FEATURE_TYPE XMLTemplater_dataSet_OUTPUT OUTPUT FEATURE_TYPE XMLTemplater_dataSet_OUTPUT_0 OUTPUT FEATURE_TYPE XMLTemplater_dataSet_OUTPUT_1
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME AttributeKeeper_5 INPUT FEATURE_TYPE XMLTemplater_dataSet_INVALID OUTPUT FEATURE_TYPE AttributeKeeper_5_OUTPUT @KeepAttributes(fme_feature_type,fme_regexp_match,^fme_)
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME Logger_BadXML_Dataset_Logger INPUT FEATURE_TYPE AttributeKeeper_5_OUTPUT OUTPUT FEATURE_TYPE * @FeatureType("") @Log("Invalid XML from Dataset Templater:",20,2) @FeatureType(__NUKE_LOGGED__)
FACTORY_DEF * TeeFactory FACTORY_NAME Logger_BadXML_Dataset_Nuker INPUT FEATURE_TYPE __NUKE_LOGGED__
# -------------------------------------------------------------------------
FACTORY_DEF * XMLValidationFactory FACTORY_NAME XMLValidator_2 INPUT INPUT FEATURE_TYPE XMLTemplater_dataSet_OUTPUT_1 MODE SCHEMA XML_TEXT_ATTR "text_line_data" LIST_ATTR _xml_error EXTERNAL_SCHEMA_FILE "C:\Projects\Inspire\ProtectedAreas\Source\Schema\ProtectedSitesFull.xsd" OUTPUT PASSED FEATURE_TYPE XMLValidator_2_PASSED OUTPUT FAILED FEATURE_TYPE XMLValidator_2_FAILED
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME AttributeKeeper_4 INPUT FEATURE_TYPE XMLValidator_2_FAILED OUTPUT FEATURE_TYPE AttributeKeeper_4_OUTPUT @KeepAttributes(fme_feature_type,fme_regexp_match,^fme_)
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME Logger_XMLValidator_Dataset_FAILED_Logger INPUT FEATURE_TYPE AttributeKeeper_4_OUTPUT OUTPUT FEATURE_TYPE * @FeatureType("") @Log("Dataset invalidated:",20,2) @FeatureType(__NUKE_LOGGED__)
FACTORY_DEF * TeeFactory FACTORY_NAME Logger_XMLValidator_Dataset_FAILED_Nuker INPUT FEATURE_TYPE __NUKE_LOGGED__
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME AttributeKeeper_3 INPUT FEATURE_TYPE XMLValidator_2_PASSED OUTPUT FEATURE_TYPE AttributeKeeper_3_OUTPUT @KeepAttributes(fme_feature_type,fme_regexp_match,^fme_)
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME Logger_XMLValidator_Dataset_PASSED_Logger INPUT FEATURE_TYPE AttributeKeeper_3_OUTPUT OUTPUT FEATURE_TYPE * @FeatureType("") @Log("Dataset Validated:",20,2) @FeatureType(__NUKE_LOGGED__)
FACTORY_DEF * TeeFactory FACTORY_NAME Logger_XMLValidator_Dataset_PASSED_Nuker INPUT FEATURE_TYPE __NUKE_LOGGED__
# -------------------------------------------------------------------------
FACTORY_DEF * XMLValidationFactory FACTORY_NAME XMLValidator INPUT INPUT FEATURE_TYPE XMLTemplater_OUTPUT_0 MODE SYNTAX XML_TEXT_ATTR "_features" LIST_ATTR _xml_error OUTPUT PASSED FEATURE_TYPE XMLValidator_PASSED OUTPUT FAILED FEATURE_TYPE XMLValidator_FAILED
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME Logger_XMLValidator_Feature_FAILED_Logger INPUT FEATURE_TYPE XMLValidator_FAILED OUTPUT FEATURE_TYPE * @FeatureType("") @Log("Feature invalidated:",20,2) @FeatureType(__NUKE_LOGGED__)
FACTORY_DEF * TeeFactory FACTORY_NAME Logger_XMLValidator_Feature_FAILED_Nuker INPUT FEATURE_TYPE __NUKE_LOGGED__
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME AttributeKeeper_2 INPUT FEATURE_TYPE XMLValidator_PASSED OUTPUT FEATURE_TYPE AttributeKeeper_2_OUTPUT @KeepAttributes(INSPIRE_SITEDESCRIPTION,INSPIRE_SITEIDENTIFIER,INSPIRE_SITENAME,fme_regexp_match,^fme_)
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME Logger_XMLValidator_Feature_PASSED_Logger INPUT FEATURE_TYPE AttributeKeeper_2_OUTPUT OUTPUT FEATURE_TYPE * @FeatureType("") @Log("Feature validated:",20,2) @FeatureType(__NUKE_LOGGED__)
FACTORY_DEF * TeeFactory FACTORY_NAME Logger_XMLValidator_Feature_PASSED_Nuker INPUT FEATURE_TYPE __NUKE_LOGGED__
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME "XMLTemplater_dataSet_OUTPUT_0 -> text_line Correlator" INPUT FEATURE_TYPE XMLTemplater_dataSet_OUTPUT_0 OUTPUT FEATURE_TYPE __GO_TO_FINAL_OUTPUT_ROUTER__ @Transform(FME_GENERIC,TEXTLINE) @SupplyAttributes(__wb_out_feat_type__,text_line)
# -------------------------------------------------------------------------
FACTORY_DEF * TestFactory FACTORY_NAME "Final Output Feature Type Router" INPUT FEATURE_TYPE * TEST @Value(__wb_out_feat_type__) != "" OUTPUT PASSED FEATURE_TYPE * @FeatureType(@Value(__wb_out_feat_type__)) OUTPUT FAILED FEATURE_TYPE __nuke_me__ @Tcl2("FME_StatMessage 818059 {@Value(fme_template_feature_type)} 818060 818061 fme_warn")
# -------------------------------------------------------------------------
FACTORY_DEF * TeeFactory FACTORY_NAME "Final Output Nuker" INPUT FEATURE_TYPE __nuke_me__