;; stacks-mfers

(impl-trait 'SP2PABAF9FTAJYNFZH93XENAJ8FVY99RRM50D2JG9.nft-trait.nft-trait)
;; (impl-trait .nft-trait.nft-trait)

(define-non-fungible-token stacks-mfers uint)

;; Constants
(define-constant DEPLOYER tx-sender)
(define-constant COMM u100000)
(define-constant COMM-ADDR-ONE 'SPJW1XE278YMCEYMXB8ZFGJMH8ZVAAEDP2S2PJYG)

(define-constant ERR-NO-MORE-NFTS u100)
(define-constant ERR-NOT-ENOUGH-PASSES u101)
(define-constant ERR-PUBLIC-SALE-DISABLED u102)
(define-constant ERR-CONTRACT-INITIALIZED u103)
(define-constant ERR-NOT-AUTHORIZED u104)
(define-constant ERR-INVALID-USER u105)
(define-constant ERR-LISTING u106)
(define-constant ERR-WRONG-COMMISSION u107)
(define-constant ERR-NOT-FOUND u108)
(define-constant ERR-PAUSED u109)
(define-constant ERR-MINT-LIMIT u110)
(define-constant ERR-METADATA-FROZEN u111)
(define-constant ERR-NO-MORE-MINTS u113)

;; Internal variables
(define-data-var mint-limit uint u4269)
(define-data-var last-id uint u1)
(define-data-var total-price uint u6900000)
(define-data-var artist-address principal 'SP2N3BAG4GBF8NHRPH6AY4YYH1SP6NK5TGCY7RDFA)
(define-data-var ipfs-root (string-ascii 80) "ipfs://QmaejQXudVNHxyubms1jiSs6gRNUukPbM4Yj4WWLGwesKN/")
(define-data-var mint-paused bool false)
(define-data-var premint-enabled bool true)
(define-data-var sale-enabled bool false)
(define-data-var metadata-frozen bool false)
(define-data-var mint-cap uint u0)

(define-map mints-per-user principal uint)
(define-map mint-passes principal uint)

(define-public (claim)
  (mint (list true))
)

(define-public (claim-five)
  (begin
    (try! (mint (list true true true true true)))
    (mint-many (list true) false)
  )
)

(define-public (claim-ten)
  (begin
    (try! (mint (list true true true true true true true true true true)))
    (mint-many (list true true true) false)
  )
)

(define-public (claim-twenty-five)
  (begin
    (asserts! (var-get sale-enabled) (err ERR-PUBLIC-SALE-DISABLED))
    (try! (mint (list true true true true true true true true true true true true true true true true true true true true true true true true true)))
    (mint-many (list true true true true true true true true true true) false)
  )
)

;; Mintpass Minting
(define-private (mint (orders (list 25 bool)))
  (let (
    (passes (get-passes tx-sender))
  )
    (if (var-get premint-enabled)
      (begin
        (asserts! (>= passes (len orders)) (err ERR-NOT-ENOUGH-PASSES))
        (asserts! (<= (var-get last-id) u3579) (err ERR-NO-MORE-NFTS))
        (map-set mint-passes tx-sender (- passes (len orders)))
        (mint-many orders true)
      )
      (begin
        (asserts! (var-get sale-enabled) (err ERR-PUBLIC-SALE-DISABLED))
        (mint-many orders true)
      )
    )
  )
)

(define-private (mint-many (orders (list 25 bool )) (paid bool))
  (let (
    (last-nft-id (var-get last-id))
    (enabled (asserts! (<= last-nft-id (var-get mint-limit)) (err ERR-NO-MORE-NFTS)))
    (art-addr (var-get artist-address))
    (id-reached (fold mint-many-iter orders last-nft-id))
    (price (* (var-get total-price) (- id-reached last-nft-id)))
    (current-balance (get-balance tx-sender))
    (total-artist (- price COMM))
    (capped (> (var-get mint-cap) u0))
    (user-mints (get-mints tx-sender))
  )
    (asserts! (or (not (var-get mint-paused)) (is-eq tx-sender DEPLOYER)) (err ERR-PAUSED))
    (asserts! (or (not capped) (is-eq tx-sender DEPLOYER) (is-eq tx-sender art-addr) (>= (var-get mint-cap) (+ (len orders) user-mints))) (err ERR-NO-MORE-MINTS))
    (map-set mints-per-user tx-sender (+ (len orders) user-mints))
    (if (or (is-eq tx-sender art-addr) (is-eq tx-sender DEPLOYER) (is-eq (var-get total-price) u0000000))
      (begin
        (var-set last-id id-reached)
        (map-set token-count tx-sender (+ current-balance (- id-reached last-nft-id)))
      )
      (begin
        (var-set last-id id-reached)
        (map-set token-count tx-sender (+ current-balance (- id-reached last-nft-id)))
        (if paid
          (begin
            (try! (stx-transfer? total-artist tx-sender (var-get artist-address)))
            (try! (stx-transfer? COMM tx-sender COMM-ADDR-ONE))
          )
          true
        )
      )
    )
    (ok id-reached)
  )
)

(define-private (mint-many-iter (ignore bool) (next-id uint))
  (if (<= next-id (var-get mint-limit))
    (begin
      (unwrap! (nft-mint? stacks-mfers next-id tx-sender) next-id)
      (+ next-id u1)
    )
    next-id
  )
)

(define-public (set-artist-address (address principal))
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-INVALID-USER))
    (ok (var-set artist-address address))
  )
)

(define-public (set-price (price uint))
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-INVALID-USER))
    (ok (var-set total-price price))
  )
)

(define-public (toggle-pause)
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-INVALID-USER))
    (ok (var-set mint-paused (not (var-get mint-paused))))
  )
)

(define-public (set-mint-limit (limit uint))
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-INVALID-USER))
    (asserts! (< limit (var-get mint-limit)) (err ERR-MINT-LIMIT))
    (ok (var-set mint-limit limit))))

(define-public (burn (token-id uint))
  (begin 
    (asserts! (is-owner token-id tx-sender) (err ERR-NOT-AUTHORIZED))
    (nft-burn? stacks-mfers token-id tx-sender)))

(define-private (is-owner (token-id uint) (user principal))
    (is-eq user (unwrap! (nft-get-owner? stacks-mfers token-id) false)))

(define-public (set-base-uri (new-base-uri (string-ascii 80)))
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-NOT-AUTHORIZED))
    (asserts! (not (var-get metadata-frozen)) (err ERR-METADATA-FROZEN))
    (var-set ipfs-root new-base-uri)
    (ok true)))

(define-public (freeze-metadata)
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-NOT-AUTHORIZED))
    (var-set metadata-frozen true)
    (ok true)))

;; Non-custodial SIP-009 transfer function
(define-public (transfer (id uint) (sender principal) (recipient principal))
  (begin
    (asserts! (is-eq tx-sender sender) (err ERR-NOT-AUTHORIZED))
    (asserts! (is-none (map-get? market id)) (err ERR-LISTING))
    (trnsfr id sender recipient)))

;; read-only functions
(define-read-only (get-owner (token-id uint))
  (ok (nft-get-owner? stacks-mfers token-id)))

(define-read-only (get-last-token-id)
  (ok (- (var-get last-id) u1)))

(define-read-only (get-token-uri (token-id uint))
  (ok (some (concat (concat (var-get ipfs-root) "{id}") ".json"))))

(define-read-only (get-paused)
  (ok (var-get mint-paused)))

(define-read-only (get-price)
  (ok (var-get total-price)))

(define-read-only (get-mints (caller principal))
  (default-to u0 (map-get? mints-per-user caller)))

(define-read-only (get-mint-limit)
  (ok (var-get mint-limit)))

;; Non-custodial marketplace extras
(define-trait commission-trait
  ((pay (uint uint) (response bool uint))))

(define-map token-count principal uint)
(define-map market uint {price: uint, commission: principal})

(define-read-only (get-balance (account principal))
  (default-to u0
    (map-get? token-count account)))

(define-private (trnsfr (id uint) (sender principal) (recipient principal))
  (match (nft-transfer? stacks-mfers id sender recipient)
    success
      (let
        ((sender-balance (get-balance sender))
        (recipient-balance (get-balance recipient)))
          (map-set token-count
            sender
            (- sender-balance u1))
          (map-set token-count
            recipient
            (+ recipient-balance u1))
          (ok success))
    error (err error)))

(define-private (is-sender-owner (id uint))
  (let ((owner (unwrap! (nft-get-owner? stacks-mfers id) false)))
    (or (is-eq tx-sender owner) (is-eq contract-caller owner))))

(define-read-only (get-listing-in-ustx (id uint))
  (map-get? market id))

(define-public (list-in-ustx (id uint) (price uint) (comm-trait <commission-trait>))
  (let ((listing  {price: price, commission: (contract-of comm-trait)}))
    (asserts! (is-sender-owner id) (err ERR-NOT-AUTHORIZED))
    (map-set market id listing)
    (print (merge listing {a: "list-in-ustx", id: id}))
    (ok true)))

(define-public (unlist-in-ustx (id uint))
  (begin
    (asserts! (is-sender-owner id) (err ERR-NOT-AUTHORIZED))
    (map-delete market id)
    (print {a: "unlist-in-ustx", id: id})
    (ok true)))

(define-public (buy-in-ustx (id uint) (comm-trait <commission-trait>))
  (let ((owner (unwrap! (nft-get-owner? stacks-mfers id) (err ERR-NOT-FOUND)))
      (listing (unwrap! (map-get? market id) (err ERR-LISTING)))
      (price (get price listing)))
    (asserts! (is-eq (contract-of comm-trait) (get commission listing)) (err ERR-WRONG-COMMISSION))
    (try! (stx-transfer? price tx-sender owner))
    (try! (contract-call? comm-trait pay id price))
    (try! (trnsfr id owner tx-sender))
    (map-delete market id)
    (print {a: "buy-in-ustx", id: id})
    (ok true)))

;; Extra functionality required for mintpass
(define-public (toggle-sale-state)
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-NOT-AUTHORIZED))
    (var-set premint-enabled false)
    (var-set sale-enabled (not (var-get sale-enabled)))
    (ok true)
  )
)

(define-public (enable-premint)
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-NOT-AUTHORIZED))
    (ok (var-set premint-enabled true))
  )
)

(define-public (disable-premint)
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-NOT-AUTHORIZED))
    (ok (var-set premint-enabled false))
  )
)

(define-read-only (get-passes (caller principal))
  (default-to u0 (map-get? mint-passes caller))
)

(define-public (add-passes (recipient { caller: principal, amount: uint }))
  (let (
    (passes (get-passes (get caller recipient)))
  )
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-NOT-AUTHORIZED))
    (map-set mint-passes (get caller recipient) (+ passes (get amount recipient)))
    (ok true)
  )
)

(define-public (bulk-add-passes (recipients (list 200 { caller: principal, amount: uint })))
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-NOT-AUTHORIZED))

    (map add-passes recipients)
    (ok true)
  )
)

(define-read-only (get-premint-enabled)
  (ok (var-get premint-enabled))
)

(define-read-only (get-sale-enabled)
  (ok (var-get sale-enabled))
)

(map-set mint-passes 'SP3VCX5NFQ8VCHFS9M6N40ZJNVTRT4HZ62WFH5C4Q u80)
(map-set mint-passes 'SP27A09VG1SH1J8Z76NXHBGKB0ZWSBZ99DRGAC8NB u80)
(map-set mint-passes 'SP17YP1HGWK7DP5Q69GRG14W34E078S4D78YM1FA5 u80)
(map-set mint-passes 'SPYF9PC72BSWS0DGA33FR24GCG81MG1Z96463H68 u80)
(map-set mint-passes 'SP1TAS8DAT68SRNCKP2N0DBTQA8SHMAW4D5P50XHV u80)
(map-set mint-passes 'SPP3HM2E4JXGT26G1QRWQ2YTR5WT040S5NKXZYFC u80)
(map-set mint-passes 'SP3RBMGTRD92F0S8DTDJ4FVP3D76SM4A27EV93106 u80)
(map-set mint-passes 'SP31WTJ415SNJM9H6202S3WK9AFQXQZMT48PESBQE u80)
(map-set mint-passes 'SP2DW9RTN82J2MR2FHQXY5EE0Y616JJ076RYG8PTY u80)
(map-set mint-passes 'SP2Q1SZSETS27AZ9FE0BH6C6B7MVC25E4N6C2VE7D u80)
(map-set mint-passes 'SP341V840N8K6S0C1N3XVKW7V8ZJGF8W70TYZ57HP u80)
(map-set mint-passes 'SP3Y07R709JXM8TCP5F9PZ41R11Q84FZ69EJ0M59R u80)
(map-set mint-passes 'SP2BEFSB43KR4M6C9117SA2A6T4SA6H0X1XDZF716 u80)
(map-set mint-passes 'SP1P480VM909QSRMVGSZYKVWWXGWAKC9B69GXW3YF u80)
(map-set mint-passes 'SPHWY482ANTWNTW2618HYHQSDY1WCW7P20BW5F7Y u80)
(map-set mint-passes 'SPAX2SZCDFTVV76SR4JY4RYEPC5PBH2QAHEJXHTF u80)
(map-set mint-passes 'SP30KD0JV9B3XX6DSPXSH90J621R7VBSSY2GNBC26 u80)
(map-set mint-passes 'SP5NSFTWED17R0HG8K44YBS4QZ3WW1N9WXGA167P u80)
(map-set mint-passes 'SP36KZRX2ET7W215D568EDTA4A392EWN14FT12TAN u80)
(map-set mint-passes 'SPHK8A7P61C6ASWKYDX1PCDX9YA54DKVJN49EXGJ u80)
(map-set mint-passes 'SP31HWJGNYAJ6RP5XCGMJBZDW8SMWHGNZQ915NKM u80)
(map-set mint-passes 'SP3BTCK8ES8KD53Y08W5E3YHS9B48EDWS551XH2NN u80)
(map-set mint-passes 'SP10Z6DJGS4M0KR0B736A8ZGSH5R88PZRX27CWK0S u80)
(map-set mint-passes 'SPMQAMQP7SD25HRENNHHRK38PY5M2AE6SWVZVY56 u80)
(map-set mint-passes 'SP3D5HNRZQDKYS3RRFSCZ33MZ0MH0FCYNMVRV3AWJ u80)
(map-set mint-passes 'SP1MX3R99FENJJJVKW27DSA6X2M6SDSVJH4Y0HE23 u80)
(map-set mint-passes 'SP1BQ7DPAD30SNTB65F0Y707NJHRW8WX67MC0ESM u80)
(map-set mint-passes 'SP12YGGACNA4R43DB1HAQ3AE03PKPJGXZ1BX96CYB u80)
(map-set mint-passes 'SPS46Q8P75FGWDX11JNVER71R90VD5MV45XA5X1B u80)
(map-set mint-passes 'SPK8X4P1YWBVHHZFTSZNXN4SVYCGY7B0PYYYB682 u80)
(map-set mint-passes 'SP3VSAPW1HK102DAQ3CYGFKH9N9CP0CWPD14PN5T2 u80)
(map-set mint-passes 'SP71N7X6G8KYGQPHZW7TB4PD1JZ6ND9AESF9JPZ8 u80)
(map-set mint-passes 'SP3W5KN5XC7RQ5M0TMFGEZANE4P80Z7KQF1PJJB55 u80)
(map-set mint-passes 'SP2WFY0H48AS2VYPA7N69V2VJ8VKS8FSPQSPJDSDN u80)
(map-set mint-passes 'SP1QDGMK42YYKT1AM2QT9B200P3D7SWSKW1888CPM u80)
(map-set mint-passes 'SP329G766AV8Z01X9EEAHPDQ4WDJXT2A0XB383MGP u80)
(map-set mint-passes 'SP25GGWDPFJ7WCGC6YB5ZSX2C4DBP4V74R386AX69 u80)
(map-set mint-passes 'SP228WEAEMYX21RW0TT5T38THPNDYPPGGVW2RP570 u80)
(map-set mint-passes 'SP2AVGX0DR4DACDBZABMFBRY34WJ0MBW1RVCPW3DV u80)
(map-set mint-passes 'SPM1Q7YG18378H6W254YN8PABEVRPT38ZCY01SJD u80)
(map-set mint-passes 'SPSG97KXE3GHAAK2TMFC9VKE9KB0JBM47YY84Y8C u80)
(map-set mint-passes 'SP3AQSW210PFW6K3FB1JW62ZHTH11FSVR0SH5AZ6P u80)
(map-set mint-passes 'SP3P8M5J25457Q73MKS8EGD5Z19Z57RKYSPNEAK85 u80)
(map-set mint-passes 'SP3P9DZF3QT3EAK4AB9SNC2PYKBY4DDYSFZ093F79 u80)
(map-set mint-passes 'SPK81ZM7GY9EHDHRE1661F4ZM1V6R413TP71N58W u80)
(map-set mint-passes 'SP1FR2M102H4DE4DH96R4D29RC8AGQZG5D5Y4S7CH u80)
(map-set mint-passes 'SP3V4EW5NP0TQVN3TJFAK9H4NC8MKEYHH88FQBMQP u80)
(map-set mint-passes 'SP19KPWZDPBD13N07C7Q1BENQMEPRTNA6J6ACBJB3 u80)
(map-set mint-passes 'SPSS7WAYA17Y8Z5Q6GJTMH4FH4MRJ7HZZ6JPGAGR u80)
(map-set mint-passes 'SP3ZAZ6K5X8QHTKYN22E3EFEBMNT7FTS42681WMZ4 u80)
(map-set mint-passes 'SP9227STGNCZPRTP2T2G3S02M7XB5ENAQB1J82FA u80)
(map-set mint-passes 'SP2Z4GMM1KM7KEZEX112A9MPKE1MDDQ9W6PGTMAC3 u80)
(map-set mint-passes 'SP143YHR805B8S834BWJTMZVFR1WP5FFC03WZE4BF u80)
(map-set mint-passes 'SPJM94R5WR9BT0HR9HWTBK3A2JPS06V3PHCP8M01 u80)
(map-set mint-passes 'SP2QYM8M2MFQ1DKPEVZ8QT9VNBXYEMGW0Z308A8Y3 u80)
(map-set mint-passes 'SP282NE79YNR434627WPP4XPHCJQS2D0R3ADSWKTR u80)
(map-set mint-passes 'SP2X1GD24FA3TGGV6T4TRPKT8MVZ8F02RZESYWEH5 u80)
(map-set mint-passes 'SP2JS9HG5QCBFKHWN8F0GH2CR2ESRC8Z6BJT93SVG u80)
(map-set mint-passes 'SP1HFQ1ZXEXNQE45RVKK15QXXFXCY17NDV3D0CRVN u80)
(map-set mint-passes 'SPJRW4D4JACQQQQ5DK09P1K7M2TE8PGZJ638HCW1 u80)
(map-set mint-passes 'SPXZ5BC6FGJ1TDB2Q294X4786CFWVG3399ERQZNQ u80)
(map-set mint-passes 'SP3HQTTXZR8QGEZFK1T1Z24A48N8W52FMRA9SMCNV u80)
(map-set mint-passes 'SP197GMEG6WGBRDTCTGGWMRA1G77E65TRXWYKGCT7 u80)
(map-set mint-passes 'SPS2FZ3K6N2CZPBM4BSQCEQV23V2334E7MJ4CHZT u80)
(map-set mint-passes 'SP3Z1PXX27M2W46GG4BBKN1XRJH3WSW186HN9JNF3 u80)
(map-set mint-passes 'SPV00QHST52GD7D0SEWV3R5N04RD4Q1PMA3TE2MP u80)
(map-set mint-passes 'SP19BP5KSGS0PS6W2NNP9REBNR8DVWJC2B73VNKV3 u80)
(map-set mint-passes 'SP1PCEAP62X5BZSMH257ZHAPGAPSX3BDT3TDVCN4M u80)
(map-set mint-passes 'SP1934QK1ZXGCEBB3MN9Y0FNR20GMDWM3Y5P5VV5 u80)
(map-set mint-passes 'SP3ZTYBN9PYVVFKBEFVSZ2BEGK3HXRNVP6FDG79WV u80)
(map-set mint-passes 'SP1DMPD0JNAVDRCTY17S2MNHX8F6502NB0Z25RVR u80)
(map-set mint-passes 'SP2HMF06X2G5YK7HSERXX8HDX9MWQZS429EYN3G81 u80)
(map-set mint-passes 'SPW7NWT7YYH3GGDR74F1A2RXETNBB11FCGH1RVJC u80)
(map-set mint-passes 'SP3TZF64TY080GVMZRT4Z87E383Q8EAKZ5W67FCNY u80)
(map-set mint-passes 'SP1JF9VSNJBP4YZVC7AJ9CE6CXBD2ZV0W67T0E4T0 u80)
(map-set mint-passes 'SPHJXDEQ89DSTMP45CG3RQCCYCDYMMVEV43CWQPS u80)
(map-set mint-passes 'SPCXZMB170SEXX2HEK510GBFZ88N4VNYP6ZMRNEX u80)
(map-set mint-passes 'SP158378PVRA077MC9851WTVSF7G3MES99HPJ26DW u80)
(map-set mint-passes 'SPFQCHZHAMFCZKB89350M961XRSB73QF1EXMVB3H u80)
(map-set mint-passes 'SP193B6A8GMXNFEH3WWCQC22QYYNSPHJTSGM80ZWY u80)
(map-set mint-passes 'SP14E544B2FY8BSKTV5V7W8NCRYX2B7NXRQ7B7NJ9 u80)
(map-set mint-passes 'SPSMJE6H7YH9RWWXHC98YHHN26F95EWQJ0TWJ4JF u80)
(map-set mint-passes 'SP3KTNQFHQ4N5DH40F1164TGYMX3QG2N8NA5VKN4X u80)
(map-set mint-passes 'SPN6VDWZJZC9FM1N5Q94B823FP52GB1JZGHB8W8 u80)
(map-set mint-passes 'SP2X34DKSHEBRP2DYQE3V7RGCHBXHZFZWQJR1VD5S u80)
(map-set mint-passes 'SP1ZMZC1963DA6DN9MY9SYTBSREPFZ274B16APGZY u80)
(map-set mint-passes 'SP1ZHVKGVT1KZETT4J9CGYXZE9D20N375V4M323SQ u80)
(map-set mint-passes 'SP2RQXNR5Z9W4TW0TH9Y0FJEY19F61G1SD726AV9H u80)
(map-set mint-passes 'SP1KBVBP3AZP7YA968Y3G14A17P9XXFPBPEVF5EG9 u80)
(map-set mint-passes 'SP2PBW5WPNJ88BZVNDVP4KCTN9HJGNNR1BQA6G1W6 u80)
(map-set mint-passes 'SP24ZBZ8ZE6F48JE9G3F3HRTG9FK7E2H6K2QZ3Q1K u80)
(map-set mint-passes 'SP12BEEDG31J0AH68DFDJJYZ36D002PKDZCP1DZQE u80)
(map-set mint-passes 'SP2F18PH7FP22EHS0J0X3A6EFZ9PAW0EZJRET0GXZ u80)
(map-set mint-passes 'SPT8MA3H81X02BKEFX2WF7FJKV2G1FZX1SFR6HX2 u80)
(map-set mint-passes 'SP2NHZDAMMEEASE4DKHYYCVAG8RF8PA7YHPPW40BX u80)
(map-set mint-passes 'SP3GG2XRSX2APJ1JFWV2A3KFEJPAJ5X8JGDXTSF1N u80)
(map-set mint-passes 'SP13NK68ADVWYDZM2GZCNF0ZCFMCYAYGCTK22YE6T u80)
(map-set mint-passes 'SP2RKVC8PYANWJ40VSRCK2K935HSN4H0AHTVHD73D u80)
(map-set mint-passes 'SP3M16X85R7ED2RR70ANNB3X0HXPHGSAXBEGGZKK0 u80)
(map-set mint-passes 'SP1XZ7KEMJT5V8ATRYZB0XWJ20KMGM37JXJZG9D6S u80)
(map-set mint-passes 'SP3HXZSBYYAE8PJR8P0VVX4HV128NBYB2T6XJ89N8 u80)
(map-set mint-passes 'SP3G9BMCJ0858Y68MM35R6HA0WAZDNYXWZBN4RYK1 u80)
(map-set mint-passes 'SP3BJ4GDXYMBRS42NJNVE271YPAPYTF28T9722GHJ u80)
(map-set mint-passes 'SP2Q1SZSETS27AZ9FE0BH6C6B7MVC25E4N6C2VE7D u80)
(map-set mint-passes 'SP3NH76GQ6M070SEMXE1PHM1GW9A5GKTJME2S8Y4H u80)
(map-set mint-passes 'SP3MPTWZFFS12C2GKSABZVAMY7NEBCWG2JAYRB7W3 u80)
(map-set mint-passes 'SP511JC9NAVZKYJ0N3QY58RX38V3BX6XGHXJME7B u80)
(map-set mint-passes 'SP1MKM54044H7323201NP14ZKX0AKJ1X8MQ1VM11Z u80)
(map-set mint-passes 'SP3GC5V090ST0P70Z4B6EED42VPGB58NCMPFJZWCE u80)
(map-set mint-passes 'SP2GYREEJC2DQJAWCXHKJ4A761Q5SZSXHA97ZSGSY u80)
(map-set mint-passes 'SP1GV16H3B3JA72X496VEPX5FFHD0F97RMX8DCX2J u80)
(map-set mint-passes 'SP1C903MTS21WC62N94YMQNC76KN58DHGECRH6YNP u80)
(map-set mint-passes 'SP2F0DP9Z3KSS0DABDBJN0DA0SHMCVWHXPVTH3PJJ u80)
(map-set mint-passes 'SP27YT7KEJVM3857RCQKCQBHHEEMP0TFEFNC46SY4 u80)
(map-set mint-passes 'SP3H0V9GZ4G82RS9NW1PNVX5HEDGGNQVD98ATVWC2 u80)
(map-set mint-passes 'SP6Y9FQ6HE0HZ4G5XVT9PG0XZJJM2WWN0SXCY8YV u80)
(map-set mint-passes 'SP9XD6041FFN5BW6ZR9J3FSESR4S442JPYZJVXBW u80)
(map-set mint-passes 'SP11VHKTCP1SKHDA46TK2ZNYA615SEADSMYXWKEW5 u80)
(map-set mint-passes 'SP1N0XSXFKZRSJ6KD3XZC12ZW6KDHJM8WHPVG02P1 u80)
(map-set mint-passes 'SP2ZMRSTXFY0N3PB5XE4S0NN4QE29ABRYSAR69Y70 u80)
(map-set mint-passes 'SP1MBSXJKV1HP4JG4S1CVAAXC20YWD9KQMZRT1RDJ u80)
(map-set mint-passes 'SP2E442BGYJFWEKZN3F33J6SHB86ZZF75HTV5EVKW u80)
(map-set mint-passes 'SP2DQ2RN67JP4DENF3HZAKGT0CWNNBCCXR5WWEA9V u80)
(map-set mint-passes 'SP3NR3X1JZWQCGMBKF4JC07FDE8BV85J69XWXR0ZB u80)
(map-set mint-passes 'SP1VFZQJ7ZS9B1CDD1S7WZJR3VATM3DN490PCPFV8 u80)
(map-set mint-passes 'SP3HHSDMT76FTYZF4FCWEKZQ6DCHVHNTPW710Y7WX u80)
(map-set mint-passes 'SP2SSHB97XMYR9PH62VKN3369EFA1G1EJH8Y0RKT0 u80)
(map-set mint-passes 'SPRDFS6WQPV400E1BCGV5VJEEENVH5G852G0ASPA u80)
(map-set mint-passes 'SP1S3BN5CYWGT0WB15VPYV09G9H347WEK5RFCFHKC u80)
(map-set mint-passes 'SP2Y8ET85MSXRQFH3GGAKQ3HQGGASFAVWHJ3JM1R5 u80)
(map-set mint-passes 'SPGY7AVJDPJF885YEM242RVR9JGMJS2QEPR1D256 u80)
(map-set mint-passes 'SP3QWFPCVHY10V3MNTTC8385J3KYQG9AR698AQF44 u80)
(map-set mint-passes 'SP2W03GE8Y6PJQF97MF0BQZPPG9PE58ZVVFTC9FPY u80)
(map-set mint-passes 'SP3SKH6YB515J76KVDHDHBTE2GQ4CV6QJHC5GJKRF u80)
(map-set mint-passes 'SP2K75ZZNDBJN1YZXBE19FYZNCAY28AM817S78T7G u80)
(map-set mint-passes 'SP38Z9JA0Q1ZXBN3DPH9SD9AN8RE2MMPZV8D2DVX u80)
(map-set mint-passes 'SP1SSXNBGTBVC53EWXYJSESDGN2ARMJ7DS5W8XMPG u80)
(map-set mint-passes 'SPSGP0XHF7VFJQ5193N2SV9MY87EWGVJXAZK35K2 u80)
(map-set mint-passes 'SPP6TX1NNVT34BTJT275VK1VSGB6R5TZJ5V397TR u80)
(map-set mint-passes 'SP1NW8Q0CTAP9BDCBB0KWC1K5Q0W4JDDS674RGRCR u80)
(map-set mint-passes 'SP2YH9A4K2EH3ZE4JCBH8NREHP5DT49HK812AH6G6 u80)
(map-set mint-passes 'SP1J63RCSAMFBMW644JMVFMBSRH8K4MZA4JJ8TWKT u80)
(map-set mint-passes 'SP2EM89BNDSKWZ7QFFXC5QMGS7BVRW8X32BGT7DDY u80)
(map-set mint-passes 'SP1PH0715GQ09RT366EE916Y35QRMYNBSDZYQAE9M u80)
(map-set mint-passes 'SP319KTCMWJP9R2W348K1TNPDPWDV2493SQZRJYPH u80)
(map-set mint-passes 'SP3JY50Q81ZRBJR4YXY1ZD37WS0QCHWZDXC82PYN6 u80)
(map-set mint-passes 'SP3F0GZC9WG53MH7SHMFVSM54XKNNHQXJ8Q301GQ7 u80)
(map-set mint-passes 'SPJ5FPS8528408JFXM84RYTNN8P5VWFN259F05HP u80)
(map-set mint-passes 'SPTJN6XF3S3KMJ02HH516C91KD4XMX23BBMKNVAP u80)
(map-set mint-passes 'SP15TF0R1GCEFA84WSSRFPWM8XDQSQAJN7QAB31BE u80)
(map-set mint-passes 'SP3MWVZRNQNCBR4G19Y22W5XWPCVC5HE72J4S759X u80)
(map-set mint-passes 'SP1MFKG17M5H4GWAFPETN5A7P8ZJ8BTVMGJBCSS4Y u80)
(map-set mint-passes 'SP24H05W2A51Z3EFT7HGSMAT33PHK4CM29DCS0QG u80)
(map-set mint-passes 'SP2EX049X0RKW217YF9MPQRP32TCDKW1TYTWWT77 u80)
(map-set mint-passes 'SP2MNWP95P23PCBAK8RF7Y1N0Z28JDYMFHGB4A1YF u80)
(map-set mint-passes 'SP2H15M15GTJJR4BWKP948JEYSS8G7H599E11GHA6 u80)
(map-set mint-passes 'SP1E57Z5HCWT49K63MA6KJRPAWNEPWJ7EEC964H3T u80)
(map-set mint-passes 'SP17Z8PH3FQ0KHKEFZF6Q1MD01418T1R83DF5RWC9 u80)
(map-set mint-passes 'SP2VT38EC8AKQ9YB4F7M9MV3Y6JK610PVFE991SC0 u80)
(map-set mint-passes 'SP26ZSXREMGCD8M71Y4FVA17QBC42EV0VM3HPVXYQ u80)
(map-set mint-passes 'SP6SSMC628J3GD0RVGJFVNRNFAPZD37GMBJ6TYMD u80)
(map-set mint-passes 'SPA0SZQ6KCCYMJV5XVKSNM7Y1DGDXH39A11ZX2Y8 u80)
(map-set mint-passes 'SP2NJPP0AKBT7ZV9244ZFER0XQ7XYEWJ0M5CKZ4DT u80)
(map-set mint-passes 'SPP5KZXDTQKQ9E3QEDYCF4H7A1WSXSBCPZ9J4WRH u80)
(map-set mint-passes 'SP1MTA5TQCTXVFXP2BKVNJCF3PYVQX43GYQT1N0P0 u80)
(map-set mint-passes 'SP30MF77C6JGJGAZKTQBKKJA43K2E33NPZJ74DBJS u80)
(map-set mint-passes 'SP3TMGZ7WTT658PA632A3BA4B1GRXBNNEN8XPZQ5X u80)
(map-set mint-passes 'SP1FZ16BDN8VTMW1DVGQ0DJS4PBZ6TK0H1Y2YGPET u80)
(map-set mint-passes 'SP304SJ7WSZDJ5WMJJ3KK45VQZ3M17P36T1K46FX u80)
(map-set mint-passes 'SPTEANBR2BHAYP085C7WTBZJ1J8932WNFRDEW9A6 u80)
(map-set mint-passes 'SP2MN9BT5230AM8YPXK4JVYRMAXJ6G3VZ206ZS8X1 u80)
(map-set mint-passes 'SP36ZVPCKJTV2QNZYBSN4TQ4T6A1T5DJH6XDSPMCA u80)
(map-set mint-passes 'SP84YDY1N5XKS7R927TYWE89HSD2TY3TV85773ZP u80)
(map-set mint-passes 'SP31RZAPEZW65TV9P1TTEJ4BGQATN0N04FK5991WP u80)
(map-set mint-passes 'SP1QFB0WFWT7S63RQ8C34GCC1TTTWG2JV6NAFS6MT u80)
(map-set mint-passes 'SP21Q7X7CC354SR0PHANAF9M0XV6H77JN4QC2GW8M u80)
(map-set mint-passes 'SP2NYTQWKMJGR86FN9GQMRBF9FGEFXB0PV6BXWS32 u80)
(map-set mint-passes 'SP3PCASWH8HEZNCDM318SPEG1Q8TYWQ3NS73ABT8Y u80)
(map-set mint-passes 'SPYYBJXVKB214QG4TDDGWDN8M5CA4NQX2540HQFM u80)
(map-set mint-passes 'SP2S1YB8NV29SJ0XJ6G7EQK3P5HDEQD1EAV75ZXGF u80)
(map-set mint-passes 'SP3T17DDJDTQHY519ZPQVP0TG65M22B7QMD8DSS7F u80)
(map-set mint-passes 'SP3CW7TC10NY7BFC53MJJZ1NQ12P4NGSBM90SH7Z8 u80)
(map-set mint-passes 'SPV00QHST52GD7D0SEWV3R5N04RD4Q1PMA3TE2MP u80)
(map-set mint-passes 'SP1ZQSWQ9QNNW388VFG45HYX1H592147V2FZZJY8V u80)
(map-set mint-passes 'SP3C00JQWPG67FX6G05HHDB3E786XGE8AQQCP4X00 u80)
(map-set mint-passes 'SP3MFAWD1FAJEDPEMSMAS688TMTYBSXDAHY3W5Y2V u80)
(map-set mint-passes 'SP3WDK81HYBFCFFFASD73SMHGV846W46VEFVBYYB2 u80)
(map-set mint-passes 'SP2HSTSEDR73E2FM0D5EZ944WPY1M3FTPYYT177Y7 u80)
(map-set mint-passes 'SP282S2Y3PXAQWM0EVBWD9S02J2S9DKTYDBZZ4VM1 u80)
(map-set mint-passes 'SP3CF3B2FMNGTHBDAN3J5GWNPS1C2046RE5T0T8KC u80)
(map-set mint-passes 'SP16SMT05T4GGSP9178JRWG9H61HM44YWCCZ2JWXR u80)
(map-set mint-passes 'SP1JKGDP2YY9AP93EQX446HTAJWVJNKN5WASSAZ29 u80)
(map-set mint-passes 'SP3DTG6Q3ZJCV6JMMVVNVESF1CN84NZP5EW58DPH1 u80)
(map-set mint-passes 'SP2QAXGD7RHMKH773D70Y80MHADPNKY55CFB3S0EE u80)
(map-set mint-passes 'SP3ECTSWE3VS4YE7ZTS3GMR9XF3871W4DWFE2QPE8 u80)
(map-set mint-passes 'SP3G6Y8RK9Q7SRC9VS4T3SP2BQEJMF6SX0JVV3R42 u80)
(map-set mint-passes 'SP356CW66F3KYN80CW17TYGGE87501GNHBHJ6KFNX u80)
(map-set mint-passes 'SP1N8N0YJKN0Y0HAENE6EZWW8PYWVCWAFSHCQ39ZG u80)
(map-set mint-passes 'SP395RRFA93NPNYV5A727J2MVBN2BR80QZTY0HQQ3 u80)
(map-set mint-passes 'SPZ7YBW5J8Z43T6VKR4JSY4GV222RM5QXETBWA6Z u80)
(map-set mint-passes 'SP36F3NA5S64EJCCMZ50Z9PMRYS6NKWNYAZK1X4D2 u80)
(map-set mint-passes 'SPJBB4AYEWZX4CK3GT7TY66BFQVY64WRBC1KQ3G8 u80)
(map-set mint-passes 'SP3HXQ07XY5MM2R88YNA05VM5YWZW1HJFH2YBNPB1 u80)
(map-set mint-passes 'SP1KN6Q1Y6VJYDFREVVAHDPPJG03N65GNDGXV16QS u80)
(map-set mint-passes 'SP170JJVVCREQZQWSW0ND9VEJ0GK0Q135PTJVSJGT u80)
(map-set mint-passes 'SP1WBNM0A4ZVY1GVZMXDPMV831BF0BMHFJK9ZXNRW u80)
(map-set mint-passes 'SP11A5DWWE4EN1HNKPCN4P1SXZNV2ZSN59RRZEG27 u80)
(map-set mint-passes 'SP2KVPE648HYPXJDX8MTVE7HRJ1XRN57RESACXFJA u80)
(map-set mint-passes 'SPNWZ5V2TPWGQGVDR6T7B6RQ4XMGZ4PXTEE0VQ0S u80)
(map-set mint-passes 'SP3731FXN86HFJ5SH525315DD37AA9NV5TBZ2ZKWX u80)
(map-set mint-passes 'SP1D0T0HNWEVS9D9SDDC0ST0PYA8FQMS566ESWFEX u80)
(map-set mint-passes 'SPJ52DQFJVJACKHY0QX5DRE559MBCXWTSGNBN76V u80)
(map-set mint-passes 'SP3AWJ11F5K73WJ2YMBZBJKRFE4CFWKD1A11JY7NR u80)
(map-set mint-passes 'SP2ZH112S3BHH2Z2P28QSSY9TSG3SQDC7YDBD0GT1 u80)
(map-set mint-passes 'SP3QH4XZGEG6VDZFV04800Z2XCX6CXMRKBDZCAYPV u80)
(map-set mint-passes 'SP27MNH628QSC2C3XAK0CQPSPDF1KJBC5GEEC8H6W u80)
(map-set mint-passes 'SPKPA06RC4DW68HGDS3CFEXT7ZH7QPMGM97B7K02 u80)
(map-set mint-passes 'SP333V744Y42P93B8W6154VNQ9RDPM9MWCC2QN11J u80)
(map-set mint-passes 'SP02A6KK9V9M4ZK6YVNVGJ5T2954JWMF2P7SNKNT u80)
(map-set mint-passes 'SP1J5W1FN3P80XV1YK14BKC6A912WWFGJSW9M92HA u80)
(map-set mint-passes 'SP1DBCVQ5MZ2AABHVSBXQ2T9D97F3XYNE3T2KXBZM u80)
(map-set mint-passes 'SP2Z4WSDXBXPEHGHANKASGHVHQJ634SFH3EYRMX7H u80)
(map-set mint-passes 'SP1FV3SN48RVHHQF7456N62G5NW768B8YM44M3AV1 u80)
(map-set mint-passes 'SP10Z7K82QXC35R3J88WYMNPFXC0JYGAQ9720DDT4 u80)
(map-set mint-passes 'SPCD0QPKVDYE1VBK616J8RM65W6RHP7ZV5Q49GYX u80)
(map-set mint-passes 'SP2RHSEGX0TRM6TPX59QG7QZFHAA7GWZQMR2YYD36 u80)
(map-set mint-passes 'SPPXHPRQWAWTR92N3XSA0MFMB4402YKQY15HEYVQ u80)
(map-set mint-passes 'SP3ZE5BHRB8JYQP0TNWT0Y5NNX0YZPVRXGEFFHD0X u80)
(map-set mint-passes 'SP1ZKS01KDBP1WZT07T6XPZN8EK82SD0GSH76PJM7 u80)
(map-set mint-passes 'SP3RWZAV8XBHH3FMSFMCEWJ80N1XSX2AZH3YA1QB u80)
(map-set mint-passes 'SP31FJFAFSBFXPHDRF839CEPYF7EGTK99RS6KJ3JP u80)
(map-set mint-passes 'SPQXBMD470T84Y6H1A8DK2CH72XRWTCMN4JEE3W1 u80)
(map-set mint-passes 'SP3T0MX7FD33457F8C9HCG8TF7D7M7Z0CSDG6V65X u80)
(map-set mint-passes 'SPJW1XE278YMCEYMXB8ZFGJMH8ZVAAEDP2S2PJYG u80)
(map-set mint-passes 'SP2JQKHDV4N3FH86S52G4DH8HRG93DE1X39YHNSN u80)
(map-set mint-passes 'SP1JX2RYKPR0G7H81SQHZQ187H50RR6QSM8GX839X u80)
(map-set mint-passes 'SP3WTYF0615G2NP1FJGP3YP78DWHRCR8YZKGJZJXB u80)
(map-set mint-passes 'SP100W29KJHNM2D7NVJJ8G0SMSYG9VSD65VV3RM1E u80)
(map-set mint-passes 'SP8ZTTRVJFK5181TDF03PHSVAV4TQ6DP46GKTT97 u80)
(map-set mint-passes 'SPHQVXHRCBTZWB78B1A4Y58DK5KPFQSRS5ECYYZD u80)
(map-set mint-passes 'SP10QAKYKVYX69WE3GRKFP5Q1FW21N16P42ZEMW7P u80)
(map-set mint-passes 'SP30BTV3905TS3A83CENN271AHZHGM4C3FDZX3JNR u80)
(map-set mint-passes 'SP3DMPG5FT6N846KV38H7HFKZ6N8MR36XWBTSR2WT u80)
(map-set mint-passes 'SP2WXZ3F8TQ5BZMCB6ENYFAQAT41BG9SNCH7C4TDA u80)
(map-set mint-passes 'SP15C048RXW299YH7Y6REHY6JS65DY2JNX8YGX3TQ u80)
(map-set mint-passes 'SP3R8C0JYZP1ET9VCQMK393YWHY4Z8EG6XPSCFHJE u80)
(map-set mint-passes 'SP2GEEMWV87V908G4T437FEMGFRJ5XTXX1PDHFEF u80)
(map-set mint-passes 'SPFQX05AX2TCQZQFM138PST1F99NE6P1REHGQ9FT u80)
(map-set mint-passes 'SP1TRFX25N32GE9T3TGD5PW3E2HGC5P913ZH11PF9 u80)
(map-set mint-passes 'SP2WQ6QN6TEGPXCC8ZVJ335DVKNS8VSAJZRGM4C4A u80)
(map-set mint-passes 'SPQRZQWAZ78SE0Y9R571AGTK9V4GT9CWAFAQRNDK u80)
(map-set mint-passes 'SP2HRNYGCX2CC3BQNX3HR7PGAPGGWK9CT90E3BQ4Z u80)
(map-set mint-passes 'SP1RAZ7YCTF6X9ZG1VTJW3X39KPAT6WQZ06K33BPY u80)
(map-set mint-passes 'SP1BBR8F98TK1GRY15JTG739TH5JX1ARD6JVJ34C u80)
(map-set mint-passes 'SPK2780EBGCJG5BQKS62JG0SBPNBYNMYYF5XYFPE u80)
(map-set mint-passes 'SP2NNT4PTMZ3JQ4KX1NZAXY2R05EGZ9X5AKSF8RNJ u80)
(map-set mint-passes 'SP18ZQRE3N8RNMYGMASDZXV4XGYEZMA8JSHAK31Q8 u80)
(map-set mint-passes 'SP39P9HZ6C1D8N6D3HEEHTZY199FS8VMAWG7XG4PT u80)
(map-set mint-passes 'SPV862G52WGJYTTBJV9ASPDGWAHJ6BSA2VGS4XE0 u80)
(map-set mint-passes 'SP1CA9W3C35F6WH2MH1D5Z1XQG9595Q1C3P7Z2NYY u80)
(map-set mint-passes 'SP2YADQRAJ4468KEX4CYD4MQPF0S6QYFT5BRA22J0 u80)
(map-set mint-passes 'SPMZXH0N765XSNWMS7VQF5N0Z52FS1QWD0QMQRNQ u80)
(map-set mint-passes 'SP208RJH0MD71S05Q8H56R0J2JK72M1FDEBFB383G u80)
(map-set mint-passes 'SP1R21DRG2GDK0PM12AHVJ283ZF88CBCPVA1VM2V7 u80)
(map-set mint-passes 'SPC4KZE8PZ82XG79TYGFXMWMNFY0TPFEFESYWFS7 u80)
(map-set mint-passes 'SP1MBXY6Z95TQ38F6V18BTTE5J0H90XH2F9Y5BSR4 u80)
(map-set mint-passes 'SP1XA04SDW26E4CDVJGF17SHKF1TJQPB1J62JDWC u80)
(map-set mint-passes 'SP73C2HBYXF4R2BWD5JSGGBXNSDP94Z12D97NH32 u80)
(map-set mint-passes 'SP3XK4CYW6AT9AYKZ429EJV26D0WC0FGXJWJA739Z u80)
(map-set mint-passes 'SPAY2BCJ2B329949BBBR6JF8GHQDNE14DCQJ6H28 u80)
(map-set mint-passes 'SP281SSCQ9VSGPRC3G8W4TE6ND83Y7A5FWQBPV2A1 u80)
(map-set mint-passes 'SP1386044X5N01AJAGN50NGKE87K4Q72P7DHVXF3F u80)
(map-set mint-passes 'SP69YPJBXKATQMPNC4RPXXF6J9KKTGDA7053PQBN u80)
(map-set mint-passes 'SPTD1FVKH9HTEV3WZVN074M3TH3CG6FH2W9763ZJ u80)
(map-set mint-passes 'SPZH1BSMN0EH5Q5P7EZD4N521Z7TZ1DV266X6FN8 u80)
(map-set mint-passes 'SP3XPXFTZXV9504YDP8342426A88GGAEQVEMPBRS8 u80)
(map-set mint-passes 'SP2W78BS5NX7X4ES4N09J4FHC4GND25W8X96Q0H03 u80)
(map-set mint-passes 'SP19WSDJWTH4CW3YG554XS5CAXJJGAN83P8CFZ4K1 u80)
(map-set mint-passes 'SP13VZB746ZCMFVWVK8J9E5J6KZ875BZC475Q3P4V u80)
(map-set mint-passes 'SP3DCV25CKJAGQ0KG7EATN43RV9CPQ3WM8X36VYY7 u80)
(map-set mint-passes 'SP3BWMXQA1E5QVW2JWC9Z5GKRG3QQ8B289RJ7A214 u80)
(map-set mint-passes 'SPADFSEZ94D06AWBFV2HVW1Q0RJYRAYE5YW84G3Y u80)
(map-set mint-passes 'SP11CCVN1P4H32KHDGVVD6K3TBBDAS8N056RMQYFE u80)
(map-set mint-passes 'SP34T5PTVXDWT5KH10EKCSWD8GB3RYKH6YY3D620Q u80)
(map-set mint-passes 'SP2PF0BGSDKRQ0Y8MWGYA9WCC536YQDVXTNKZ4P8K u80)
(map-set mint-passes 'SP307GBPKHBQE2CQP65ZPF0B9BV9VWW2RKT9M0F84 u80)
(map-set mint-passes 'SP2KAF9RF86PVX3NEE27DFV1CQX0T4WGR41X3S45C u80)
(map-set mint-passes 'SP3G8G17DHB8PDP611B1AQPXN0FHSB57F73HM6CDP u80)
(map-set mint-passes 'SP3D5EHK8SMJ3MMJWYCAKWJ2H4F1JQX85E33ZJDB9 u80)
(map-set mint-passes 'SP2YXGABEQP4EFB2TPSC785X3J7YK0MDXC9WM5FMZ u80)
(map-set mint-passes 'SP19BFMAD9XA1WJ1SV4HG1KYZDPGBMK56CAFE7ZMH u80)
(map-set mint-passes 'SP8F4WVKWT783QMK6W2R7P5X1F1YTEXR67W8XVM1 u80)
(map-set mint-passes 'SP3KQ8XNE3DSXYHTXMTBJAETCQ8P104PH174D359Q u80)
(map-set mint-passes 'SP2JH5P0DNYW0GZZR88FGDQW3XS6CXX20G30R2T3J u80)
(map-set mint-passes 'SPSWTF97EQHS0C1QHM1HQZCQJPGKW2G3C4Y50CH8 u80)
(map-set mint-passes 'SP3Z0BDDHCD984N2MKGK61BP097MRF5M22YA56ZV2 u80)
(map-set mint-passes 'SP12BEEDG31J0AH68DFDJJYZ36D002PKDZCP1DZQE u80)
(map-set mint-passes 'SP3QJ41PARX6F6B4H56JZ272ANK0TRJ9J2VFBVY1D u80)
(map-set mint-passes 'SP143YHR805B8S834BWJTMZVFR1WP5FFC03WZE4BF u80)
(map-set mint-passes 'SP1CP8M4EB5ZDXHKZY0EQFZH1WST417K2QT67783G u80)
(map-set mint-passes 'SP1N3410Y0TJDFN0F7AX996XWTMMT9TTFD6C8HK6Z u80)
(map-set mint-passes 'SPTWFHFDX678Q2YRNDHQD0HPEF9E2AFDSDRFNANB u80)
(map-set mint-passes 'SP3MSQHD6CD47T80DQTHN964ZVMMBX12VM6SC8RDT u80)
(map-set mint-passes 'SP2ZFHBEJNP50S1W9V0R540WNW0PK9VMEVMEH9W5Q u80)
(map-set mint-passes 'SP1A0ZMV7ZS5T8Y9B5ETC68N2FM80QBCM10X54QHN u80)
(map-set mint-passes 'SP119YQ6SXYF9R1TT55BPTDXG59Y53WM96EBBQTAK u80)
(map-set mint-passes 'SP1SAKRW5S3332PCC6TE8MDQ7Z4JBEW7YWMTV0447 u80)
(map-set mint-passes 'SPH2CYE44SEP0964994SHRH09TDV3WAMF51HXVMH u80)
(map-set mint-passes 'SPKGS0Y412RTY88A4A8S1XF8EEPRM3BVJ4FJ8GYP u80)
(map-set mint-passes 'SP3XMSJSV1TYRP69PAC0751P483QZ3E17R5GTV4CX u80)
(map-set mint-passes 'SP2QQFANT5C1MYAQ6V72MC4X7TW6R2XX75R44J2ZG u80)
(map-set mint-passes 'SP2H16936552Z03A8HC1A3GTJMSQDRJX60BM0MC1P u80)
(map-set mint-passes 'SP2X6MDKH7EJC3BE18S155JCM2VCYCBXDT3BTSG9M u80)
(map-set mint-passes 'SPQMRER1ZGA40PGWM8PEZ218VX05P818BWNESQK u80)
(map-set mint-passes 'SP20QA1XF3N9MYBMFB3JASP4ZBFCBX54Y0SPE7C1X u80)
(map-set mint-passes 'SP25JVS4EYSAZAC64PCRWM29GM111F4RWA210DJ8J u80)
(map-set mint-passes 'SP32TGX0ZJ07VF42J7R9919Z70J1DRG8GTM0P5VHX u80)
(map-set mint-passes 'SP2KQ2QJYEWD7SZQEB3G649MGAE8T8EV3FJBZFMCZ u80)
(map-set mint-passes 'SP1DNWREWMKQNE4G82Q9CBZYBXA96ZAY010M24ZEP u80)
(map-set mint-passes 'SPYYRNV2MFB8X08D0ZJDVBNRWS5E8ZYC4FSDHC0H u80)
(map-set mint-passes 'SP1C229KSRFAYC1RR1R00MJ6295N7E2NXKABGBZGH u80)
(map-set mint-passes 'SP1YKVWP7YZND5C677XSG18SCF78KKK8CX8H63FV1 u80)
(map-set mint-passes 'SP108W069Y9R0GZS67CPH1WM5G96BX0NB60335GQ3 u80)
(map-set mint-passes 'SPNWZ5V2TPWGQGVDR6T7B6RQ4XMGZ4PXTEE0VQ0S u80)
(map-set mint-passes 'SP28KYD8TQC1QHTZ7T0B84AK5NYPFS4SH8WZMZ5A4 u80)
(map-set mint-passes 'SP11XNQCYG4VXFHZVD9Y9HNY7Q36J5JN0AVA9PR0H u80)
(map-set mint-passes 'SP20E0RC1NWFVD6A2QC8Z4CTWK7X5FKFCB6M6P6W4 u80)
(map-set mint-passes 'SP247RS63PWW7ZQZ9EYYA9CXKKPWEP71M14W8N294 u80)
(map-set mint-passes 'SP3SF0PSD7KYVJQPKKRBYJFF7NENGFHZSBVHM3B27 u80)
(map-set mint-passes 'SP197GMEG6WGBRDTCTGGWMRA1G77E65TRXWYKGCT7 u80)
(map-set mint-passes 'SP33SCE1F3J9N6D4ZFY9AA3GR05GS3112GS1VZDFC u80)
(map-set mint-passes 'SP2ZCER0Z8VVMCDA3817SDFVES833XD9ACYDAFH1T u80)
(map-set mint-passes 'SP1FFJGTYFVH0YY7Q659MFD6WJRGE9MNZ2N06V2EK u80)
(map-set mint-passes 'SP1XHX4584AM7KARG7MTVBW6CN8JQ8Q97DMFZJ8W u80)
(map-set mint-passes 'SP7C953XMSK32N7Z58JTRGDKWP128BB9GXSP5BZV u80)
(map-set mint-passes 'SP1CA9W3C35F6WH2MH1D5Z1XQG9595Q1C3P7Z2NYY u80)
(map-set mint-passes 'SP38ZXGQPE8NEN2PJFNMZ0W2EVBJZ8ND08CAHEC4M u80)
(map-set mint-passes 'SP14ZVJSGEC4P7WGYCYC5P67WNGBVZ1K71DA75J13 u80)
(map-set mint-passes 'SP2F2KH0RVX6GF1Y9FWMMSR9RHG0TW3NN72D724NX u80)
(map-set mint-passes 'SP225X75JEN4894XV3JWD6NJKY16X739YT3X891VW u80)
(map-set mint-passes 'SP3Z7511VWR5WG9J3MAKER3NRZYKWT83K2XTP36EV u80)
(map-set mint-passes 'SP10AJWD1SJZN7D2TY6JWRS2TYGZHPFCRRGPQH95P u80)
(map-set mint-passes 'SP3G9BMCJ0858Y68MM35R6HA0WAZDNYXWZBN4RYK1 u80)
(map-set mint-passes 'SP2MC6PBPNPSEHA6G87DDMN6WX3HGMTANXZBYKCNF u80)
(map-set mint-passes 'SP36J28W8MANZAP3457TZ7ZEPQJ3CHDFZQP13CNAX u80)
(map-set mint-passes 'SP39KCWR0B81CMMW6CC9QNZ8PQZGV320HGWTTT0Y u80)
(map-set mint-passes 'SPEJGS1KA6C4WX4FW4GHY2FV55S7CT233YMVJE8N u80)
(map-set mint-passes 'SPHWY482ANTWNTW2618HYHQSDY1WCW7P20BW5F7Y u80)
(map-set mint-passes 'SPW1MN5C4HG2B3V5GBPHAFDDE88YNCX35ECVX4B u80)
(map-set mint-passes 'SP1XJQHDDAX7CMT99B20Y3SRXEG4G2VC957WJXRGX u80)
(map-set mint-passes 'SP1NX6SPQSSFDZJCAFJ69YY4YS4GX6YHESNGVKRT5 u80)
(map-set mint-passes 'SP3CV23QM1B0J3QG5XR8GJJ8E7TGAMX8AXTZG7JGZ u80)
(map-set mint-passes 'SP19KPWZDPBD13N07C7Q1BENQMEPRTNA6J6ACBJB3 u80)
(map-set mint-passes 'SP1V7EZGJAYM3KT3K5H9TH4KGWFKZG7CH5SMY8GNT u80)
(map-set mint-passes 'SPGCNF7HEFJSTTSK4B8CFP96J1Z068HB7NMRZTJC u80)
(map-set mint-passes 'SP1PBYMWE6ZPWXDDTSSC3BB7SVBBNBT46DK7P5VD6 u80)
(map-set mint-passes 'SPDXC0NM3YQDHV1HN3V9P5Y4P26QWY709NB86EYB u80)
(map-set mint-passes 'SP1XZ7KEMJT5V8ATRYZB0XWJ20KMGM37JXJZG9D6S u80)
(map-set mint-passes 'SP32CF0E78JNPK0HYDTH3CCZ8FN76PFX5W0FYBN20 u80)
(map-set mint-passes 'SP1SXFE323XBDFEK6D5BV7P20BD3B4Y8W1RFN759H u80)
(map-set mint-passes 'SPGKD75JXD79Z204ZGJSBNC5BTD4P0Q2F81WEM9A u80)
(map-set mint-passes 'SP1QRFVDS76WFV5XCDHAR7FQYTSNM4M1P4TGFZRK1 u80)
(map-set mint-passes 'SPHK8A7P61C6ASWKYDX1PCDX9YA54DKVJN49EXGJ u80)
(map-set mint-passes 'SP2RTAF93N1X140RJH9SD66V7EQAWRC7M0EC1ZYFE u80)
(map-set mint-passes 'SP3B94KBH9AEVAQRHGM54HPA795SPK7NMCM9VJNAN u80)
(map-set mint-passes 'SPP1XFREP00CJXC65955T7HATAS4ZMVQFQ7ZWD7R u80)
(map-set mint-passes 'SP3W23AJE2FEJN3R9ZPCS1QZEGRZQ86A4810H9HSQ u80)
(map-set mint-passes 'SP3CTFKR3SKRTX1NPVHSNY2P2D02TJNGHNZREASPA u80)
(map-set mint-passes 'SP2K9G25RVJY6E99AKYQFDFWEDZQTYJRNF2HTMDZW u80)
(map-set mint-passes 'SP1XE5E5ZSEN5F40Z4S87ZS6VK2VM0J6S8FF5A1RC u80)
(map-set mint-passes 'SP2EV985DXEHEB2FKW3Z642R0QWQGXTRDYXNRVCYY u80)
(map-set mint-passes 'SP1JCPNPAMAQJ364AFHPTW3HY7X0HYZ3TJ0ZDGWZH u80)
(map-set mint-passes 'SP3KCAE82ZYFB5DMJE9TW9K9ZQPJYCD9Q02PFB2C8 u80)
(map-set mint-passes 'SP38REZNW2QD8CSSQ3PZKWJZ84TTBTXDJDD20GKW4 u80)
(map-set mint-passes 'SP60QZJX3X46CBHQZDB4C7YNG6WHVYGPG7FE9KTJ u80)
(map-set mint-passes 'SP2YQCF4DMRWRPKD0EVNDY3AJ0BBS9FQH548GCHND u80)
(map-set mint-passes 'SP1SA9ZTHB8QWNWJAYX54RZKA1EGB3R6YZDN4RWNJ u80)
(map-set mint-passes 'SP2TZ7EPX4PFM2N6QV958W2TR2A4XN3SM6K8HQVPR u80)
(map-set mint-passes 'SP27DNZWS1AJ13RQV4K4N0ZPBFZMM99RZFZ1M70F6 u80)
