| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -129,7 +129,13 @@
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					   (harvesting initform: #f accessor: player-harvesting)
 | 
					 | 
					 | 
					 | 
					   (harvesting initform: #f accessor: player-harvesting)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					   (hay-doubled initform: #f accessor: player-hay-doubled)
 | 
					 | 
					 | 
					 | 
					   (hay-doubled initform: #f accessor: player-hay-doubled)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					   (corn-doubled initform: #f accessor: player-corn-doubled)
 | 
					 | 
					 | 
					 | 
					   (corn-doubled initform: #f accessor: player-corn-doubled)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					   (ready-to-start initform: #f accessor: player-ready-to-start)))
 | 
					 | 
					 | 
					 | 
					   (ready-to-start initform: #f accessor: player-ready-to-start)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					   (stats initform:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					          '((pro . 0)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            (back . 0)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            (tax-person . 0)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            (emergency . 0))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					          accessor: player-stats)))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					(define-class <ai> (<player>)
 | 
					 | 
					 | 
					 | 
					(define-class <ai> (<player>)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  ((processing-turn initform: #f accessor: ai-processing-turn)))
 | 
					 | 
					 | 
					 | 
					  ((processing-turn initform: #f accessor: ai-processing-turn)))
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -193,7 +199,8 @@
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    (last-updated . 0)
 | 
					 | 
					 | 
					 | 
					    (last-updated . 0)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    (last-cash . ,(player-cash player))
 | 
					 | 
					 | 
					 | 
					    (last-cash . ,(player-cash player))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    (hay-doubled . ,(player-hay-doubled player))
 | 
					 | 
					 | 
					 | 
					    (hay-doubled . ,(player-hay-doubled player))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    (corn-doubled . ,(player-corn-doubled player))))
 | 
					 | 
					 | 
					 | 
					    (corn-doubled . ,(player-corn-doubled player))
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    (stats . ,(player-stats player))))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					(define (game->sexp g)
 | 
					 | 
					 | 
					 | 
					(define (game->sexp g)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  `((id . ,(game-id g))
 | 
					 | 
					 | 
					 | 
					  `((id . ,(game-id g))
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -319,7 +326,7 @@
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        '(cash debt space previous-space state assets ridges
 | 
					 | 
					 | 
					 | 
					                        '(cash debt space previous-space state assets ridges
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                               harvest-mult otbs user-id revealed-cards
 | 
					 | 
					 | 
					 | 
					                               harvest-mult otbs user-id revealed-cards
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                               year-rules next-year-rules hay-doubled corn-doubled
 | 
					 | 
					 | 
					 | 
					                               year-rules next-year-rules hay-doubled corn-doubled
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                               color name trade last-updated last-cash)))))
 | 
					 | 
					 | 
					 | 
					                               color name trade last-updated last-cash stats)))))
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    (when (not (player-revealed-cards p))
 | 
					 | 
					 | 
					 | 
					    (when (not (player-revealed-cards p))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      (safe-set! (player-revealed-cards p) '()))
 | 
					 | 
					 | 
					 | 
					      (safe-set! (player-revealed-cards p) '()))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p))
 | 
					 | 
					 | 
					 | 
					    p))
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -918,7 +925,27 @@
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                     (lambda (p1 p2)
 | 
					 | 
					 | 
					 | 
					                     (lambda (p1 p2)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                       (> (player-net-worth p1)
 | 
					 | 
					 | 
					 | 
					                       (> (player-net-worth p1)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                          (player-net-worth p2))))
 | 
					 | 
					 | 
					 | 
					                          (player-net-worth p2))))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					               (iota (length (game-players game)) 1)))))
 | 
					 | 
					 | 
					 | 
					               (iota (length (game-players game)) 1))))
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					     (stats . ((pro . ,(let ((p (car (sort (game-players game)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                           (lambda (p1 p2)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                             (> (alist-ref 'pro (player-stats p1))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                                (alist-ref 'pro (player-stats p2))))))))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                         (conc "Most suns aligned: " (player-name p) " (" (alist-ref 'pro (player-stats p)) ")")))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					               (back . ,(let ((p (car (sort (game-players game)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                            (lambda (p1 p2)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                              (> (alist-ref 'back (player-stats p1))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                                 (alist-ref 'back (player-stats p2))))))))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                          (conc "Most licences expired: " (player-name p) " (" (alist-ref 'back (player-stats p)) ")")))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					               (taxPerson . ,(let ((p (car (sort (game-players game)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                                 (lambda (p1 p2)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                                   (> (alist-ref 'tax-person (player-stats p1))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                                      (alist-ref 'tax-person (player-stats p2))))))))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                               (conc "Needs a tax person: " (player-name p) " (" (alist-ref 'tax-person (player-stats p)) ")")))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					               (emergency . ,(let ((p (car (sort (game-players game)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                                 (lambda (p1 p2)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                                   (> (alist-ref 'emergency (player-stats p1))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                                      (alist-ref 'emergency (player-stats p2))))))))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                               (conc "Living on the edge: " (player-name p) " (" (alist-ref 'emergency (player-stats p)) ")"))))))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					   type: "end-of-game"))
 | 
					 | 
					 | 
					 | 
					   type: "end-of-game"))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					(define (create-ws-response player event misc)
 | 
					 | 
					 | 
					 | 
					(define (create-ws-response player event misc)
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1271,9 +1298,12 @@
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					               (if (> (+ (player-debt player)
 | 
					 | 
					 | 
					 | 
					               (if (> (+ (player-debt player)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                         (farming-round (+ amount (* amount (game-setting 'loan-interest game)))))
 | 
					 | 
					 | 
					 | 
					                         (farming-round (+ amount (* amount (game-setting 'loan-interest game)))))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                      (game-setting 'max-debt game))
 | 
					 | 
					 | 
					 | 
					                      (game-setting 'max-debt game))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                   (begin (safe-set! (player-cash player) (+ (player-cash player) amount))
 | 
					 | 
					 | 
					 | 
					                   ;; emergency loan
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                   (begin ((make-player-stat 'emergency amount) player)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                          (safe-set! (player-cash player) (+ (player-cash player) amount))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                          (safe-set! (player-display-cash player) (player-cash player))
 | 
					 | 
					 | 
					 | 
					                          (safe-set! (player-display-cash player) (player-cash player))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                          (safe-set! (player-debt player) (+ (player-debt player) (* amount 2))))
 | 
					 | 
					 | 
					 | 
					                          (safe-set! (player-debt player) (+ (player-debt player) (* amount 2))))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                   ;; regular loan
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                   (begin (safe-set! (player-cash player) (+ (player-cash player) amount))
 | 
					 | 
					 | 
					 | 
					                   (begin (safe-set! (player-cash player) (+ (player-cash player) amount))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                          (safe-set! (player-display-cash player) (player-cash player))
 | 
					 | 
					 | 
					 | 
					                          (safe-set! (player-display-cash player) (player-cash player))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                          (safe-set! (player-debt player) (+ (player-debt player)
 | 
					 | 
					 | 
					 | 
					                          (safe-set! (player-debt player) (+ (player-debt player)
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1930,6 +1960,7 @@
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					              '()))
 | 
					 | 
					 | 
					 | 
					              '()))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					       #f)
 | 
					 | 
					 | 
					 | 
					       #f)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    (1 ,(lambda (player game)
 | 
					 | 
					 | 
					 | 
					    (1 ,(lambda (player game)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					          ((make-player-stat 'tax-person 1) player)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          (push! (make-player-year-rule 5 '((?p ?any harvest-mult 0) (?p ?crop)))
 | 
					 | 
					 | 
					 | 
					          (push! (make-player-year-rule 5 '((?p ?any harvest-mult 0) (?p ?crop)))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                 (player-year-rules player))
 | 
					 | 
					 | 
					 | 
					                 (player-year-rules player))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          '())
 | 
					 | 
					 | 
					 | 
					          '())
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -2078,7 +2109,11 @@
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  (when (not (already-harvested? 'wheat player))
 | 
					 | 
					 | 
					 | 
					  (when (not (already-harvested? 'wheat player))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ((make-player-pays-per-unit 'grain 50) player)))
 | 
					 | 
					 | 
					 | 
					    ((make-player-pays-per-unit 'grain 50) player)))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					(define (make-player-stat stat amount)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  (lambda (p)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    (safe-set! (player-stats p)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					               (alist-update stat (+ (alist-ref stat (player-stats p)) amount)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                             (player-stats p)))))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					(define (get-actions player space)
 | 
					 | 
					 | 
					 | 
					(define (get-actions player space)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  (let ((res '()))
 | 
					 | 
					 | 
					 | 
					  (let ((res '()))
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -2097,6 +2132,7 @@
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     ((mar1 money ?p ,(pays 2000)))
 | 
					 | 
					 | 
					 | 
					     ((mar1 money ?p ,(pays 2000)))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     ((mar2 money ?p ,(pays 500)))
 | 
					 | 
					 | 
					 | 
					     ((mar2 money ?p ,(pays 500)))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     ((mar3 goto ?p jan2))
 | 
					 | 
					 | 
					 | 
					     ((mar3 goto ?p jan2))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					     ((mar3 player-action ?p ,(make-player-stat 'back 1)))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     ((mar4 money ?p ,(pays 2000)) (?p fruit))
 | 
					 | 
					 | 
					 | 
					     ((mar4 money ?p ,(pays 2000)) (?p fruit))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     ((apr1 draw ?p otb))
 | 
					 | 
					 | 
					 | 
					     ((apr1 draw ?p otb))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     ((apr2 add-rule ?p ,(make-player-year-rule
 | 
					 | 
					 | 
					 | 
					     ((apr2 add-rule ?p ,(make-player-year-rule
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -2130,6 +2166,7 @@
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     ((jul5 harvest ?p wheat) (?p grain))
 | 
					 | 
					 | 
					 | 
					     ((jul5 harvest ?p wheat) (?p grain))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     ((aug1 harvest ?p wheat) (?p grain))
 | 
					 | 
					 | 
					 | 
					     ((aug1 harvest ?p wheat) (?p grain))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     ((aug1 goto ?p feb4))
 | 
					 | 
					 | 
					 | 
					     ((aug1 goto ?p feb4))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					     ((aug1 player-action ?p ,(make-player-stat 'pro 1)))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     ((aug1 player-action-post-harvest ?p ,finish-year))
 | 
					 | 
					 | 
					 | 
					     ((aug1 player-action-post-harvest ?p ,finish-year))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     ((aug2 harvest ?p wheat) (?p grain))
 | 
					 | 
					 | 
					 | 
					     ((aug2 harvest ?p wheat) (?p grain))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     ((aug2 money ?p ,(gains 1000)) (?p harvester))
 | 
					 | 
					 | 
					 | 
					     ((aug2 money ?p ,(gains 1000)) (?p harvester))
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -2400,4 +2437,3 @@
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					;; TODO
 | 
					 | 
					 | 
					 | 
					;; TODO
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					;; make sure two players can't have the same name
 | 
					 | 
					 | 
					 | 
					;; make sure two players can't have the same name
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					;; "your turn to roll" showing up on mobile when on action screen
 | 
					 | 
					 | 
					 | 
					;; "your turn to roll" showing up on mobile when on action screen
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					;; trade cards better
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
 
 |