diff --git a/main.go b/main.go index c79e46e..21bf6cc 100755 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "crypto/rand" + "database/sql" "encoding/hex" "encoding/json" "encoding/xml" @@ -2047,6 +2048,139 @@ func main() { }) + // // ============================================ + // // GET COUNTRY DETAILS (Country + Leaders + All Statistics) + // // ============================================ + // e.Router.GET("/api/getCountryDetails", func(c echo.Context) error { + + // countryCode := c.QueryParam("country_code") + // language := c.QueryParam("language") + + // if countryCode == "" { + // return c.JSON(http.StatusBadRequest, map[string]string{"error": "country_code is required"}) + // } + + // // Get country + // country := struct { + // ID string `db:"id" json:"id"` + // CountryName string `db:"country_name" json:"country_name"` + // CountryCode string `db:"country_code" json:"country_code"` + // FlagUrl string `db:"flag_url" json:"flag_url"` + // }{} + + // countryNameColumn := "country_name_" + language + // query := ` SELECT id,country_code,flag_url,` + countryNameColumn + ` AS country_name FROM countries WHERE country_code = {:country_code}` + // err := app.DB(). + // NewQuery(query). + // Bind(dbx.Params{ + // "country_code": countryCode, + // }). + // One(&country) + + // if err != nil { + // log.Printf("Country not found: %v", err) + // return c.JSON(http.StatusNotFound, map[string]string{"error": "Country not found"}) + // } + + // // Get leaders + // leaders := []struct { + // ID string `db:"id" json:"id"` + // Name string `db:"name" json:"name"` + // Position string `db:"position" json:"position"` + // Photo string `db:"photo" json:"photo"` + // IsCurrent bool `db:"is_current" json:"is_current"` + // }{} + + // nameColumn := "name_" + language + // positionColumn := "position_" + language + + // query2 := `SELECT id,` + nameColumn + ` AS name,` + positionColumn + ` AS position,photo,is_current FROM leaders WHERE country = {:country} AND is_current = true ORDER BY position ASC ` + + // err = app.DB(). + // NewQuery(query2). + // Bind(dbx.Params{ + // "country": country.ID, + // }). + // All(&leaders) + + // if err != nil { + // log.Printf("Failed to fetch leaders: %v", err) + // } + + // // Get all statistics + // allStatistics := []struct { + // ID string `db:"id" json:"id"` + // Type string `db:"type" json:"type"` + // Topic string `db:"topic" json:"topic"` + // Value string `db:"value" json:"value"` + // Rank float64 `db:"rank" json:"rank"` + // IsRankPositive bool `db:"is_rank_positive" json:"is_rank_positive"` + // RankHeading string `db:"rank_heading" json:"rank_heading"` + // Icon string `db:"icon" json:"icon"` + // IconURL string `db:"-" json:"icon_url"` + // }{} + + // topicColumn := "topic_" + language + // valueColumn := "value_" + language + // rankHeadingColumn := "rank_heading_" + language + + // query3 := `SELECT id,type,` + topicColumn + ` AS topic,` + valueColumn + ` AS value,` + rankHeadingColumn + ` AS rank_heading,rank,is_rank_positive,icon FROM country_statistics WHERE country = {:country} ORDER BY type ASC, rank ASC` + + // err = app.DB(). + // NewQuery(query3). + // Bind(dbx.Params{ + // "country": country.ID, + // }). + // All(&allStatistics) + + // if err != nil { + // log.Printf("Failed to fetch statistics: %v", err) + // } + + // for i := range allStatistics { + // if allStatistics[i].Icon == "" { + // allStatistics[i].IconURL = "" + // continue + // } + + // allStatistics[i].IconURL = fmt.Sprintf("%s/api/files/country_statistics/%s/%s", + // baseUrl, + // allStatistics[i].ID, + // allStatistics[i].Icon, + // ) + // } + + // // Group statistics by type + // statisticsMap := map[string]interface{}{ + // "demography": []interface{}{}, + // "gdp": []interface{}{}, + // "fdi": []interface{}{}, + // "trade": []interface{}{}, + // "bilateral_trade": []interface{}{}, + // } + + // for _, stat := range allStatistics { + // // Remove quotes from type field if present + // cleanType := stat.Type + // if len(cleanType) > 2 && cleanType[0] == '"' && cleanType[len(cleanType)-1] == '"' { + // cleanType = cleanType[1 : len(cleanType)-1] + // } + + // if _, exists := statisticsMap[cleanType]; exists { + // statisticsMap[cleanType] = append(statisticsMap[cleanType].([]interface{}), stat) + // } + // } + + // // Build final response + // result := map[string]interface{}{ + // "country": country, + // "leaders": leaders, + // "statistics": statisticsMap, + // } + + // return c.JSON(http.StatusOK, result) + // }) + // ============================================ // GET COUNTRY DETAILS (Country + Leaders + All Statistics) // ============================================ @@ -2059,7 +2193,9 @@ func main() { return c.JSON(http.StatusBadRequest, map[string]string{"error": "country_code is required"}) } + // -------------------------------------------- // Get country + // -------------------------------------------- country := struct { ID string `db:"id" json:"id"` CountryName string `db:"country_name" json:"country_name"` @@ -2068,7 +2204,13 @@ func main() { }{} countryNameColumn := "country_name_" + language - query := ` SELECT id,country_code,flag_url,` + countryNameColumn + ` AS country_name FROM countries WHERE country_code = {:country_code}` + + query := ` + SELECT id, country_code, flag_url, ` + countryNameColumn + ` AS country_name + FROM countries + WHERE country_code = {:country_code} + ` + err := app.DB(). NewQuery(query). Bind(dbx.Params{ @@ -2081,7 +2223,9 @@ func main() { return c.JSON(http.StatusNotFound, map[string]string{"error": "Country not found"}) } + // -------------------------------------------- // Get leaders + // -------------------------------------------- leaders := []struct { ID string `db:"id" json:"id"` Name string `db:"name" json:"name"` @@ -2093,7 +2237,17 @@ func main() { nameColumn := "name_" + language positionColumn := "position_" + language - query2 := `SELECT id,` + nameColumn + ` AS name,` + positionColumn + ` AS position,photo,is_current FROM leaders WHERE country = {:country} AND is_current = true ORDER BY position ASC ` + query2 := ` + SELECT id, + ` + nameColumn + ` AS name, + ` + positionColumn + ` AS position, + photo, + is_current + FROM leaders + WHERE country = {:country} + AND is_current = true + ORDER BY position ASC + ` err = app.DB(). NewQuery(query2). @@ -2106,24 +2260,46 @@ func main() { log.Printf("Failed to fetch leaders: %v", err) } - // Get all statistics - allStatistics := []struct { - ID string `db:"id" json:"id"` - Type string `db:"type" json:"type"` - Topic string `db:"topic" json:"topic"` - Value string `db:"value" json:"value"` - Rank float64 `db:"rank" json:"rank"` - IsRankPositive bool `db:"is_rank_positive" json:"is_rank_positive"` - RankHeading string `db:"rank_heading" json:"rank_heading"` - Icon string `db:"icon" json:"icon"` - IconURL string `db:"-" json:"icon_url"` - }{} + // ----------------------------------- + // STATISTICS + // ----------------------------------- - topicColumn := "topic_" + language - valueColumn := "value_" + language - rankHeadingColumn := "rank_heading_" + language + type Stat struct { + ID string `db:"id" json:"id"` + Type string `db:"type" json:"type"` + Topic string `db:"topic" json:"topic"` + Value string `db:"value" json:"value"` + Rank float64 `db:"rank" json:"rank"` + IsRankPositive bool `db:"is_rank_positive" json:"is_rank_positive"` + RankHeading string `db:"rank_heading" json:"rank_heading"` + IconRecordID sql.NullString `db:"icon_record_id"` + IconFile sql.NullString `db:"icon_file"` + IconURL string `json:"icon_url"` + } - query3 := `SELECT id,type,` + topicColumn + ` AS topic,` + valueColumn + ` AS value,` + rankHeadingColumn + ` AS rank_heading,rank,is_rank_positive,icon FROM country_statistics WHERE country = {:country} ORDER BY type ASC, rank ASC` + allStatistics := []Stat{} + + topicColumn := "cs.topic_" + language + valueColumn := "cs.value_" + language + rankHeadingColumn := "cs.rank_heading_" + language + + query3 := ` + SELECT + cs.id, + cs.type, + ` + topicColumn + ` AS topic, + ` + valueColumn + ` AS value, + ` + rankHeadingColumn + ` AS rank_heading, + cs.rank, + cs.is_rank_positive, + iconRec.id AS icon_record_id, + iconRec.icon AS icon_file + FROM country_statistics cs + LEFT JOIN country_statistics_icons iconRec + ON iconRec.key = cs.topic_en + WHERE cs.country = {:country} + ORDER BY cs.type ASC, cs.rank ASC + ` err = app.DB(). NewQuery(query3). @@ -2136,20 +2312,28 @@ func main() { log.Printf("Failed to fetch statistics: %v", err) } + // ----------------------------------- + // ICON URL BUILD + // ----------------------------------- for i := range allStatistics { - if allStatistics[i].Icon == "" { - allStatistics[i].IconURL = "" - continue - } - allStatistics[i].IconURL = fmt.Sprintf("%s/api/files/country_statistics/%s/%s", - baseUrl, - allStatistics[i].ID, - allStatistics[i].Icon, - ) + if allStatistics[i].IconFile.Valid { + + allStatistics[i].IconURL = fmt.Sprintf( + "%s/api/files/country_statistics_icons/%s/%s", + baseUrl, + allStatistics[i].IconRecordID.String, + allStatistics[i].IconFile.String, + ) + + } else { + allStatistics[i].IconURL = "" + } } - // Group statistics by type + // ----------------------------------- + // GROUP STATISTICS + // ----------------------------------- statisticsMap := map[string]interface{}{ "demography": []interface{}{}, "gdp": []interface{}{}, @@ -2159,8 +2343,9 @@ func main() { } for _, stat := range allStatistics { - // Remove quotes from type field if present + cleanType := stat.Type + if len(cleanType) > 2 && cleanType[0] == '"' && cleanType[len(cleanType)-1] == '"' { cleanType = cleanType[1 : len(cleanType)-1] } @@ -2170,7 +2355,9 @@ func main() { } } - // Build final response + // ----------------------------------- + // FINAL RESPONSE + // ----------------------------------- result := map[string]interface{}{ "country": country, "leaders": leaders, @@ -2202,7 +2389,7 @@ func main() { }{} countryNameColumn := "country_name_" + language - query := ` SELECT id,country_code,flag_url,logo,` + countryNameColumn + ` AS country_name FROM countries WHERE country_code = {:country_code}` + query := ` SELECT id,country_code,flag_url,` + countryNameColumn + ` AS country_name FROM countries WHERE country_code = {:country_code}` err := app.DB(). NewQuery(query). Bind(dbx.Params{ @@ -2247,20 +2434,66 @@ func main() { }) } - for i := range allBilateralTradeData { - if allBilateralTradeData[i].Icon == "" { - allBilateralTradeData[i].IconURL = "" - continue - } - - allBilateralTradeData[i].IconURL = fmt.Sprintf("%s/api/files/bilateral_trade_data/%s/%s", - baseUrl, - allBilateralTradeData[i].ID, - allBilateralTradeData[i].Icon, - ) + groupedData := map[string][]map[string]interface{}{ + "Import": {}, + "Export": {}, + "Reexport": {}, } - return c.JSON(http.StatusOK, allBilateralTradeData) + for _, item := range allBilateralTradeData { + + // Generate icon URL first + iconURL := "" + if item.Icon != "" { + iconURL = fmt.Sprintf("%s/api/files/bilateral_trade_data/%s/%s", + baseUrl, + item.ID, + item.Icon, + ) + } + + topic := item.Topic + category := "" + + // English + if strings.HasPrefix(topic, "Imports - ") { + category = "Import" + topic = strings.TrimPrefix(topic, "Imports - ") + } else if strings.HasPrefix(topic, "Exports - ") { + category = "Export" + topic = strings.TrimPrefix(topic, "Exports - ") + } else if strings.HasPrefix(topic, "Re-exports - ") { + category = "Reexport" + topic = strings.TrimPrefix(topic, "Re-exports - ") + } + + // Arabic + if strings.HasPrefix(topic, "الواردات - ") { + category = "Import" + topic = strings.TrimPrefix(topic, "الواردات - ") + } else if strings.HasPrefix(topic, "الصادرات - ") { + category = "Export" + topic = strings.TrimPrefix(topic, "الصادرات - ") + } else if strings.HasPrefix(topic, "إعادة التصدير - ") { + category = "Reexport" + topic = strings.TrimPrefix(topic, "إعادة التصدير - ") + } + + data := map[string]interface{}{ + "id": item.ID, + "topic": topic, + "value": item.Value, + "icon": item.Icon, + "icon_url": iconURL, + } + + if category != "" { + groupedData[category] = append(groupedData[category], data) + } + } + + return c.JSON(http.StatusOK, groupedData) + }) // ============================================ @@ -2516,7 +2749,7 @@ func main() { } data, _ := json.Marshal(loginPayload) - loginReq, _ := http.NewRequest("POST", fmt.Sprintf("%s/api/admins/auth-with-password", "http://127.0.0.1:8090"), bytes.NewBuffer(data)) + loginReq, _ := http.NewRequest("POST", fmt.Sprintf("%s/api/admins/auth-with-password", "https://pb.venbait.in"), bytes.NewBuffer(data)) loginReq.Header.Set("Content-Type", "application/json") loginResp, err := http.DefaultClient.Do(loginReq) @@ -2537,7 +2770,7 @@ func main() { } // 2️⃣ Use token to fetch records - url := fmt.Sprintf("%s/api/collections/%s/records?perPage=500", "http://127.0.0.1:8090", reqBody.Collection) + url := fmt.Sprintf("%s/api/collections/%s/records?perPage=500", "https://pb.venbait.in", reqBody.Collection) fmt.Println("Fetching collection from URL:", url) req, _ := http.NewRequest("GET", url, nil) @@ -2586,10 +2819,10 @@ func main() { "password": reqBody.LivePassword, } data, _ := json.Marshal(livePayload) - liveReq, _ := http.NewRequest("POST", fmt.Sprintf("%s/api/admins/auth-with-password", "https://pb.venbait.in"), bytes.NewBuffer(data)) + liveReq, _ := http.NewRequest("POST", fmt.Sprintf("%s/api/admins/auth-with-password", "https://pocket.fcsc.gov.ae"), bytes.NewBuffer(data)) liveReq.Header.Set("Content-Type", "application/json") liveResp, err := http.DefaultClient.Do(liveReq) - fmt.Println("Live url:", "https://pb.venbait.in") + fmt.Println("Live url:", "https://pocket.fcsc.gov.ae") fmt.Println("Live req:", liveReq) if err != nil { return c.JSON(500, map[string]string{"error": "failed to connect to Live PB"}) @@ -2612,7 +2845,7 @@ func main() { data, _ := json.Marshal(rec) // Try PATCH first - patchURL := fmt.Sprintf("%s/api/collections/%s/records/%s", "https://pb.venbait.in", reqBody.Collection, id) + patchURL := fmt.Sprintf("%s/api/collections/%s/records/%s", "https://pocket.fcsc.gov.ae", reqBody.Collection, id) req, _ := http.NewRequest("PATCH", patchURL, bytes.NewBuffer(data)) req.Header.Set("Authorization", liveLogin.Token) req.Header.Set("Content-Type", "application/json") @@ -2626,7 +2859,7 @@ func main() { if resp.StatusCode == 404 { // Create instead - postURL := fmt.Sprintf("%s/api/collections/%s/records", "https://pb.venbait.in", reqBody.Collection) + postURL := fmt.Sprintf("%s/api/collections/%s/records", "https://pocket.fcsc.gov.ae", reqBody.Collection) req, _ := http.NewRequest("POST", postURL, bytes.NewBuffer(data)) req.Header.Set("Authorization", liveLogin.Token) req.Header.Set("Content-Type", "application/json") diff --git a/pb_data/data.db b/pb_data/data.db index 95c9ccb..ecce007 100644 Binary files a/pb_data/data.db and b/pb_data/data.db differ diff --git a/pb_data/logs.db b/pb_data/logs.db index ce94a0b..31ba063 100644 Binary files a/pb_data/logs.db and b/pb_data/logs.db differ diff --git a/pb_data/storage/1kmwbfcf9u4gk20/kgkroj0o6rni858/imd_sOGbelx5FS.png b/pb_data/storage/1kmwbfcf9u4gk20/kgkroj0o6rni858/imd_sOGbelx5FS.png new file mode 100644 index 0000000..b0f6df5 Binary files /dev/null and b/pb_data/storage/1kmwbfcf9u4gk20/kgkroj0o6rni858/imd_sOGbelx5FS.png differ diff --git a/pb_data/storage/1x3169aal6ch7z8/r764480e13bf71a/venba_infotech_WedEVqrMFU.png.attrs b/pb_data/storage/1kmwbfcf9u4gk20/kgkroj0o6rni858/imd_sOGbelx5FS.png.attrs similarity index 54% rename from pb_data/storage/1x3169aal6ch7z8/r764480e13bf71a/venba_infotech_WedEVqrMFU.png.attrs rename to pb_data/storage/1kmwbfcf9u4gk20/kgkroj0o6rni858/imd_sOGbelx5FS.png.attrs index 3fad2ec..13532c7 100644 --- a/pb_data/storage/1x3169aal6ch7z8/r764480e13bf71a/venba_infotech_WedEVqrMFU.png.attrs +++ b/pb_data/storage/1kmwbfcf9u4gk20/kgkroj0o6rni858/imd_sOGbelx5FS.png.attrs @@ -1 +1 @@ -{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"Venba Infotech.png"},"md5":"P55jVi+THe+NP1tG4KgsSw=="} +{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"IMD.png"},"md5":"8bGx6LhXqxPbgVjRi2Mdgw=="} diff --git a/pb_data/storage/1kmwbfcf9u4gk20/kgkroj0o6rni858/thumbs_imd_sOGbelx5FS.png/100x100_imd_sOGbelx5FS.png b/pb_data/storage/1kmwbfcf9u4gk20/kgkroj0o6rni858/thumbs_imd_sOGbelx5FS.png/100x100_imd_sOGbelx5FS.png new file mode 100644 index 0000000..0c454c7 Binary files /dev/null and b/pb_data/storage/1kmwbfcf9u4gk20/kgkroj0o6rni858/thumbs_imd_sOGbelx5FS.png/100x100_imd_sOGbelx5FS.png differ diff --git a/pb_data/storage/1x3169aal6ch7z8/r764480e13bf71a/thumbs_venba_infotech_WedEVqrMFU.png/100x100_venba_infotech_WedEVqrMFU.png.attrs b/pb_data/storage/1kmwbfcf9u4gk20/kgkroj0o6rni858/thumbs_imd_sOGbelx5FS.png/100x100_imd_sOGbelx5FS.png.attrs similarity index 67% rename from pb_data/storage/1x3169aal6ch7z8/r764480e13bf71a/thumbs_venba_infotech_WedEVqrMFU.png/100x100_venba_infotech_WedEVqrMFU.png.attrs rename to pb_data/storage/1kmwbfcf9u4gk20/kgkroj0o6rni858/thumbs_imd_sOGbelx5FS.png/100x100_imd_sOGbelx5FS.png.attrs index 78ff8fe..e4b22cc 100644 --- a/pb_data/storage/1x3169aal6ch7z8/r764480e13bf71a/thumbs_venba_infotech_WedEVqrMFU.png/100x100_venba_infotech_WedEVqrMFU.png.attrs +++ b/pb_data/storage/1kmwbfcf9u4gk20/kgkroj0o6rni858/thumbs_imd_sOGbelx5FS.png/100x100_imd_sOGbelx5FS.png.attrs @@ -1 +1 @@ -{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"EQ0c1eYViGoivgx7b8rwQw=="} +{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"y/a73YxDdhHm9l0Kw6Pi1Q=="} diff --git a/pb_data/storage/1kmwbfcf9u4gk20/udnorihkqgswib7/imd_2Z9tdwo1lM.png b/pb_data/storage/1kmwbfcf9u4gk20/udnorihkqgswib7/imd_2Z9tdwo1lM.png new file mode 100644 index 0000000..b0f6df5 Binary files /dev/null and b/pb_data/storage/1kmwbfcf9u4gk20/udnorihkqgswib7/imd_2Z9tdwo1lM.png differ diff --git a/pb_data/storage/1kmwbfcf9u4gk20/udnorihkqgswib7/imd_2Z9tdwo1lM.png.attrs b/pb_data/storage/1kmwbfcf9u4gk20/udnorihkqgswib7/imd_2Z9tdwo1lM.png.attrs new file mode 100644 index 0000000..13532c7 --- /dev/null +++ b/pb_data/storage/1kmwbfcf9u4gk20/udnorihkqgswib7/imd_2Z9tdwo1lM.png.attrs @@ -0,0 +1 @@ +{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"IMD.png"},"md5":"8bGx6LhXqxPbgVjRi2Mdgw=="} diff --git a/pb_data/storage/1kmwbfcf9u4gk20/udnorihkqgswib7/thumbs_imd_2Z9tdwo1lM.png/100x100_imd_2Z9tdwo1lM.png b/pb_data/storage/1kmwbfcf9u4gk20/udnorihkqgswib7/thumbs_imd_2Z9tdwo1lM.png/100x100_imd_2Z9tdwo1lM.png new file mode 100644 index 0000000..0c454c7 Binary files /dev/null and b/pb_data/storage/1kmwbfcf9u4gk20/udnorihkqgswib7/thumbs_imd_2Z9tdwo1lM.png/100x100_imd_2Z9tdwo1lM.png differ diff --git a/pb_data/storage/1kmwbfcf9u4gk20/udnorihkqgswib7/thumbs_imd_2Z9tdwo1lM.png/100x100_imd_2Z9tdwo1lM.png.attrs b/pb_data/storage/1kmwbfcf9u4gk20/udnorihkqgswib7/thumbs_imd_2Z9tdwo1lM.png/100x100_imd_2Z9tdwo1lM.png.attrs new file mode 100644 index 0000000..e4b22cc --- /dev/null +++ b/pb_data/storage/1kmwbfcf9u4gk20/udnorihkqgswib7/thumbs_imd_2Z9tdwo1lM.png/100x100_imd_2Z9tdwo1lM.png.attrs @@ -0,0 +1 @@ +{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"y/a73YxDdhHm9l0Kw6Pi1Q=="} diff --git a/pb_data/storage/1x3169aal6ch7z8/r764480e13bf71a/thumbs_venba_infotech_WedEVqrMFU.png/100x100_venba_infotech_WedEVqrMFU.png b/pb_data/storage/1x3169aal6ch7z8/r764480e13bf71a/thumbs_venba_infotech_WedEVqrMFU.png/100x100_venba_infotech_WedEVqrMFU.png deleted file mode 100644 index 36cbbfa..0000000 Binary files a/pb_data/storage/1x3169aal6ch7z8/r764480e13bf71a/thumbs_venba_infotech_WedEVqrMFU.png/100x100_venba_infotech_WedEVqrMFU.png and /dev/null differ diff --git a/pb_data/storage/1x3169aal6ch7z8/r764480e13bf71a/venba_infotech_WedEVqrMFU.png b/pb_data/storage/1x3169aal6ch7z8/r764480e13bf71a/venba_infotech_WedEVqrMFU.png deleted file mode 100644 index 94940ef..0000000 Binary files a/pb_data/storage/1x3169aal6ch7z8/r764480e13bf71a/venba_infotech_WedEVqrMFU.png and /dev/null differ diff --git a/pb_data/storage/andh1m2lzkyu7si/pjh6a9dwrladwv3/open_data_1nrNd0OGXw.png b/pb_data/storage/andh1m2lzkyu7si/pjh6a9dwrladwv3/open_data_1nrNd0OGXw.png new file mode 100644 index 0000000..323f5b0 Binary files /dev/null and b/pb_data/storage/andh1m2lzkyu7si/pjh6a9dwrladwv3/open_data_1nrNd0OGXw.png differ diff --git a/pb_data/storage/andh1m2lzkyu7si/pjh6a9dwrladwv3/open_data_1nrNd0OGXw.png.attrs b/pb_data/storage/andh1m2lzkyu7si/pjh6a9dwrladwv3/open_data_1nrNd0OGXw.png.attrs new file mode 100644 index 0000000..53010b9 --- /dev/null +++ b/pb_data/storage/andh1m2lzkyu7si/pjh6a9dwrladwv3/open_data_1nrNd0OGXw.png.attrs @@ -0,0 +1 @@ +{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"Open Data.png"},"md5":"zqS1mfeZDSDnS4lCDYYVFA=="} diff --git a/pb_data/storage/andh1m2lzkyu7si/pjh6a9dwrladwv3/thumbs_open_data_1nrNd0OGXw.png/100x100_open_data_1nrNd0OGXw.png b/pb_data/storage/andh1m2lzkyu7si/pjh6a9dwrladwv3/thumbs_open_data_1nrNd0OGXw.png/100x100_open_data_1nrNd0OGXw.png new file mode 100644 index 0000000..d9e4c22 Binary files /dev/null and b/pb_data/storage/andh1m2lzkyu7si/pjh6a9dwrladwv3/thumbs_open_data_1nrNd0OGXw.png/100x100_open_data_1nrNd0OGXw.png differ diff --git a/pb_data/storage/andh1m2lzkyu7si/pjh6a9dwrladwv3/thumbs_open_data_1nrNd0OGXw.png/100x100_open_data_1nrNd0OGXw.png.attrs b/pb_data/storage/andh1m2lzkyu7si/pjh6a9dwrladwv3/thumbs_open_data_1nrNd0OGXw.png/100x100_open_data_1nrNd0OGXw.png.attrs new file mode 100644 index 0000000..a9afd73 --- /dev/null +++ b/pb_data/storage/andh1m2lzkyu7si/pjh6a9dwrladwv3/thumbs_open_data_1nrNd0OGXw.png/100x100_open_data_1nrNd0OGXw.png.attrs @@ -0,0 +1 @@ +{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"BoezhRm3qH1p+B0LKtT2MQ=="} diff --git a/pb_data/storage/andh1m2lzkyu7si/zjoj410rl5nxt5v/imd_Flt4maU1V9.png b/pb_data/storage/andh1m2lzkyu7si/zjoj410rl5nxt5v/imd_Flt4maU1V9.png new file mode 100644 index 0000000..b0f6df5 Binary files /dev/null and b/pb_data/storage/andh1m2lzkyu7si/zjoj410rl5nxt5v/imd_Flt4maU1V9.png differ diff --git a/pb_data/storage/andh1m2lzkyu7si/zjoj410rl5nxt5v/imd_Flt4maU1V9.png.attrs b/pb_data/storage/andh1m2lzkyu7si/zjoj410rl5nxt5v/imd_Flt4maU1V9.png.attrs new file mode 100644 index 0000000..13532c7 --- /dev/null +++ b/pb_data/storage/andh1m2lzkyu7si/zjoj410rl5nxt5v/imd_Flt4maU1V9.png.attrs @@ -0,0 +1 @@ +{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"IMD.png"},"md5":"8bGx6LhXqxPbgVjRi2Mdgw=="} diff --git a/pb_data/storage/andh1m2lzkyu7si/zjoj410rl5nxt5v/thumbs_imd_Flt4maU1V9.png/100x100_imd_Flt4maU1V9.png b/pb_data/storage/andh1m2lzkyu7si/zjoj410rl5nxt5v/thumbs_imd_Flt4maU1V9.png/100x100_imd_Flt4maU1V9.png new file mode 100644 index 0000000..0c454c7 Binary files /dev/null and b/pb_data/storage/andh1m2lzkyu7si/zjoj410rl5nxt5v/thumbs_imd_Flt4maU1V9.png/100x100_imd_Flt4maU1V9.png differ diff --git a/pb_data/storage/andh1m2lzkyu7si/zjoj410rl5nxt5v/thumbs_imd_Flt4maU1V9.png/100x100_imd_Flt4maU1V9.png.attrs b/pb_data/storage/andh1m2lzkyu7si/zjoj410rl5nxt5v/thumbs_imd_Flt4maU1V9.png/100x100_imd_Flt4maU1V9.png.attrs new file mode 100644 index 0000000..e4b22cc --- /dev/null +++ b/pb_data/storage/andh1m2lzkyu7si/zjoj410rl5nxt5v/thumbs_imd_Flt4maU1V9.png/100x100_imd_Flt4maU1V9.png.attrs @@ -0,0 +1 @@ +{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"y/a73YxDdhHm9l0Kw6Pi1Q=="} diff --git a/pb_data/storage/c3cq82ukvgn4k2l/e24dvaqp7kmxcvz/injGpfUsLf39_Wb8n9sIAcJ.png b/pb_data/storage/c3cq82ukvgn4k2l/e24dvaqp7kmxcvz/injGpfUsLf39_Wb8n9sIAcJ.png new file mode 100644 index 0000000..5292807 Binary files /dev/null and b/pb_data/storage/c3cq82ukvgn4k2l/e24dvaqp7kmxcvz/injGpfUsLf39_Wb8n9sIAcJ.png differ diff --git a/pb_data/storage/c3cq82ukvgn4k2l/e24dvaqp7kmxcvz/injGpfUsLf39_Wb8n9sIAcJ.png.attrs b/pb_data/storage/c3cq82ukvgn4k2l/e24dvaqp7kmxcvz/injGpfUsLf39_Wb8n9sIAcJ.png.attrs new file mode 100644 index 0000000..6a86f2f --- /dev/null +++ b/pb_data/storage/c3cq82ukvgn4k2l/e24dvaqp7kmxcvz/injGpfUsLf39_Wb8n9sIAcJ.png.attrs @@ -0,0 +1 @@ +{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":{"original-filename":"in.png"},"md5":"biCuWZ+aLfgvhXZm7kBlwg=="} diff --git a/pb_data/storage/c3cq82ukvgn4k2l/e24dvaqp7kmxcvz/thumbs_injGpfUsLf39_Wb8n9sIAcJ.png/100x100_injGpfUsLf39_Wb8n9sIAcJ.png b/pb_data/storage/c3cq82ukvgn4k2l/e24dvaqp7kmxcvz/thumbs_injGpfUsLf39_Wb8n9sIAcJ.png/100x100_injGpfUsLf39_Wb8n9sIAcJ.png new file mode 100644 index 0000000..94b3d40 Binary files /dev/null and b/pb_data/storage/c3cq82ukvgn4k2l/e24dvaqp7kmxcvz/thumbs_injGpfUsLf39_Wb8n9sIAcJ.png/100x100_injGpfUsLf39_Wb8n9sIAcJ.png differ diff --git a/pb_data/storage/c3cq82ukvgn4k2l/e24dvaqp7kmxcvz/thumbs_injGpfUsLf39_Wb8n9sIAcJ.png/100x100_injGpfUsLf39_Wb8n9sIAcJ.png.attrs b/pb_data/storage/c3cq82ukvgn4k2l/e24dvaqp7kmxcvz/thumbs_injGpfUsLf39_Wb8n9sIAcJ.png/100x100_injGpfUsLf39_Wb8n9sIAcJ.png.attrs new file mode 100644 index 0000000..a6735f7 --- /dev/null +++ b/pb_data/storage/c3cq82ukvgn4k2l/e24dvaqp7kmxcvz/thumbs_injGpfUsLf39_Wb8n9sIAcJ.png/100x100_injGpfUsLf39_Wb8n9sIAcJ.png.attrs @@ -0,0 +1 @@ +{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null,"md5":"2pTxEA7Pl1AULa1DB1HfqQ=="}