Compare commits
12 Commits
61e756eecf
...
master
Author | SHA1 | Date | |
---|---|---|---|
![]() |
0018654920 | ||
![]() |
d660b5ec00 | ||
![]() |
0cd63a7111 | ||
![]() |
e70bde7bd4 | ||
![]() |
f383eab282 | ||
![]() |
c2a6a26615 | ||
![]() |
9aa58a6812 | ||
![]() |
99ae909180 | ||
![]() |
d0b5c96f23 | ||
![]() |
4b7ef7b4a7 | ||
![]() |
f213f1d0c3 | ||
![]() |
f1cf4ed3cf |
@@ -6,6 +6,7 @@ import (
|
|||||||
"main.go/api"
|
"main.go/api"
|
||||||
db "main.go/database"
|
db "main.go/database"
|
||||||
. "main.go/type"
|
. "main.go/type"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -22,9 +23,45 @@ type CrDb struct {
|
|||||||
Visible int `json:"visible"`
|
Visible int `json:"visible"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//GetAllChallenges 获取所有题目
|
||||||
|
func GetAllChallenges(c *gin.Context) {
|
||||||
|
var challenges []Challenge
|
||||||
|
if err := getchallenge(&challenges); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
c.JSON(400, gin.H{"code": 400, "msg": "Get all challenges failure!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.JSON(200, gin.H{"code": 200, "data": challenges})
|
||||||
|
}
|
||||||
|
|
||||||
|
//getchallenge 获取题目
|
||||||
|
func getchallenge(challenge *[]Challenge) error {
|
||||||
|
var attachmentString, hints string
|
||||||
|
api.Link()
|
||||||
|
DB := db.DBsnctf
|
||||||
|
command := "SELECT * FROM challenge;"
|
||||||
|
rows, err := DB.Raw(command).Rows()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
for rows.Next() {
|
||||||
|
var b Challenge
|
||||||
|
err := rows.Scan(&b.ID, &b.Name, &b.Score, &b.Flag, &b.Description, &attachmentString, &b.Category, &b.Tags, &hints, &b.Visible)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
b.Attachment = strings.Split(attachmentString, ",")
|
||||||
|
b.Hints = strings.Split(hints, ",")
|
||||||
|
|
||||||
|
*challenge = append(*challenge, b)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//NewChallenge 新建一个题目
|
//NewChallenge 新建一个题目
|
||||||
func NewChallenge(c *gin.Context){
|
func NewChallenge(c *gin.Context) {
|
||||||
var request ChallengeRequest
|
var request ChallengeRequest
|
||||||
if err := c.ShouldBindJSON(&request); err != nil {
|
if err := c.ShouldBindJSON(&request); err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
@@ -77,3 +114,50 @@ func addChallenge(c *Challenge) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DelChallenge 删除题目
|
||||||
|
func DelChallenge(c *gin.Context) {
|
||||||
|
api.Link()
|
||||||
|
DB := db.DBsnctf
|
||||||
|
id := c.Param("id")
|
||||||
|
err := DB.Table("challenge").Where("id = ?", id).Delete(&Challenge{}).Error
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(400, gin.H{"code": 400, "msg": "Delete challenge failure!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.JSON(200, gin.H{"code": 200, "msg": "Delete challenge success!"})
|
||||||
|
}
|
||||||
|
|
||||||
|
// EditChallenge 修改题目
|
||||||
|
func EditChallenge(c *gin.Context) {
|
||||||
|
api.Link()
|
||||||
|
DB := db.DBsnctf
|
||||||
|
id := c.Param("id")
|
||||||
|
cid, _ := strconv.Atoi(id)
|
||||||
|
var request ChallengeRequeststrings
|
||||||
|
if err := c.ShouldBindJSON(&request); err != nil {
|
||||||
|
c.JSON(400, gin.H{"code": 400, "msg": "Request format wrong!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
visable, _ := strconv.Atoi(request.Visible)
|
||||||
|
attachmentString := strings.Join(request.Attachment, ",")
|
||||||
|
hintString := strings.Join(request.Hints, ",")
|
||||||
|
challenge := &CrDb{
|
||||||
|
Name: request.Name,
|
||||||
|
Score: request.Score,
|
||||||
|
Flag: request.Flag,
|
||||||
|
Description: request.Description,
|
||||||
|
Attachment: attachmentString,
|
||||||
|
Category: request.Category,
|
||||||
|
Tags: request.Tags,
|
||||||
|
Hints: hintString,
|
||||||
|
Visible: visable,
|
||||||
|
}
|
||||||
|
err := DB.Debug().Table("challenge").Where("id = ?", cid).Updates(challenge).Error
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(400, gin.H{"code": 400, "msg": "Update challenge failure!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.JSON(200, gin.H{"code": 200, "msg": "Update challenge success!"})
|
||||||
|
|
||||||
|
}
|
||||||
|
99
api/admin/user.go
Normal file
99
api/admin/user.go
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
package admin
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"main.go/api"
|
||||||
|
db "main.go/database"
|
||||||
|
. "main.go/type"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
//GetAllUserInfo 获取所有用户
|
||||||
|
func GetAllUserInfo(c *gin.Context) {
|
||||||
|
api.Link()
|
||||||
|
DB := db.DBsnctf
|
||||||
|
var resquest []AllInfoResponse
|
||||||
|
rows, err := DB.Debug().Table("user").Select([]string{"id", "username", "affiliation", "country", "website", "password", "email", "banned", "hidden", "role", "team_id"}).Rows()
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(400, gin.H{"code": 400, "msg": "Get info error!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for rows.Next() {
|
||||||
|
var info AllInfoResponse
|
||||||
|
err := rows.Scan(&info.Id, &info.Username, &info.Affiliation, &info.Country, &info.Website, &info.Password, &info.Email, &info.Banned, &info.Hidden, &info.Role, &info.TeamID)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(400, gin.H{"code": 400, "msg": "Get info error!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resquest = append(resquest, info)
|
||||||
|
}
|
||||||
|
c.JSON(200, gin.H{"code": 200, "data": resquest})
|
||||||
|
}
|
||||||
|
|
||||||
|
// DelUser 删除用户
|
||||||
|
func DelUser(c *gin.Context) {
|
||||||
|
id := c.Param("id")
|
||||||
|
uid, _ := strconv.Atoi(id)
|
||||||
|
api.Link()
|
||||||
|
DB := db.DBsnctf
|
||||||
|
err := DB.Debug().Table("user").Where("id = ?", uid).Delete(&User{}).Error
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(400, gin.H{"code": 400, "msg": "Delete user error!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.JSON(200, gin.H{"code": 200, "msg": "Delete user success!"})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// EditUser 更新用户信息
|
||||||
|
func EditUser(c *gin.Context) {
|
||||||
|
var user EditInfoRequest
|
||||||
|
id := c.Param("id")
|
||||||
|
uid, _ := strconv.Atoi(id)
|
||||||
|
api.Link()
|
||||||
|
DB := db.DBsnctf
|
||||||
|
err := c.ShouldBindJSON(&user)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
c.JSON(400, gin.H{"code": 400, "msg": "Update user error!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
upuser := &EditInfoRequest{
|
||||||
|
Username: user.Username,
|
||||||
|
Password: user.Password,
|
||||||
|
Email: user.Email,
|
||||||
|
Affiliation: user.Affiliation,
|
||||||
|
Country: user.Country,
|
||||||
|
Website: user.Website,
|
||||||
|
Banned: user.Banned,
|
||||||
|
Hidden: user.Hidden,
|
||||||
|
Role: user.Role,
|
||||||
|
TeamID: user.TeamID,
|
||||||
|
}
|
||||||
|
err = DB.Table("user").Where("id = ?", uid).Updates(upuser).Error
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
c.JSON(400, gin.H{"code": 400, "msg": "Update user error!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.JSON(200, gin.H{"code": 200, "msg": "Update user success!"})
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddUser 新增用户
|
||||||
|
func AddUser(c *gin.Context) {
|
||||||
|
var user User
|
||||||
|
api.Link()
|
||||||
|
DB := db.DBsnctf
|
||||||
|
err := c.ShouldBindJSON(&user)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(400, gin.H{"code": 400, "msg": "Add user error!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = DB.Debug().Table("user").Create(&user).Error
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(400, gin.H{"code": 400, "msg": "Add user error!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.JSON(200, gin.H{"code": 200, "msg": "Add user success!"})
|
||||||
|
}
|
@@ -11,7 +11,7 @@ import (
|
|||||||
|
|
||||||
//GetAllChallenges 获取全部题目
|
//GetAllChallenges 获取全部题目
|
||||||
|
|
||||||
func GetAllChallenges(c * gin.Context){
|
func GetAllChallenges(c *gin.Context) {
|
||||||
var challenges []ChallengeResponse
|
var challenges []ChallengeResponse
|
||||||
|
|
||||||
if err := getAllChallenges(c, &challenges); err != nil {
|
if err := getAllChallenges(c, &challenges); err != nil {
|
||||||
@@ -25,33 +25,75 @@ func GetAllChallenges(c * gin.Context){
|
|||||||
|
|
||||||
//GetChallengesByCategory 获取某个分类下的题目
|
//GetChallengesByCategory 获取某个分类下的题目
|
||||||
|
|
||||||
func GetChallengesByCategory(c *gin.Context){
|
func GetChallengesByCategory(c *gin.Context) {
|
||||||
category := c.Param("category")
|
category := c.Param("category")
|
||||||
if matched := CheckCategory(category); !matched {
|
if matched := CheckCategory(category); !matched {
|
||||||
c.JSON(400, gin.H{"code": 400, "msg": "Wrong category!"})
|
c.JSON(400, gin.H{"code": 400, "msg": "Wrong category!"})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var challenges []ChallengeResponse
|
var challenges []ChallengeResponse
|
||||||
if err := getAllChallenges(c, &challenges); err != nil {
|
if err := getCategory(c, &challenges); err != nil {
|
||||||
c.JSON(400, gin.H{"code": 400, "msg": "Get all challenges failure!"})
|
c.JSON(400, gin.H{"code": 400, "msg": "Get all challenges failure!"})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.JSON(200, gin.H{"code": 200, "data": challenges})
|
c.JSON(200, gin.H{"code": 200, "data": challenges})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//getCategory 操作数据库获取某个分类下的题目
|
||||||
|
func getCategory(c *gin.Context, challenges *[]ChallengeResponse) error {
|
||||||
|
var attachmentString, hints string
|
||||||
|
Link()
|
||||||
|
DB := db.DBsnctf
|
||||||
|
category := c.Param("category")
|
||||||
|
rows, err := DB.Raw("SELECT id, name, score, description, attachment, category, tags, hints FROM challenge WHERE visible=1 AND category=?;", category).Rows()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
for rows.Next() {
|
||||||
|
var challenge ChallengeResponse
|
||||||
|
err = rows.Scan(&challenge.ID, &challenge.Name, &challenge.Score, &challenge.Description, &attachmentString, &challenge.Category, &challenge.Tags, &hints)
|
||||||
|
fmt.Println(err)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// 解析为切片
|
||||||
|
challenge.Attachment = strings.Split(attachmentString, ",")
|
||||||
|
challenge.Hints = strings.Split(hints, ",")
|
||||||
|
|
||||||
|
solverCount, err := getSolverCount(challenge.ID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
challenge.SolverCount = solverCount
|
||||||
|
session, err := Store.Get(c.Request, "SNCTFSESSID")
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(200, gin.H{"code": 400, "msg": "Get SNCTFSESSID error"})
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
user, ok := session.Values["user"].(User)
|
||||||
|
if !ok {
|
||||||
|
c.JSON(200, gin.H{"code": 400, "msg": "No session"})
|
||||||
|
return errors.New("no session")
|
||||||
|
}
|
||||||
|
challenge.IsSolved = hasAlreadySolved(user.ID, challenge.ID)
|
||||||
|
*challenges = append(*challenges, challenge)
|
||||||
|
}
|
||||||
|
return rows.Err()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// getAllChallenges 操作数据库获取所有题目。
|
// getAllChallenges 操作数据库获取所有题目。
|
||||||
func getAllChallenges(c *gin.Context, challenges *[]ChallengeResponse) error {
|
func getAllChallenges(c *gin.Context, challenges *[]ChallengeResponse) error {
|
||||||
var attachmentString, hints string
|
var attachmentString, hints string
|
||||||
Link()
|
Link()
|
||||||
DB := db.DBsnctf
|
DB := db.DBsnctf
|
||||||
rows,err := DB.Raw("SELECT id, name, score, description, attachment, category, tags, hints FROM challenge WHERE visible=1;").Rows()
|
rows, err := DB.Raw("SELECT id, name, score, description, attachment, category, tags, hints FROM challenge WHERE visible=1;").Rows()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
for rows.Next(){
|
for rows.Next() {
|
||||||
var challenge ChallengeResponse
|
var challenge ChallengeResponse
|
||||||
err = rows.Scan(&challenge.ID, &challenge.Name, &challenge.Score, &challenge.Description, &attachmentString, &challenge.Category, &challenge.Tags, &hints)
|
err = rows.Scan(&challenge.ID, &challenge.Name, &challenge.Score, &challenge.Description, &attachmentString, &challenge.Category, &challenge.Tags, &hints)
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
|
@@ -1,9 +1,11 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
. "main.go/type"
|
|
||||||
db "main.go/database"
|
db "main.go/database"
|
||||||
|
"main.go/tools"
|
||||||
|
. "main.go/type"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetAllNotices 获取所有的公告
|
// GetAllNotices 获取所有的公告
|
||||||
@@ -17,7 +19,6 @@ func GetAllNotices(c *gin.Context) {
|
|||||||
c.JSON(200, gin.H{"code": 200, "data": notices})
|
c.JSON(200, gin.H{"code": 200, "data": notices})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func getAllNotices(notices *[]Notice) error {
|
func getAllNotices(notices *[]Notice) error {
|
||||||
Link()
|
Link()
|
||||||
DB := db.DBsnctf
|
DB := db.DBsnctf
|
||||||
@@ -37,3 +38,41 @@ func getAllNotices(notices *[]Notice) error {
|
|||||||
}
|
}
|
||||||
return rows.Err()
|
return rows.Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AddNewNotices 新增公告
|
||||||
|
func AddNewNotices(c *gin.Context) {
|
||||||
|
Link()
|
||||||
|
DB := db.DBsnctf
|
||||||
|
var request NoticeRequest
|
||||||
|
if err := c.ShouldBindJSON(&request); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
c.JSON(400, gin.H{"code": 400, "msg": "Request format wrong!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
addtime := tools.Timestamp()
|
||||||
|
notice := &Notice{
|
||||||
|
Title: request.Title,
|
||||||
|
Content: request.Content,
|
||||||
|
CreatedAt: addtime,
|
||||||
|
}
|
||||||
|
err := DB.Table("notice").Create(¬ice).Error
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(400, gin.H{"code": 400, "msg": "error for database"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.JSON(200, gin.H{"code": 200, "msg": "success!"})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// DelNotice 删除公告
|
||||||
|
func DelNotice(c *gin.Context) {
|
||||||
|
Link()
|
||||||
|
DB := db.DBsnctf
|
||||||
|
noticeid := c.Param("id")
|
||||||
|
err := DB.Table("notice").Where("id = ?", noticeid).Delete(&Notice{}).Error
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(400, gin.H{"code": 400, "msg": "error for database"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.JSON(200, gin.H{"code": 200, "msg": "success!"})
|
||||||
|
}
|
||||||
|
@@ -13,18 +13,19 @@ import (
|
|||||||
func hasAlreadySolved(uid int, cid int) (exists bool) {
|
func hasAlreadySolved(uid int, cid int) (exists bool) {
|
||||||
Link()
|
Link()
|
||||||
DB := db.DBsnctf
|
DB := db.DBsnctf
|
||||||
err := DB.Raw("SELECT EXISTS(SELECT 1 FROM solve WHERE uid=? AND cid=?)",uid,cid).Scan(&exists).Error
|
err := DB.Raw("SELECT EXISTS(SELECT 1 FROM solve WHERE uid=? AND cid=?)", uid, cid).Scan(&exists).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return exists
|
return exists
|
||||||
}
|
}
|
||||||
|
|
||||||
// isChallengeExisted 检查数据库中是否存在某个题目。
|
// isChallengeExisted 检查数据库中是否存在某个题目。
|
||||||
func isChallengeExisted(id int) (exists bool) {
|
func isChallengeExisted(id int) (exists bool) {
|
||||||
Link()
|
Link()
|
||||||
DB := db.DBsnctf
|
DB := db.DBsnctf
|
||||||
command := "SELECT EXISTS(SELECT 1 FROM challenge WHERE id = ?);"
|
command := "SELECT EXISTS(SELECT 1 FROM challenge WHERE id = ?);"
|
||||||
err := DB.Raw(command,id).Scan(&exists).Error
|
err := DB.Raw(command, id).Scan(&exists).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -48,7 +49,7 @@ func addSubmission(s *Submission) error {
|
|||||||
func getFlag(id int) (flag string, err error) {
|
func getFlag(id int) (flag string, err error) {
|
||||||
Link()
|
Link()
|
||||||
DB := db.DBsnctf
|
DB := db.DBsnctf
|
||||||
err = DB.Table("challenge").Select("flag").Where("id = ?",id).Find(&flag).Error
|
err = DB.Table("challenge").Select("flag").Where("id = ?", id).Find(&flag).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@@ -81,10 +82,11 @@ func addUserScore(username string, cid int) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// updateUserScores 操作数据库更新解出用户的分数。
|
// updateUserScores 操作数据库更新解出用户的分数。
|
||||||
func updateUserScores(reducedScore, cid int) error {
|
func updateUserScores(reducedScore, cid int) error {
|
||||||
|
|
||||||
DB:=db.DBsnctf
|
DB := db.DBsnctf
|
||||||
command := "UPDATE score SET score=score-? WHERE EXISTS(SELECT 1 FROM user,solve WHERE user.id=solve.uid AND score.username=user.username AND solve.cid=?);"
|
command := "UPDATE score SET score=score-? WHERE EXISTS(SELECT 1 FROM user,solve WHERE user.id=solve.uid AND score.username=user.username AND solve.cid=?);"
|
||||||
err := DB.Exec(command, reducedScore, cid).Error
|
err := DB.Exec(command, reducedScore, cid).Error
|
||||||
|
|
||||||
@@ -127,12 +129,12 @@ func SubmitFlag(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
session,err := Store.Get(c.Request, "SNCTFSESSID")
|
session, err := Store.Get(c.Request, "SNCTFSESSID")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(400, gin.H{"code": 400, "msg": "GET SNCTFSESSID error!"})
|
c.JSON(400, gin.H{"code": 400, "msg": "GET SNCTFSESSID error!"})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
user,ok := session.Values["user"].(User)
|
user, ok := session.Values["user"].(User)
|
||||||
if !ok {
|
if !ok {
|
||||||
c.JSON(400, gin.H{"code": 400, "msg": "GET user error!"})
|
c.JSON(400, gin.H{"code": 400, "msg": "GET user error!"})
|
||||||
return
|
return
|
||||||
@@ -158,21 +160,21 @@ func SubmitFlag(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
// 是否已经解出该题
|
// 是否已经解出该题
|
||||||
if hasAlreadySolved(user.ID, request.Cid) {
|
if hasAlreadySolved(user.ID, request.Cid) {
|
||||||
c.JSON(400, gin.H{"code": 400, "msg": "Already solved!"})
|
c.JSON(200, gin.H{"code": 400, "msg": "Already solved!"})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// 获取flag
|
// 获取flag
|
||||||
flag, err := getFlag(request.Cid)
|
flag, err := getFlag(request.Cid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
c.JSON(400, gin.H{"code": 400, "msg": "Get flag failure!"})
|
c.JSON(200, gin.H{"code": 400, "msg": "Get flag failure!"})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// 检查flag是否正确
|
// 检查flag是否正确
|
||||||
if flag != request.Flag {
|
if flag != request.Flag {
|
||||||
c.JSON(400, gin.H{"code": 400, "msg": "Wrong flag!"})
|
c.JSON(200, gin.H{"code": 400, "msg": "Wrong flag!"})
|
||||||
return
|
return
|
||||||
}else {
|
} else {
|
||||||
// Solve记录
|
// Solve记录
|
||||||
solve := &Solve{
|
solve := &Solve{
|
||||||
UserID: user.ID,
|
UserID: user.ID,
|
||||||
@@ -181,7 +183,7 @@ func SubmitFlag(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
err = addSolve(solve)
|
err = addSolve(solve)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(400, gin.H{"code": 400, "msg": "Record solve failure!"})
|
c.JSON(200, gin.H{"code": 400, "msg": "Record solve failure!"})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
//加分
|
//加分
|
||||||
|
60
api/user.go
60
api/user.go
@@ -35,6 +35,7 @@ func Login(c *gin.Context) {
|
|||||||
//code 1用户名或密码错误
|
//code 1用户名或密码错误
|
||||||
|
|
||||||
err := DB.Take(&user, "username = ?", request.Username).Error
|
err := DB.Take(&user, "username = ?", request.Username).Error
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(200, gin.H{
|
c.JSON(200, gin.H{
|
||||||
"Error": true,
|
"Error": true,
|
||||||
@@ -193,7 +194,7 @@ func GetInfoByUserId(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err := DB.Debug().Raw("SELECT username,affiliation,country,team_id FROM user WHERE id = ? LIMIT 1", id).Scan(&info).Error
|
err := DB.Debug().Raw("SELECT username,affiliation,country,team_id,website FROM user WHERE id = ? LIMIT 1", id).Scan(&info).Error
|
||||||
//err := DB.Where("id = ?", id).First(user).Error
|
//err := DB.Where("id = ?", id).First(user).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(400, gin.H{"code": 400, "msg": "Get info error!"})
|
c.JSON(400, gin.H{"code": 400, "msg": "Get info error!"})
|
||||||
@@ -203,6 +204,63 @@ func GetInfoByUserId(c *gin.Context) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateUserInfo 更新用户信息
|
||||||
|
func UpdateUserInfo(c *gin.Context) {
|
||||||
|
var user User
|
||||||
|
var request UpdateUserInfoRequest
|
||||||
|
if err := c.ShouldBindJSON(&request); err != nil {
|
||||||
|
c.JSON(400, gin.H{"code": 400, "msg": "Request format wrong!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
Link()
|
||||||
|
DB := db.DBsnctf
|
||||||
|
session, err := Store.Get(c.Request, "SNCTFSESSID")
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(200, gin.H{"code": 400, "msg": "Get SNCTFSESSID error"})
|
||||||
|
}
|
||||||
|
user, ok := session.Values["user"].(User)
|
||||||
|
if !ok {
|
||||||
|
c.JSON(200, gin.H{"code": 400, "msg": "No session"})
|
||||||
|
}
|
||||||
|
//获取用户id
|
||||||
|
userid := user.ID
|
||||||
|
//获取传入数据
|
||||||
|
username := request.Name
|
||||||
|
affiliation := request.Affiliation
|
||||||
|
country := request.Country
|
||||||
|
website := request.Website
|
||||||
|
email := request.Email
|
||||||
|
//数据库更新数据
|
||||||
|
err = DB.Model(&user).Where("id = ?", userid).Update("username", username).Update("affiliation", affiliation).Update("country", country).Update("website", website).Update("email", email).Error
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(200, gin.H{"code": 400, "msg": "Update info error!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//更新session
|
||||||
|
session.Values["user"] = user
|
||||||
|
c.JSON(200, gin.H{"code": 200, "msg": "Update info success!"})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetAllUserInfo 获取所有用户信息
|
||||||
|
func GetAllUserInfo(c *gin.Context) {
|
||||||
|
var info PublicAllInfoResponse
|
||||||
|
var alla []PublicAllInfoResponse
|
||||||
|
Link()
|
||||||
|
DB := db.DBsnctf
|
||||||
|
rows, err := DB.Debug().Select([]string{"id", "username", "affiliation", "country", "website"}).Table("user").Where("hidden = ?", 0).Rows()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(400, gin.H{"code": 400, "msg": "Get info error!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for rows.Next() {
|
||||||
|
rows.Scan(&info.Id, &info.Username, &info.Affiliation, &info.Country, &info.Website)
|
||||||
|
alla = append(alla, info)
|
||||||
|
}
|
||||||
|
c.JSON(200, gin.H{"code": 200, "data": alla})
|
||||||
|
}
|
||||||
|
|
||||||
// checkUsername 验证用户名是否符合中文数字字母下划线横杠,长度1到10位,返回true或false
|
// checkUsername 验证用户名是否符合中文数字字母下划线横杠,长度1到10位,返回true或false
|
||||||
func checkUsername(username string) bool {
|
func checkUsername(username string) bool {
|
||||||
if !(utf8.RuneCountInString(username) > 0) || !(utf8.RuneCountInString(username) < 11) {
|
if !(utf8.RuneCountInString(username) > 0) || !(utf8.RuneCountInString(username) < 11) {
|
||||||
|
@@ -6,28 +6,28 @@ import (
|
|||||||
"main.go/api/admin"
|
"main.go/api/admin"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func Initrouter() {
|
||||||
func Initrouter(){
|
|
||||||
router := gin.Default()
|
router := gin.Default()
|
||||||
|
router.Use(Cors())
|
||||||
api_v1 := router.Group("/api/v1")
|
api_v1 := router.Group("/api/v1")
|
||||||
|
|
||||||
//公共接口(无需登录)
|
//公共接口(无需登录)
|
||||||
public := api_v1.Group("")
|
public := api_v1.Group("")
|
||||||
{
|
{
|
||||||
//用户登录
|
//用户登录
|
||||||
public.POST("/login",api.Login)
|
public.POST("/login", api.Login)
|
||||||
//用户注册
|
//用户注册
|
||||||
public.POST("/register",api.Register)
|
public.POST("/register", api.Register)
|
||||||
//用户登出
|
//用户登出
|
||||||
public.GET("/logout",api.Logout)
|
public.GET("/logout", api.Logout)
|
||||||
//获取指定id用户可公开信息
|
//获取指定id用户可公开信息
|
||||||
public.GET("/user/:id",api.GetInfoByUserId)
|
public.GET("/user/:id", api.GetInfoByUserId)
|
||||||
//获取指定id用户分数
|
//获取指定id用户分数
|
||||||
public.GET("/score/:id",api.GetScoreByUserId)
|
public.GET("/score/:id", api.GetScoreByUserId)
|
||||||
//获取所有用户分数,降序排列
|
//获取所有用户分数,降序排列
|
||||||
public.GET("/score",api.GetAllScore)
|
public.GET("/score", api.GetAllScore)
|
||||||
//获取全部公告
|
//获取全部公告
|
||||||
public.GET("/notice",api.GetAllNotices)
|
public.GET("/notice", api.GetAllNotices)
|
||||||
|
|
||||||
}
|
}
|
||||||
// 普通用户api,需要用户登陆且Role=0才能访问
|
// 普通用户api,需要用户登陆且Role=0才能访问
|
||||||
@@ -36,6 +36,8 @@ func Initrouter(){
|
|||||||
{
|
{
|
||||||
// 获取当前用户信息
|
// 获取当前用户信息
|
||||||
personal.GET("/session", api.Session)
|
personal.GET("/session", api.Session)
|
||||||
|
// 修改当前用户的信息
|
||||||
|
personal.PUT("/userinfo", api.UpdateUserInfo)
|
||||||
// 获取题目分类
|
// 获取题目分类
|
||||||
personal.GET("/category", api.GetCategories)
|
personal.GET("/category", api.GetCategories)
|
||||||
// 获取所有题目信息
|
// 获取所有题目信息
|
||||||
@@ -55,6 +57,8 @@ func Initrouter(){
|
|||||||
personal.GET("/solves/self", api.GetSelfSolves)
|
personal.GET("/solves/self", api.GetSelfSolves)
|
||||||
// 获取当前用户分数、排名
|
// 获取当前用户分数、排名
|
||||||
personal.GET("/score/self", api.GetSelfScoreAndRank)
|
personal.GET("/score/self", api.GetSelfScoreAndRank)
|
||||||
|
// 获取所有用户信息
|
||||||
|
personal.GET("/users", api.GetAllUserInfo)
|
||||||
// 校内排行api,暂时留空
|
// 校内排行api,暂时留空
|
||||||
}
|
}
|
||||||
// 管理员api,需要用户登陆且Role=1才能访问
|
// 管理员api,需要用户登陆且Role=1才能访问
|
||||||
@@ -63,10 +67,51 @@ func Initrouter(){
|
|||||||
{
|
{
|
||||||
// 创建新题目
|
// 创建新题目
|
||||||
manager.POST("/challenge", admin.NewChallenge)
|
manager.POST("/challenge", admin.NewChallenge)
|
||||||
|
// 删除题目 测试通过,但是分数不会同步删除
|
||||||
|
manager.DELETE("/challenge/:id", admin.DelChallenge)
|
||||||
|
// 获取所有题目,包括不可见题目
|
||||||
|
manager.GET("/challenges", admin.GetAllChallenges)
|
||||||
|
// 更新题目信息
|
||||||
|
manager.PUT("/challenge/:id", admin.EditChallenge)
|
||||||
|
//创建新公告
|
||||||
|
manager.POST("/notice", api.AddNewNotices)
|
||||||
|
//删除公告
|
||||||
|
manager.DELETE("/notice/:id", api.DelNotice)
|
||||||
|
|
||||||
|
//显示数据库中所有用户信息
|
||||||
|
manager.GET("/users", admin.GetAllUserInfo)
|
||||||
|
//删除用户信息
|
||||||
|
manager.DELETE("/user/:id", admin.DelUser)
|
||||||
|
//修改用户信息
|
||||||
|
manager.PUT("/user/:id", admin.EditUser)
|
||||||
|
//新增用户
|
||||||
|
manager.POST("/user", admin.AddUser)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err := router.Run(":9000")
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
router.Run(":9000")
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 跨域
|
||||||
|
func Cors() gin.HandlerFunc {
|
||||||
|
return func(c *gin.Context) {
|
||||||
|
method := c.Request.Method
|
||||||
|
origin := c.Request.Header.Get("Origin") //请求头部
|
||||||
|
if origin != "" {
|
||||||
|
c.Header("Access-Control-Allow-Origin", origin) //"http://172.20.10.10:8081")
|
||||||
|
c.Header("Access-Control-Allow-Headers", "Content-Category, AccessToken, X-CSRF-Token, Authorization, Token, Content-Type")
|
||||||
|
c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PATCH, DELETE, PUT")
|
||||||
|
c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Category")
|
||||||
|
c.Header("Access-Control-Max-Age", "172800")
|
||||||
|
c.Header("Access-Control-Allow-Credentials", "true")
|
||||||
|
}
|
||||||
|
if method == "OPTIONS" {
|
||||||
|
c.JSON(200, "ok")
|
||||||
|
}
|
||||||
|
// 处理请求
|
||||||
|
c.Next()
|
||||||
|
}
|
||||||
}
|
}
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDA1NHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXyZp7R_7HdiX8UyxFTMz3PPRiS83yhpcaLmGMFD-L145A==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTU4Mjk5OHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUVBU0JoTnpnM056VXhOek0yTnpVMk9XWTBabVV6WlRnd01tRXdOMkk0Tm1KaU13RURNVEl6QWdzeE1qTTBRSEZ4TG1OdmJRZjh4TjlxaEFBPXzX2Hfpvc6Jpgio2o1bCyD8p5MlWNkPlboWDL4O92SG8w==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDA0OHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXx0YsVP0Bsx_UC-SMnT2H5sXa3Rv-emyNOprM7KTZO22g==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1Mjk3NTUwM3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18R_nBzwfvM0VB9HgjG3j_tOYrJh9OwzMtHi7AxxPqDG4=
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY3NDQ4NnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18aaWkxhTEgthoUKJ1GTlpyzmrevXI2QOM7XmE1f4Tws4=
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY3MzM5OXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18g3L0zUnti_MnEg_YIhPvXDONG7L4o30Yq1IHE4hKPzI=
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY2NTYyNnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXyEWhEqOaCFOXqnMIdP2SHN9WFhZxAjVudLfyUTS4zkfg==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDgyMXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXwtNDxPyD59Y9CBHfAh54_pGb0xED5BrnS12WfwMbrHxQ==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY2NTQ2M3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXyBdgjcvRGhK6JnTrLlQETdtrVHCfqXHN9UWI5yMVsMTg==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTU4MjEyNXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUVBU0JoTnpnM056VXhOek0yTnpVMk9XWTBabVV6WlRnd01tRXdOMkk0Tm1KaU13RURNVEl6QWdzeE1qTTBRSEZ4TG1OdmJRZjh4TjlxaEFBPXz6W0gwBf2X0RyprFJTaSBL1JLYgGYkXgcIh29Db_gJpw==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1Mjk3Mzc2OHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18ONHNYhjemKmcTQ56VURz0wNePYzECS31waCtlRhCu78=
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDk3M3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXyYBQByVjLbJZ2x4QafNqgpp-n6kCesEB6BNfoXvq-1ig==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDcxMHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXzPyoA6p6szfVSUU-zkLkOCK4zfP6gZq5orisMvUYEDuA==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTU3NDg2NnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUVBU0JoTnpnM056VXhOek0yTnpVMk9XWTBabVV6WlRnd01tRXdOMkk0Tm1KaU13RURNVEl6QWdzeE1qTTBRSEZ4TG1OdmJRZjh4TjlxaEFBPXy1hayYz7EXP5XMGKWMk_wssR8J1BlbjDrxaakLbTIh1Q==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY2NTYyMXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXx7IIV8mOmTS0o0qjO2cO8ESW-joxUKV1YJS3-WHMUsFw==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDYzOXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXwcSl56VFVQxQEhpD-LhkTqwgcmHgnPsmyT5kMXen_-1A==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY3NDA3NnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18EL_WCkeFjFbdJfyQGOSGVdIiX90CG6tvNZGdzl-mz2Y=
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTU3NDk0NnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUVBU0JoTnpnM056VXhOek0yTnpVMk9XWTBabVV6WlRnd01tRXdOMkk0Tm1KaU13RURNVEl6QWdzeE1qTTBRSEZ4TG1OdmJRZjh4TjlxaEFBPXyOhGtdUodGwIpp0X9-g40AHGjmu3wvk-AU00RFNBkUuA==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY3NDQ4OXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18eF3jTQqiTGwMrs-jtADV7OUSEV_wRzjg4EPnsC3tODw=
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MTEwMXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXz5N5DorLr_UFgR8-PWyhwNcuD4pxzodlbWGkz7ANTDeA==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDc0NnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXxXvX5_tBpv8gObNjrYH-KN7qp4tSGZ9725DdUo6qCe7g==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MTE0OHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXwcVGMp_v68wUnLRiSrd_xE_xurHal0es8Gxhq2FwOz4A==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY3MzkwNHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18rYkgKtXvBGRfxZ9HaRsSscZ2QAXjFu9Y9b1pwoeu-B0=
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDE0NXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXxt8__tXjZbcAc0ZhuT_1Ae991kPMs2j823Shb1IgUMhw==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDc0N3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXzQxs1oG1_iJaION26ztr96l3eyW0Bm6hvMT6X9wucpzw==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY3MzE2M3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18XfrVpy5QOn89OAXXX_p5Om024hdVvn9DzpOVBUOKfTc=
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDYzOXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXwcSl56VFVQxQEhpD-LhkTqwgcmHgnPsmyT5kMXen_-1A==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTU4MjE3OHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUVBU0JoTnpnM056VXhOek0yTnpVMk9XWTBabVV6WlRnd01tRXdOMkk0Tm1KaU13RURNVEl6QWdzeE1qTTBRSEZ4TG1OdmJRZjh4TjlxaEFBPXyzrYkoEMyAeckMlz8wT3gRi8kpbicHZdXjmaYCSYEbTQ==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1NDA3MzA5MHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT189JqRfiFtYh5iCXgmTfG1gTbmx1-nDGdxL99aHII06bM=
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY3NDA3N3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT188eytn4LgdEMhXv4tFo0JNWC070N3GUuIsRNEYTyvx5c=
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDcxMHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXzPyoA6p6szfVSUU-zkLkOCK4zfP6gZq5orisMvUYEDuA==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDE1MnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXzM8T4GoEMSqIe8zK2A6wn67v1nguMDHjUUo-yjKjNfcQ==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDM2MXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXx7XIYKo0HoZNY_DZVwi9ellyBp7o7V2gvM9Vb0pUli3Q==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDk3MnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXwR9evf4tXU9hUpH4hw_D6l7w4n0j-1Vf16locrZWzLFQ==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY3MzE2MnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18br434P_axalM2X4F6b6cEEkrCpk8OnhOsjp85410v0c=
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY2NTQ2MnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXyfWEkkjK48q8lwLJEJSc7cQXbRGdDabcUHO9FVZID_5w==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY0OTk3OHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXz0n4VX35X4e92mOLcdNVwHgoxgzHHGs7fSQ33yrgyMbA==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDM1M3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXzkpY_PPKBue5Qf7ZOP3tDQATS2rujJjRsNsVHTEL94lQ==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1Mjk3MTY3NHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT1808avPSF-CPY2M9KO1Gx-opThsHsrJxKGaUPR7BZp9WQ=
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDcxMHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXzPyoA6p6szfVSUU-zkLkOCK4zfP6gZq5orisMvUYEDuA==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTU3NzQwOXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUVBU0JoTnpnM056VXhOek0yTnpVMk9XWTBabVV6WlRnd01tRXdOMkk0Tm1KaU13RURNVEl6QWdzeE1qTTBRSEZ4TG1OdmJRZjh4TjlxaEFBPXwP-FCJdqMaFJIxqG_AYodOb2iE8gguAw2E3W5WVu4v8g==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY3NDE5MnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18gUD_A631PFOBncH-QOxKbkmt0xtW6Fgug3qcEUfijcA=
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MTEwMnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXxgHRdZoPZBE0kDMmtyHrzAaMfiKhlGdCF47u58n45cSw==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY3NDE5M3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18Cyx59YJB_tTb2EBULWXlfVECSpk1iqkG-odREjbKGsc=
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDcxMHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXzPyoA6p6szfVSUU-zkLkOCK4zfP6gZq5orisMvUYEDuA==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTU4MjQzNXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUVBU0JoTnpnM056VXhOek0yTnpVMk9XWTBabVV6WlRnd01tRXdOMkk0Tm1KaU13RURNVEl6QWdzeE1qTTBRSEZ4TG1OdmJRZjh4TjlxaEFBPXw8cY50NHs9S6zCZtQkXsjSnr7Wv1O2LJ1X2cLAjybXIA==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTU4MTg5MHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUVBU0JoTnpnM056VXhOek0yTnpVMk9XWTBabVV6WlRnd01tRXdOMkk0Tm1KaU13RURNVEl6QWdzeE1qTTBRSEZ4TG1OdmJRZjh4TjlxaEFBPXzKFszom5pRA96lq3Lb2fT6iDLQL1sguZ3xph75DDNpCQ==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MTE0OHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXwcVGMp_v68wUnLRiSrd_xE_xurHal0es8Gxhq2FwOz4A==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDgxOXxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXyD0OzJ2XvmQTfT3cln5USKo4wbM01lrwy_1tkmotJG-w==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY3NDE5M3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18Cyx59YJB_tTb2EBULWXlfVECSpk1iqkG-odREjbKGsc=
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY3MzQwNHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18UB3CM0FYHNdONL4rdGwb5t1aFPoJvD0sQsEEM4YJxHo=
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY1MDcxMHxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUVAtRVBRRUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdBPXzPyoA6p6szfVSUU-zkLkOCK4zfP6gZq5orisMvUYEDuA==
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY3MzkwM3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT184E0y_hLsOmZ_gsWkLUJ_O2Xo6AGbJfaUboiHww2JZoM=
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1MTY3MzMwM3xEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18XAWDOQNDSejAMWM96plPufODrSs0R38IJWaPlh7NpZc=
|
|
@@ -1 +0,0 @@
|
|||||||
MTY1Mjk3MjEwMnxEdi1CQkFFQ180SUFBUkFCRUFBQV84cl9nZ0FCQm5OMGNtbHVad3dHQUFSMWMyVnlFVzFoYVc0dVoyOHZkSGx3WlM1VmMyVnlfNE1EQVFFRVZYTmxjZ0hfaEFBQkRRRUNTVVFCQkFBQkJWUnZhMlZ1QVF3QUFRaFZjMlZ5Ym1GdFpRRU1BQUVJVUdGemMzZHZjbVFCREFBQkJVVnRZV2xzQVF3QUFRdEJabVpwYkdsaGRHbHZiZ0VNQUFFSFEyOTFiblJ5ZVFFTUFBRUhWMlZpYzJsMFpRRU1BQUVHU0dsa1pHVnVBUVFBQVFaQ1lXNXVaV1FCQkFBQkJsUmxZVzFKUkFFRUFBRUhRM0psWVhSbFpBRUVBQUVFVW05c1pRRUVBQUFBUXYtRVB3RUNBU0JqTjJVeU1EazBaRGxtTkRVd1ltVmhNak5tTURWa01HTmpZemszWldWaVpRRUVNVEl6TkFJS01USXpRSEZ4TG1OdmJRZjh4TjlxUmdFQ0FBPT18EA6m0QoNTA0TT7IkJ-AfPqtOHKKazFKMpf5FQI2Xr6A=
|
|
@@ -28,8 +28,6 @@ func Token() string {
|
|||||||
func Timestamp() int {
|
func Timestamp() int {
|
||||||
// time_zone := time.FixedZone("UTC", 0)
|
// time_zone := time.FixedZone("UTC", 0)
|
||||||
// t := time.Now().In(time_zone).Unix()
|
// t := time.Now().In(time_zone).Unix()
|
||||||
t := time.Now().Unix()
|
t := time.Now().UnixNano() / 1e6
|
||||||
return int(t)
|
return int(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -13,6 +13,31 @@ type ChallengeRequest struct {
|
|||||||
Visible int `json:"visible"`
|
Visible int `json:"visible"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ChallengeRequeststrings struct {
|
||||||
|
Name string `json:"name" binding:"required"`
|
||||||
|
Score int `json:"score" binding:"required"`
|
||||||
|
Flag string `json:"flag"` // 暂时一个题只能一个flag
|
||||||
|
Description string `json:"description"`
|
||||||
|
Attachment []string `json:"attachment"`
|
||||||
|
Category string `json:"category" binding:"required"`
|
||||||
|
Tags string `json:"tags"`
|
||||||
|
Hints []string `json:"hints"`
|
||||||
|
Visible string `json:"visible"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ChallengeRequest2 struct {
|
||||||
|
Id int `json:"id"`
|
||||||
|
Name string `json:"name" binding:"required"`
|
||||||
|
Score int `json:"score" binding:"required"`
|
||||||
|
Flag string `json:"flag"` // 暂时一个题只能一个flag
|
||||||
|
Description string `json:"description"`
|
||||||
|
Attachment []string `json:"attachment"`
|
||||||
|
Category string `json:"category" binding:"required"`
|
||||||
|
Tags string `json:"tags"`
|
||||||
|
Hints []string `json:"hints"`
|
||||||
|
Visible int `json:"visible"`
|
||||||
|
}
|
||||||
|
|
||||||
// NoticeRequest 定义新增公告的一个请求
|
// NoticeRequest 定义新增公告的一个请求
|
||||||
type NoticeRequest struct {
|
type NoticeRequest struct {
|
||||||
Title string `form:"title" json:"title" binding:"required"`
|
Title string `form:"title" json:"title" binding:"required"`
|
||||||
|
@@ -94,6 +94,48 @@ type PublicInfoResponse struct {
|
|||||||
Affiliation string `json:"affiliation"`
|
Affiliation string `json:"affiliation"`
|
||||||
Country string `json:"country"`
|
Country string `json:"country"`
|
||||||
TeamID int `json:"team_id"`
|
TeamID int `json:"team_id"`
|
||||||
|
Website string `json:"website"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// PublicAllInfoResponse 定义返回所有用户公开信息结构体 暂时不显示队伍名称
|
||||||
|
type PublicAllInfoResponse struct {
|
||||||
|
Id string `json:"id"`
|
||||||
|
Username string `json:"username"`
|
||||||
|
Affiliation string `json:"affiliation"`
|
||||||
|
Country string `json:"country"`
|
||||||
|
Website string `json:"website"`
|
||||||
|
TeamID string `json:"team_id"`
|
||||||
|
Hidden string `json:"hidden"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// AllInfoResponse 定义返回所有用户公开信息结构体
|
||||||
|
type AllInfoResponse struct {
|
||||||
|
Id string `json:"id"`
|
||||||
|
Username string `json:"username"`
|
||||||
|
Password string `json:"password"`
|
||||||
|
Email string `json:"email"`
|
||||||
|
Affiliation string `json:"affiliation"`
|
||||||
|
Country string `json:"country"`
|
||||||
|
Website string `json:"website"`
|
||||||
|
TeamID string `json:"team_id"`
|
||||||
|
Hidden string `json:"hidden"`
|
||||||
|
Banned string `json:"banned"`
|
||||||
|
Role string `json:"role"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// EditInfoRequest 定义修改用户信息的结构体
|
||||||
|
type EditInfoRequest struct {
|
||||||
|
Id string `json:"id"`
|
||||||
|
Username string `json:"username"`
|
||||||
|
Password string `json:"password"`
|
||||||
|
Email string `json:"email"`
|
||||||
|
Affiliation string `json:"affiliation"`
|
||||||
|
Country string `json:"country"`
|
||||||
|
Website string `json:"website"`
|
||||||
|
TeamID int `json:"team_id"`
|
||||||
|
Hidden string `json:"hidden"`
|
||||||
|
Banned string `json:"banned"`
|
||||||
|
Role string `json:"role"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ChallengeResponse 定义获取题目的一个响应。
|
// ChallengeResponse 定义获取题目的一个响应。
|
||||||
@@ -122,3 +164,12 @@ type StudentsOrOthersInfoResponse struct {
|
|||||||
IDOrEmail string `json:"id_email"`
|
IDOrEmail string `json:"id_email"`
|
||||||
QQ string `json:"qq"`
|
QQ string `json:"qq"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateUserInfoResponse 定义更新用户信息的响应
|
||||||
|
type UpdateUserInfoRequest struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Email string `json:"email"`
|
||||||
|
Country string `json:"country"`
|
||||||
|
Website string `json:"website"`
|
||||||
|
Affiliation string `json:"affiliation"`
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user