function load()
    {
        if ( $this->_isProcessingLoad() )
            throw new \RuntimeException(sprintf(
                'Conflict while loading config (%s); another process interrupt loading (%s).'
                    , $this->path
                    , static::$isProcessingLoading
            ));

        $this->_setFlagProcessingLoad();


        $path = $this->path;

        ## Try to load specified config
        #
        $config = $this->_loadGlobPattern($path);


        $fallBackDirectories = [];

        ## First try too load on initial system directory
        #
        $fallBackDir = rtrim( PT_DIR_CONFIG_INITIAL , '\\/' );
        if (strpos($fallBackDir, dirname($path)) !== 0)
            array_push(
                $fallBackDirectories
                , $fallBackDir
            );

        ## Looking in Default Config Directory
        #
        $fallBackDir = rtrim( PT_DIR_CONFIG , '\\/' );
        if (strpos($fallBackDir, dirname($path)) !== 0)
            array_push(
                $fallBackDirectories
                , $fallBackDir
            );


        if ($preConfig = $this->_loadFromDirectories($fallBackDirectories) )
            $config = ($config) ? $preConfig->withMergeRecursive($config) : $preConfig;


        $this->_setFlagProcessingLoad(false);
        return $config;
    }