
    i_                      d dl mZ ddlmZ  e                                 ee                     dYdZdZd
Z	d[d\dZ
d]dZdZdZdZdZd^d_dZd`dZdadZdbd!Z	 	 dcddd&Zded'Zdfd)Zdgd+Zdhd-Zdid.Zdjd/Zdkd0Zdld3Zdmd4Zdndod9Z	 d[dpd;Zdqd?Zdrd@ZdsdAZ dtdudDZ!dqdEZ"dvdwdHZ#dvdxdKZ$e%&                    dLe%j'                  Z(e%&                    dMe%j'                  Z)e%&                    dNe%j'                  Z*e%&                    dOe%j'                  Z+e%&                    dPe%j'                  Z,dydQZ-dzdRZ.dqdSZ/d{dTZ0d|dUZ1d|dVZ2d|dWZ3dqdXZ4dS )}    )annotations   )	bootstraptextstrreturndict[str, Any]c                   t          |           }|sg dddS g }t                      }t                              |          D ]}t	          |                    d          pd                                          }t	          |                    d          pd                              dd                                          }|r|sd| d| d}t          |          }|r||v r|r|	                    |           |
                    |           t          |          d	k    r ndd}	d}
t                              |          }|r |	|                    d                    }
|
s9t          |d	          }|r& |	d                    |d d                             }
d}t                               d|t           j                  rd}||
|dS )N )tierssnapshotdynamic_hintr      ,u   前 u   %：u    分   rawr   r   c                J   t          |           }|sdS t                              d|dt          j                  d         }t                              d|t          j                  }|r|                    d          }|                    d          }t          |d	          S )
Nr   zA\b(?:keep\s+pushing|keep\s+climbing|join\s+us|thanks|see\s+you)\br   )maxsplitflagsr   z$(.+?\b(?:gmt|utc)\s*[+-]?\d{1,2}\)?)    ，,;；。H   max_len)
clean_textresplitIsearchgroupstrip_clean_fact_value)r   snaptz_hits      !/app/scripts/x_intel/editorial.py_normalize_snapshotz8extract_sbt_threshold_facts.<locals>._normalize_snapshot   s    # 	2xx\^bmnvxvzx{{|}~BD"$OO 	#<<??Dzz.)) r2222    limit   、   u`   live reference thresholds?|not fixed|keep climbing|bar can keep climbing|動態|浮動|非固定uH   門檻為動態參考值，會隨參與人數與分數變化而上調。r   r   r   r   )r   setSBT_THRESHOLD_REfinditerr   r   r    replace
dedupe_keyaddappendlenSBT_SNAPSHOT_REr   extract_schedule_factsjoinr   r   )r   srcr   
seen_tiersm
percentilepointslinekeyr%   r   
snap_matchscheduler   s                 r$   extract_sbt_threshold_factsr@   	   s   
T

C AR@@@E55J&&s++  )r**0022
QWWQZZ%2&&..sB77==?? 	 	2j22f222 	3*$$ 	 NN3Tu::??E 	3 	3 	3 	3 H '',,J <&&z'7'7':':;; E)#Q777 	E**5::hrrl+C+CDDHL	yytvy{}{  A  A ba,OOOr&   boolc                    t          |           }|sdS t          t                              d|t          j                            S )NFu`   \bsbt\b|soulbound|積分|积分|points?|snapshot|快照|threshold|門檻|top\s*\d+%|rank(?:ing)?)r   rA   r   r   r   )r   r7   s     r$   has_sbt_signalrC   :   sJ    
T

C u
		oD	
 	
  r&   Nsourcefactsdict[str, str] | Nonec                   t          |           }t          |          sdS t          |          }d |                    dg           D             }t	          t          |                    d          pd          d          }|r;d                    |d d                   }d	| }|r|d
| z  }t          |          S t                              d|t          j	                  }|rQt	          |
                    d          d          }	t	          |
                    d          d          }
d|
 d|	 dS t                              d|t          j	                  }|r*t	          |
                    d          d          }d| dS t          |          }d}t                              dt          j	                  }|D ]*}|                    |          rt	          |d          } n+|r4t                              dd|                              d          }d| S t          |pi           }t          t          |                    d          pd                    }t          t          |                    d          pd                    }t                              d|t          j	                  r
|rd| dS d S d!S )"Nr   c                ~    g | ]:}t          t          |                    t          t          |                    ;S  r   r   .0xs     r$   
<listcomp>z.infer_sbt_acquisition_line.<locals>.<listcomp>M   s=    ZZZAzRUVWRXRXGYGYZZAZZZr&   r   r   r   r   r)   r*   u#   SBT 取得方式：快照時達到 u   ，快照時間 zRpull\s+([a-z0-9 +\-]{3,36})\s+once\s+before\s+([a-z0-9 ,:+\-]{2,28})\s+to\s+unlockr      r      u   SBT 取得方式：在 u    前完成 1 次「u   」抽卡以解鎖。u   (?:join|attend|participate|參加|参与|完成)\s+([^\n。；;]{4,42})\s*(?:to|即可|後|后).{0,18}(?:get|claim|receive|領取|领取|取得|獲得).{0,10}(?:sbt|soulbound),   u   SBT 取得方式：完成「u   」後依規則領取。u   (pull|open|mint|claim|join|attend|share|hold|buy|參加|参与|完成|報名|报名|快照|排名).{0,56}(sbt|soulbound|認證|认证)|(sbt|soulbound).{0,56}(unlock|claim|get|receive|領取|领取|取得|獲得|解鎖|解锁|發放|发放)`   u|   (?i)^.*?(?=(pull|open|mint|claim|join|attend|share|hold|buy|參加|参与|完成|報名|报名|快照|排名|sbt|soulbound))r      SBT 取得方式：rewardparticipation\bsbt\b|soulboundu$   」並符合活動條件後領取。uI   SBT 取得方式：依官方貼文的參與條件完成任務後領取。uL   SBT 取得方式：依官方公布的快照、排名或任務條件取得。)r   rC   r@   getr!   r   r6   r   r   r   r   split_sentencescompilesubr    normalize_event_facts)rD   rE   r7   	thresholdr   r   	tier_textr<   	pull_oncepack	date_hint
join_claimtasklines	candidatepattrow	facts_maprT   rU   s                       r$   infer_sbt_acquisition_linerh   G   s
   
V

C# r+C00IZZw)C)CZZZE Y]]:%>%>%D"!E!ErRRRH  JJuRaRy))	@Y@@ 	21x111D$		]
 I
  c !3!3R@@@%iooa&8&8"EEE	bbbtbbbb 	{
 J
  M !1!1!!4!4bAAALdLLLLC  EI::	t
 D
   ;;s 	)#r:::IE	  1FF L
 
 %

	 	
 1Y000%ekr22IIMM(339r::;;Fs9==#A#A#GRHHIIM	yy%vrt44 [ 	fe-eeeeZZYYr&   	card_typec                D   t          t          |                     }g d}|D ]/\  }}t                              ||t          j                  r|c S 0t                              dd|          }t                              dd|t          j                  }t                              dd|                              d          }|st          |          S t          |          r,d	d
ddddd}|	                    |t          |                    S t          |d          S )N))uu   \bmfa\b|2fa|multi[-\s]*factor|authenticator|authentication|帳號安全|账号安全|setting page|設定頁|设置页u   帳號安全與 MFA)uQ   threshold update|thresholds?|snapshot|top\s*\d{1,3}\s*%|分位門檻|門檻更新u   SBT 快照門檻更新)zweb3\s*festival|hong\s*kongu   香港 Web3 Festival 行程)z,korea|community\s*gathering|gathering|meetupu   社群線下聚會)u6   \bplaza\b|space|community\s*session|ama|discord|直播u   社群直播與互動)z\btour\b|card\s*shopu   卡店巡迴與交流活動)u   ambassador|大使u   Ambassador 計畫進度)u   sbt|points|積分u   SBT 與積分機制)zone\s*piece|luffyu   One Piece 卡牌動向)u   volume|成交|交易量|\$\du   交易量與市場成長)u   pack|卡包|抽卡u   卡包與抽卡表現)u   reward|airdrop|獎勵u   獎勵與發放進度)u   update|公告|progressu   最新官方更新z^[^\w\u4e00-\u9fff]+r   ze\b(we|we're|we are|join us|welcome|excited|progress|update|community|project|results?|announcement)\b )r   \s+z ,.:;|-u   社群活動更新u   市場訊號更新u   官方公告更新u   功能進度更新u   分析整理更新   社群互動更新eventmarketannouncementfeaturereportinsight.   )strip_links_mentionsr   r   r   r   rZ   r    _headline_prefix_is_mostly_asciirW   compact_point)r   ri   tkeyword_topicspatlabelfallbacks          r$   infer_topic_phraser      s:   Z--..A  N %  
U99S!RT"" 	LLL	
&A..A
p	d	 	 	 	A 	vsA$$Y//A +	*** 	D)*0+*+
 
 ||I'7	'B'BCCCBr&   c                p    t          t                              dt          | pd                              S )N[\u4e00-\u9fff]r   )rA   r   r   r   )r   s    r$   _contains_cjkr      s)    		,c$*"oo>>???r&   c                   t          | pd          }t          t                              d|                    }t          t                              d|                    }|dk     rdS |t	          d|dz            k    S )Nr   z[A-Za-z0-9]r      F   r*   )r   r3   r   findallmax)r   r7   ascii_count	cjk_counts       r$   rx   rx      sq    
djb//Cbjj5566KBJJ137788IRu#b)a-0000r&   T   r   intc                   t          t          |                     }|sdS t                              dd|          }t                              dd|          }t                              dd|                              d          }|sdS t                              d|          }g }|D ]}t          |          }|st          t          |                    dk     r5t          t                              d	|                    d
k     rb||v rg|                    |           t          |          dk    r n|s|g}t          d
                    |          |          S )Nr   u   ^\d+\s*[/、.)\]]\s*z(?i)\b(live from|join us|we(?:'re| are)? excited(?: to)?|looking ahead|reminder|tonight(?:'s)?|we would like to|come find us(?: and let'?s)?|thanks for|we're thrilled|we are thrilled)\brk   rl   z ,.;:!?-u   [，,。；;:：|｜]   z[A-Za-z0-9\u4e00-\u9fff]r   r      ；r   )rv   r   r   rZ   r    r   r3   r   r2   ry   r6   )r   r   r7   clauseschosenclausecs          r$   _abstract_focus_liner      sw   
z$//
0
0C r
&&("c
2
2C
&&	
 	 C &&c
"
"
(
(
4
4C rhh/55GF  v 	#A&&''!++rzz5q99::Q>>;;av;;!E  F++W====r&   accountc                    t          | pd                                                              d                                          }|sdS |                    d          rdS d| S )Nr   @u   來源帳號renaissu   Renaiss 官方)r   r    lstriplower
startswith)r   handles     r$   _account_actor_labelr      sn    B%%''..s3399;;F ~##  v<<r&   c                d   t          |                                           }|dk    rRt                              d|t          j                  rdS t                              d|t          j                  rdS dS |dv rzt                              d|t          j                  rd	S t                              d
|t          j                  rdS t                              d|t          j                  rdS dS |dk    r*t                              d|t          j                  rdS dS |dk    rdS dS )Nro   u3   sbt|reward|獎勵|积分|積分|merch|周邊|周边uH   這類活動有明確誘因，通常會提高參與率與社群擴散。u;   join us|community|gathering|ama|session|discord|live|直播uK   這是社群動員型資訊，重點是把人導向直播或現場互動。uQ   這則主要用來通知參與資訊，關鍵在時間、地點與參加方式。>   rr   rq   ~   \bmfa\b|2fa|multi[-\s]*factor|authenticator|authentication|security|帳號安全|账号安全|setting page|設定頁|设置页u<   這會直接改變登入流程並提升帳號安全門檻。D(sbt|points?).{0,36}(threshold|top\s*\d+%|snapshot)|threshold updateuS   這會直接影響 Beta 參與者在快照前的衝分策略與 SBT 等級判定。uB   launch|release|coming|roadmap|progress|開放|上線|上线|更新uW   這代表產品進度往下一個節點前進，需留意正式開放時間與條件。uK   這則更新會影響後續使用流程，需追蹤官方下一則細節。rp   u5   record|成交|sold|price|交易量|volume|涨|漲|跌uB   這會把討論焦點集中在成交價、供需與估值區間。uH   這則訊息反映市場觀察點，適合與其他來源一起比對。rs   u?   這份整理可直接拿來比較方案差異與執行成本。uE   這則貼文提供社群現場脈絡，可用來補齊討論背景。)r   r   r   r   r   )rD   ri   r7   s      r$   _infer_why_liner      sW   
V


"
"
$
$CG99KSRTRVWW 	^]]99SUXZ\Z^__ 	a``bb///99  W  Y\  ^`  ^b  c  c 	RQQ99\^acecghh 	ihh99Z\_acaeff 	mll\\H99MsTVTXYY 	XWWYYHPPRRr&   topic
lead_focusevent_factsdict[str, str]r?   	list[str]c                   t          |          }t          |p|d          }t          t          |                    d          pd          d          }	t          t          |                    d          pd          d          }
|	sL|rJt          d                    |d d                   d          }|d	v r|}	n|d
k    rt          |          r|}	|
sU|dv rQt                              d| t          j                  rd}
n(t                              d| t          j                  rd}
t          | |          }|||	|
|dS )NrR   r   r?   r   8   locationr)   r   >   ro   rr   rq   rt   >   ro   rt   u   hong\s*kong|香港u   香港u'   discord|space|live|直播|線上|线上u   線上社群)whowhatwhenwherewhy)
r   r!   r   rW   r6   _contains_calendar_dater   r   r   r   )rD   ri   r   r   r   r   r?   r   r   r   r   schedule_joinedr   s                r$   build_fivew_briefr     sf    w
'
'CZ05"===DS!<!<!BCCRPPPDc+//*"="="CDDbQQQE #H #+EJJx|,D,DbQQQ<<<"DD)##(?(P(P#"D #Y"66699*FBD99 	#EEYYA624PP 	#"E
&)
,
,C  r&   fivewnumbersreport_digestdict[str, Any] | Nonec
           
     >    t          |                    d          pt          |                                                    pt          |          }
t	          t          |                    d          p|p|          d          pt	          |d          }t	          t          |                    d          pd          d          }t	          t          |                    d          pd          d          }t	          t          |                    d	          pt           |                    d
          }t          |pi           }|st                     rt                     }t           |          }t          |	t                    r|	ni }|s.|r,t	          d                    |d d                   d          }dd}dd}|dk    rt	          t          |                    d          pd          d          }t	          t          |                    d          pd          d          }|
 d| d}|r	|d| d z  }|r	|d!| d z  }|r	|d"| d z  }|r?t                              d#t          |          t          j                  r |||          } |||          }d$| |s|rd%| |rd&|z   nd nd'|rd(| nd)g}|r7d*|                    d*d                                           g|d d         z   }|
 d+| d,|rd-|z   d.z   nd |rd!|z   d.z   nd |rd"|z   d.z   nd |rd/|z   d z   nd0 | 	}d1| |s|rd%| |rd&|z   nd nd2|rd3| nd4|rd(| nd5d6| g}|r|                    d7|            |||||          S |d8v rt'                     }d9 |                    d:g           D             }t	          t          |                    d;          pd          d          }t	          t          |                    d<          pd          d=          }t)          |o%t                              d> t          j                            }t)          t                              d? t          j                            }|rd                    |d d7                   } |
 d@| dA|  d }|r	|dB| d z  } |||pdC          } |||          }|
 dD|  d }|r	|dE| d z  } |||pdF          } ||dG          }dH|  |rdB| ndIdJg}|r||d<   dK| dL|  dB|pdM dN|pdO dPdQg}|r|                    dR|            |||||          S |rR|
 dS| dT| }|r |||          }|
 dU}g dV}|r||d<   g dW}|r|                    d7|            |||||          S |
 dS| dX|dYk    rdZnd[ d }|d\| d z  }|r	|d]| d z  }||z  }|
 d^|dYk    rdZnd[ d_| d`|rda|z   d z   nd db| 	}dc| |rd]| ndddeg}|r||d<   dK| d]|pdf d6| dgg}|r|                    d|            |||||          S |dhk    rt+           |          }!|!r'di                    dj |!d d         D                       nd}"|"s1|r/ fdk|d d         D             }#dld                    |#           d }"|
 dS| dm| d }|"r	|dn|" d z  }|r |||          } ||t-                               }|
 do| d`}|"r ||dp|"           }n ||dq          } ||drt-                                }ds| |!rdt|!du          n0|r-dvt/          |du         t1           |du                              ndwdxt-                      g}|r||du         |d         g}dy| |!rdt|!du          ndzt3          |!          d{k    rd||!d{          nd}d6t-                      d~g}|r|                    d7|            |||||          S |dk    rt          t          |                    d          pd                    }$d |                    d          pg D             d d7         }%|$p|
 d| d| d | }|}|$r|$ d}|%pd| |rd| nddg}|%d d          }|sd| d|| dg} |||||          S |
 d| d| d }|r	|d| d z  }|r	|d| d z  } |||          }|r |||          }|
 d| d`|rd|z   d z   nd |rd|z   d z   nd d| }d| |s|rd| |rd&|z   nd nddg}|r||du         |d{         g}d| |rd| nd|rd| ndd6| dg}|r|                    d7|            |||||          S )Nr   r   rR   r   r   r   r   r   r   n   )rE   r)   r   summaryr   bulletsr   detail_summarydetail_linesr   r	   c                   t          |           d d         }t          |          d d         }d |D             d d         }t          |          dk     r[|D ]X}t          |          dk    r nBt          t          |                    d d         }|s>||v rC|                    |           Yt	          |d          }	||d d         ||	d d         dS )	N@    c                    g | ]B}t          t          |                    t          t          |                    d d         CS Nx   rJ   rK   s     r$   rN   zAbuild_universal_digest_frame.<locals>._finish.<locals>.<listcomp>E  sC    WWWAJsSTvvDVDVWz#a&&))$3$/WWWr&   r*   r   r   r'   )r   r   r   r   )r   r3   r   r2   normalize_detail_lines)
r   r   r   r   summary_cleandetail_summary_cleanbullet_rowspadpdetail_rowss
             r$   _finishz-build_universal_digest_frame.<locals>._finishB  s   "7++DSD1).99$3$?WWWWWXZYZXZ[{a# & &{##q((Es3xx((#. ##""1%%%%,\CCC$"2A22'O	
 
 	
r&   basepiecec                    t          |           }t          |          }|s|S |r t                              d|          s|dz  }|r t                              d|          s|dz  }| | S )Nu   [。！？!?]$   。)r   r   r   )r   r   headtails       r$   _append_sentencez6build_universal_digest_frame.<locals>._append_sentenceX  s    $%   	K 			"3T:: 	EMD 			"3T:: 	EMDr&   ro   rT   rU   u	   釋出「u   」活動資訊。u
   時間為 r   u
   地點在 u   主要誘因是 rV   u   活動重點：u   時間與地點：u   ／u*   時間與地點：請以原文公告為準u   參與方式：u6   參與方式：先看原文確認報名與參與門檻rS   u    這則活動主軸是「u   」，u
   時間在 u   ，u   參與方式為 u'   參與方式請以原文公告為準。u   活動主軸：u!   時間與地點：待官方補充u   獎勵重點：u-   獎勵重點：請以原文獎勵說明為準u?   參與方式：先確認報名方式、截止時間與名額。u	   影響：r*   >   rr   rq   c                n    g | ]2}t          |                                          #t          |          3S rI   r   r    rK   s     r$   rN   z0build_universal_digest_frame.<locals>.<listcomp>  s1    TTTASVV\\^^TQTTTr&   r   r   r   Z   r   r   u   更新了「u"   」功能規則。門檻分數為 u   快照時間：uB   門檻屬動態參考值，會隨參與人數與分數分布調整u    這則是 SBT 門檻更新：u   快照時間為 u9   分位門檻是動態參考值，會隨分數分布上修uB   重點是快照前的衝分策略與快照後的最終分位確認u   門檻分數：u-   快照時間：請以官方公告時間為準uV   你要做什麼：快照前持續拉分，快照後核對最終門檻與 SBT 等級。u   更新主軸：u   本次門檻：u   待官方補充u   規則說明：u*   門檻為參考值，會隨分布變動。u;   影響對象：Beta 參與者（依分位對應等級）。uN   下一步：快照前提升分數，快照後回看官方最終分位公告。r   u	   發布「uC   」功能更新。MFA 已可啟用，登入需驗證器動態碼。u    這則更新重點是 MFA 登入保護。啟用後會在登入流程增加驗證器動態碼步驟，可降低帳號被盜風險，但使用流程會多一次驗證。)u0   更新重點：MFA（二階段驗證）已上線u9   影響流程：登入需輸入驗證器 6 位數動態碼uF   你要做什麼：到設定頁啟用 MFA，並準備備援登入方式)u'   更新主軸：帳號安全驗證升級u-   機制重點：新增驗證器動態碼步驟u4   適用對象：目前使用 Privy 登入的使用者u<   影響：安全性提升，但登入流程增加一次驗證u2   下一步：完成 MFA 設定並測試備援流程u   」rq   u   官方公告u   功能更新u
   重點是 u   時間節點：u    這則屬於u   ，核心為「u   」。u   主要時間節點在 u!   對使用者的直接影響是：u   更新重點：u   時間節點：待官方公告uK   你要做什麼：先確認生效時間與開放條件，再安排操作。u   待官方公告u<   下一步：追蹤官方下一則公告確認最終規則。rp   r   c                R    g | ]$}t          |                              d           %S )u   。；; )r   rstriprK   s     r$   rN   z0build_universal_digest_frame.<locals>.<listcomp>  s,    "Z"Z"Z:a==#7#7
#C#C"Z"Z"Zr&   c           	     L    g | ] }t          |t          |                    !S rI   )_number_with_unit_find_number_contextrL   rM   rD   s     r$   rN   z0build_universal_digest_frame.<locals>.<listcomp>  s0    aaaPQ'+?+J+JKKaaar&   u   文中提到 u   」市場訊號。重點是 u   數字意義：u    這則市場更新主軸是「u   貼文數字代表：u!   此則以市場風向觀測為主u   影響面：   市場重點：u   數字解讀：r   u   數字脈絡：u-   數字脈絡：此貼文以市場觀察為主u   可能影響：u   市場主軸：u<   數字解讀：請搭配原文上下文理解數字用途。r   u	   補充：u?   補充：留意是否有後續供給、價格或成交更新。u6   下一步：比對至少兩個來源後再做判斷。rs   c                    g | ]B}t          t          |                    t          t          |                    d d         CS r   rJ   rK   s     r$   rN   z0build_universal_digest_frame.<locals>.<listcomp>  sG    pppq]ghklmhnhn]o]op*SVV,,TcT2pppr&   u   整理了「u   」攻略重點。重點是 u1    可直接拿來做方案比較與執行規劃。u   整理主軸：u   時間參考：u!   時間參考：近期整理內容u9   使用方式：先對照需求與成本，再選方案。u   重點主題：u6   下一步：依預算與時程篩選可執行方案。u   分享了「u   」社群近況，重點是 u	   場景：u"    這則社群內容的核心是「u   時間參考為 u   主要場景在 u   判讀建議：u   貼文重點：u   時間/場景：u1   時間/場景：原文未提供明確時間地點uQ   下一步：看原文與同帳號續篇，確認是否有規則或活動補充。u   社群主軸：u$   時間參考：以原文更新為準u   場景：線上社群討論u9   下一步：持續追蹤官方或同帳號後續補充。)
r   r   r   r   r   r   r   r   r   r	   )r   r   r   r   r   r   )r   rW   r   r    r!   r   r[   rC   build_event_factsrh   
isinstancedictr6   r   r   r   r   r/   insertr@   rA   _market_number_meanings_market_impact_liner   r   r3   )&rD   ri   r   r   r   r   r?   r   r   r   r   r   r   r   r   rE   sbt_howdigestr   r   rT   rU   r   r   r   r   threshold_factsr   r   r   is_threshold_updatesecurity_updater]   meaningsmeaning_lineprettydigest_summarydigest_bulletss&   `                                     r$   build_universal_digest_framer   (  s     eii?"6w"?"?
@
@
F
F
H
H
iL`ahLiLiCS6!2!2!Ij!IEJJTVWWW[lmr|~[[[DS6!2!2!8b992FFFDc%))G"4"4":;;RHHHE
C		% 0 0 VOFI4V4VWWad
e
e
eC!+"344E *^F++ *!&))(u===G(==E]]2F GH G HRaRL!9!92FFF
 
 
 
,	 	 	 	 G"3uyy':':'@b#A#A2NNN)#eii.H.H.NB*O*OY[\\\<<5<<< 	.-D----G 	/.E....G 	65&5555G 	9ryy!5z&7I7I24PP 	9&&w88G""7C00$d$$MQ  MUZ  MII%'GRIII  aM1>|-m---D|

  	qaW__=RTV-W-W-]-]-_-_aabelmonomoeppG  T  04<t#e++"16>u$u,,B 9?F"V+e33B @M{"]2U::R{	
   	 %d$$MQ  DUZ  DII%'GRIII  aD*0e&f&&&6e1>  F-m---  EF
  	,7+++wwFFF///5f==TT!4!4Wb!A!ATTT$S)<)<Z)H)H)NB%O%OY[\\\(_-@-@-P-P-VTV)W)Wacddd"vbii gioqsquvv
 
 II R 
 
  	K

5!9--Iaa%aaS\aaaG ;:X::::&&w  1E  AE  F  FG&&w44G #QQ9QQQN C"BX"B"B"BB--nl  ?J  OJ  K  KN--n  ?C  D  DN-)--08m,(,,,>mhG
  %$
($((-)--A("?.?AA`,"^2^``M`L  0##Aw///77G^\JJJ 	KvvuvvqtvvG =**7G<< U U U 
  G
  %$
  L  0##Aw///77G^\JJJuu5uu	^@[@[nnaouuu))))) 	322222G3 6 6I4O4O..Uc 6 66 6<@H(4/%77b6 6 146 6 	 %d$$(,R$d$$$2RY

  	! GAJ$d$$9d7&799J	
  	,7+++wwFFFH*67;;_gouzz"Z"ZXVXWXVX\"Z"Z"Z[[[mo 	E 	EaaaaU\]_^_]_U`aaaFDEJJv,>,>DDDLOO5OOdOOO 	;:::::G 	9&&w88G""7,?,G,GHHLLLLL 	c--n>dVb>d>deeNN--n>abbN)).:fI\]cIdId:f:fgg$d$$/7  [+hqk+++  ^e  ?Z  ?ZPabijkbl  oC  DJ  LS  TU  LV  oW  oW  QX  QX  ?Z  ?Z  ?Z  kZ;1&99;;

  	8
GAJ7G$d$$/7{+hqk+++={),X):):%%%%  AB5+F3355D
  	,7+++wwFFFH#C

9(=(=(C$D$DEEppVZZ	=R=R=XVXpppqsrsqst is$i$i$i$i[_$i$idg$i$i  	b .aaaN  
$d$$(,U$d$$$2UG%

 &aaa( 	($((!C!!HL
 wwFFFNN%NNTNNNG /.T.... *)u))))w,,G 5""7G44 	  	 $ 	  	 26>%--B	 38@&..b	  	  	  	   	!$  GK  	Nu  	NC4CE!A%%--rCCC  [N[G
  4GAJ
3 $  $(T $   .T$GE*GCCL  (Aw'''77G^\BBBr&   c                   t          t          |                                                     }g d}|D ]>\  }}t                              ||t          j                  rt          |d          c S ?|dk    rt          | dd          S |dv rt          dd          S |dk    rt          d	d          S |d
k    rt          dd          S t          |d          S )N))zH(?:sbt|points?).{0,36}(?:threshold|top\s*\d+%|snapshot)|threshold updateu%   SBT 分位門檻與快照時間更新)zH\bmfa\b|multi[-\s]*factor|authenticator|setting page|secure your accountu   MFA 帳號安全驗證已上線)zGfirst card shop.*hong kong tcg tour|hong kong tcg tour.*first card shopu(   香港 TCG Tour 首站卡店現場更新)z5community gathering.*korea|korea.*community gatheringu   韓國社群聚會活動公告)z-rip packs together|take photos|chat about tcgu0   現場一起開包、拍照並交流卡市觀點)z>line(?:d|s)? up for packs|reacting to pulls|collecting storiesu9   玩家現場交流抽卡成果，社群互動熱度提升)z#entertainment rwa night|kicking offu-   Entertainment RWA Night 現場活動進行中)zrecord breaker|sold foru   高價成交案例釋出)z7pokemon[^$]*\$857\s*million|\$857\s*million[^$]*pokemonuE   官方引用研究指出寶可夢單一市場營收達 8.57 億美元)zCmarket size[^$]*\$11\.8\s*billion|\$11\.8\s*billion[^$]*market sizeu7   研究預估全球 TCG 市場規模可達 118 億美元)z(beta\s*2\.0.*ending|points will be resetu'   Beta 2.0 即將結束，積分將重置)z6one piece.*infinite gacha|moving deeper into one pieceu%   One Piece Infinite Gacha 進度更新)zlegacy packu-   Legacy Pack 卡包上新與價格區間更新)zama|community session|plazau   社群直播與互動預告)zweb3 festivalu    Web3 Festival 社群行程更新r   r   rp   u   （英文原文）>   rr   rq   uB   功能規則已更新，請依貼文列出的時間與條件操作ro   u0   活動資訊已釋出，請先確認時間地點rt   rm   )rv   r   r   r   r   r   r!   )r   ri   r   r7   hintsr|   r}   s          r$   _english_focus_hintr   I  s   
z$//
0
0
6
6
8
8C  E"  8 8
U99S#rt$$ 	8$UB777777	8H E!=!=!=rJJJJ/// !eoqrrrrG !S]_````I !5rBBBBUB////r&   tokenc                   t          |           }|                                }t          |pd                                          }|                    |          }|dk     r2|                    d          r|                    |dd                    }|dk     r
|d d         S |t          d|dz
            t          t          |          |dz                      S )Nr   r   $r      F   d   )r   r   r   findr   r   minr3   )rD   r   r7   lowtoken_lidxs         r$   r   r   j  s    
V

C
))++C%+2$$&&G
((7

C
Qww7%%c**whhwqrr{##
Qww4C4ys1cBhSXXsSy!9!99::r&   r   c                   t          |                               dd                              dd          }t                              d|t          j                  }|sdS 	 t          |                    d                    }n# t          $ r Y dS w xY w|                    d                                          }ddd	d
	                    |          }|sdS ||z  }t          |t          |          z
            dk     rt          t          |                    d}n*|d                    d                              d          }|  d| dS )Nr   r   rk   z\$?(\d+(?:\.\d+)?)([kmb])r   r   i  i@B i ʚ;)kr9   bMbP?,.2f0.   （約 
    美元）)r   r/   r   	fullmatchr   floatr   	Exceptionr   rW   absroundr   r   )r   compactr9   r   suffix
multipliervalue
value_texts           r$   _expand_dollar_suffixr  v  sV   oo%%c2..66sB??G
17BDAAA rQWWQZZ     rrWWQZZF9=AAEEfMMJ r:E
55<<  5((E%LL))--

__++C0077<<
00*0000s   #"B 
BBcontextc                d   t          |           }|r|                    d          sdS t                              d|          }|sdS 	 t	          |                    d                              dd                    }n# t          $ r Y dS w xY wt          |          }|                    d          }|                    dd          }dt                              |           dt                              |           d}t          	                    d	| d
|t          j
                  }	|	s*t          	                    d| d|t          j
                  }	|	sdS t          |	                    d          pd                                          }
d}d}|
dv rd}d}n|
dv rd}d}n|
dv rd}d}|sdS ||z  }t          |t          |          z
            dk     rt          t          |                    d}n*|d                    d                              d          }| d| d| dS )Nr   r   z#^\$?\s*([0-9][0-9,]*(?:\.[0-9]+)?)$r   r   z(?:|)z\$?\s*uJ   \s*(billion|bn|million|mn|thousand|十億|十亿|百萬|百万|千)(?:\b)?uI   (billion|bn|million|mn|thousand|十億|十亿|百萬|百万|千)\s*\$?\s*z(?:\b)?g        >      十亿   十億bnbilliong    eAr  >      百万   百萬mnmilliong    .Ar  >      千thousandg     @@r  r   r   r   r   rk   r  r  )r   r   r   matchr  r   r/   r  escaper   r   r   r   r  r  r   r   )r   r  r   r9   r   ctxnum_rawnum_altnum_pat	scale_hit
scale_wordr
  r}   r  r  s                  r$   _expand_dollar_by_contextr$    s{   sOOE ((-- r
7??A rQWWQZZ''R0011   rr W

CggajjGooc2&&G>BIIg&&>>7););>>>G		e'eee
 I
  
IIiY`iiiD
 
	  rY__Q''-2..4466JJE:::$
	<	<	< 
	*	*	*
 r:E
55<<  5((E%LL))--

__++C0077<<
::e::J::::s   	6B   
BBc                   t          |           }|s|S t          |                                          }t                              dd|          }d|v r|S |                    d          r,t          |          }|r|S t          ||          }|r|S | dS t                              d|t          j                  r t          	                    d|          r| dS t          	                    d	|          r+t                              d
|t          j                  r| dS t                              d|t          j                  r t          	                    d|          r| dS t                              d|t          j                  r| dS t                              d|t          j                  r| dS t                              d|t          j                  r| dS t                              d|t          j                  r| dS t                              d|t          j                  r[t                              d|t          j                  r| dS t                              d|t          j                  r| dS | dS t                              d|t          j                  r| dS |S )N[^0-9.]r   %r   u   （美元）5   (legacy\s*pack|pack\s*\d+\.\d+|版本|version|series)\d+(?:\.\d+)?u   （版本）z(19|20)\d{2}u)   年|year|timeline|roadmap|forecast|預估u   （年份）'   serialized|限量|編號|编号|/\s*\d+u   （序號）u   \bntd\b|台幣|新台幣u	   （NTD）z\busdt\bu
   （USDT）u   \busd\b|美元u*   \bpoints?\b|積分|分位|threshold|門檻u   （積分）u6   physical cards|cards?|張卡|卡片總量|發行總量u   \bbillion\b|十億|亿u   （十億張卡）u   \bmillion\b|百萬u   （百萬張卡）u   （張卡）u&   per\s*(pack|pull)|每包|每抽|單包u   （每抽/每包）)
r   r   r   rZ   r   r  r$  r   r   r  )r   r  r   r  plainexpanded
contextuals          r$   r   r     s   
U

C 

W


#
#
%
%CFF:r3''E
czz

~~c $(-- 	O.sC88
 	####	yyI3PRPTUU $Z\ZfZfgwy~ZZ $####	||OU++ $		:fhkmomq0r0r $####	yy;S"$GG $BLLYikpLqLq $####	yy,c2488 !    	yyc24(( "!!!!	yy"C.. $####	yy>RTJJ $####	yyJCQSQUVV $99.RT:: 	.----99*C66 	.----####	yy:CFF +****Jr&   c                   t          |           }|                                }g }t                      }|d d         D ]0}t          |          }t	          |t          ||                    }|                                }	d|	v }
|                    |	          }|dk     r2|	                    d          r|                    |	dd                    }|dk    r9|t          d|dz
            t          t          |          |dz                      n	|d d         }d}t                              d	d|	          }t                              d
|t          j                  r"t                              d|          r| d}n|
s-t                              d|t          j                  r| d}ne|
s-t                              d|t          j                  r| d}n6t                              d|t          j                  r| d}n	t                              d|t          j                  r| d}nt                              d|t          j                  r| d}nt                              d|t          j                  r| d}nt                              d|t          j                  r| d}nYt                              dt          |                    r,t                              d|t          j                  r| d}n| d}t!          |          }|r||v r|r|                    |           |                    |           t          |          dk    r n2|S ) Nr   r   r   r   @   rR   r   r   r&  r(  z\d+\.\d+u+    在這裡是版本編號，不是價格。r*  u(    代表限量編號或稀有度門檻。uL   produced|累計|累计|cumulatively|physical cards|卡片總量|發行總量u(    代表已發行實體卡數量規模。u   revenue|營收|收入|generatedu(    在這則貼文裡代表營收規模。u&   flipping|flip|profit|收益|利潤|赚u+    代表單筆交易收益或利潤規模。u7   market size|市場規模|forecast|預估|by\s*2030|2030u"    代表市場規模的預估值。u:   sold|sale|成交|售出|拍出|record|acquired|deal|交易u(    代表成交金額或價格里程碑。uJ   per\s*(pack|pull)|每包|每抽|單包|售價|price|top value|最高價值u%    代表產品售價或價值區間。r)  u    pack|版本|series|legacy|卡包u"    多半是版本或批次編號。u(    是貼文提到的市場參考數據。r*   )r   r   r,   r   r   r   r   r   r   r   r3   r   rZ   r   r   r  r0   r1   r2   )rD   r   r7   r   outseennr   	display_nr   is_moneyr   r  r<   	plain_numr=   s                   r$   r   r     s   
V

C
))++CCUUDRaR[ & &A%e-A#u-M-MNN	++--'>hhw77w))#..7((7122;''CDG1HH#c!S2X&&CHHcBh(?(??@@RUVZWZVZR[FF:r733	99MwXZX\]] 	Jbdbnbnoz  }F  cG  cG 	JLLLDD 	Jbii(RT[]_]abb 	JIIIDD 	J		*y  |C  EG  EI  !J  !J 	JIIIDDYY97BDII 	JIIIDDYY@'24PP 	JLLLDDYYQSZ\^\`aa 		JCCCDDYYTV]_a_cdd 	JIIIDDYYdfmoqostt 	JFFFDD\\*CFF33 	J		Begjlnlp8q8q 	JCCCDDIIID 	3$;; 	HHSMMM

4s88q==E Jr&   c                d   t          |           }t                              d|t          j                  rdS t                              d|t          j                  rdS t                              d|t          j                  rdS t                              d|t          j                  rdS d	S )
NzAone piece|black label|champion prize|high-end move|top collectorsuV   這會強化高端收藏市場信心，並提高 One Piece 相關標的的關注度。u)   market size|forecast|預估|成長|growthu?   這則內容會提高社群對市場成長議題的關注度。u   sold|成交|拍出|recorduB   這則內容會把討論焦點拉到高價成交與估值區間。u!   pack|卡包|launch|上新|releaseuH   這則內容直接影響玩家對入場時機與開包策略的判斷。uN   這則內容反映當前市場討論方向，建議搭配原文脈絡判讀。)r   r   r   r   )rD   r7   s     r$   r   r     s    
V

C	yyUWZ\^\`aa hgg	yy=sBDII QPP	yy-sBD99 TSS	yy5sBDAA ZYY[[r&   r   r   c                j   t          d                    | g|z                       }|sdS t          t                              d|                    }t          t                              d|t          j                            }t          t                              d|                    }|o| p|S )Nrk   Tz\$?\d[\d,]*(?:\.\d+)?%?uu   代表|意指|用來|售價|成交|營收|市場規模|版本|單位|區間|預估|預測|影響|帶動|反映|說明u$   (提到的數據包含|數據[:：]))r   r6   rA   r   r   r   )r   r   r   
has_numberhas_meaninghas_templates         r$   _market_is_number_dumpr;  )  s    chhy723344D tbii :DAABBJ
		 ED	
 	
 K 		"I4PPQQL;{?:l;r&   c                   t          |           }t          |d          }|r|d         n|}t          |          dk    r|d         nd}t          |d          }t	          |d          }|dk    rt          |          ni }	|dk    rt          |          ni }
t          |          }t          ||          }t          |d	
          pt          |d	          }|rt          |d
          nd}t          |          rdn|}t          |          rdn|}|s|rt          |||          }|s|rt          |p|||          }|dk    rCt          |          dv r2t          |d
          pt          t          |          d          }|r|}|r|rt          ||          dk    rd}t          |d
          pt          |d          pd| d}t          |          r|n|}| d| }t!          |||||p|p||	|          }t#          |||||p|p|||||	|

  
        }t          t%          |                    d          pd                    }t)          |                    d          t*                    r|                    d          ng }t-          d |D             d          }dgdgdgdgdgdgd}|                    |g           D ],}t          |          dk    r n|                    |           -|st          | d| d           }t          ||          d!k    st1          |          st          | d| d           }||d d"         |d d         d#S )$N   r'   r   r   r   r*   ro   rs   r   r   r   rt   >   0   社群互動貼文重點在現場動態與回饋rm   X   gQ?r   z updateu   ｜rD   ri   r   r   r   r   r?   
rD   ri   r   r   r   r   r?   r   r   r   r   r   c                F    g | ]}t          t          |                    S rI   rJ   rK   s     r$   rN   z(build_editorial_copy.<locals>.<listcomp>n  s&     J J JCFF!3!3 J J Jr&   uB   建議動作：先看原文確認時間、地點與參與方式。uH   影響：這則內容會影響社群對市場價格與熱度的判讀。u'   下一步：留意官方後續公告。u0   下一步：確認正式開放條件與時間。u0   使用建議：先比較方案差異再採用。u6   延伸追蹤：觀察後續是否出現明確規則。rn   u   已完成重整，主軸為「u-   」，可查看下方重點與原文連結。g=
ףp=?i  )titler   r   )r   pick_signal_linesr3   r5   extract_numeric_factsr   build_report_digestrw   r   r   ry   rx   r   r0   rv   similarity_ratior   r   r   rW   r   list_unique_non_emptyr2   r   )r   ri   r   rD   rc   leadsecond_liner?   r   r   r   prefixr   r   second_focuslead_focus_cnsecond_focus_cnfallback_focus
title_seed
title_bodyrC  r   framer   bullets_seedr   fallback_by_typer   s                               r$   build_editorial_copyrV  9  s^   FfA...E(588&D!%jj1nn%(("K%fA666H#F!444G/8G/C/C#F+++K3<3H3H'///bMi((FtY//E%dB777R=r;R;RJDOW'R@@@@UWL*:66FBBJM,\::LbbO FZ F+FIuEE W| W-k.CVYPUVVI*]";";  @J  #J  #J-fbAAAt]SghnSoSoqsEtEt 	+*M = -=o}-]-]ae-e-e%dB777l=QS;T;TlXl\cXlXlXlJ*:66FJJ&&*&&E!8Z85  E )!8Z85#  E UYYy117R8899G+5eii	6J6JD+Q+QY599Y'''WYL J J\ J J JRSTTTGVW]^BCFGEFLM   ##Ir22  w<<1Es |zzezzz{{((4//}W7M7M/zzezzz{{4C4=2A2;  r&   r   rc   Anyr(   c                Z   t          | t                    sg S g }t                      }| D ]}t          t	          |                    }|s!t          |          }|r||v r7|r|                    |           |                    |d d                    t          |          |k    r n|S )N   )	r   rH  r,   r   r   r0   r1   r2   r3   )rc   r(   r0  r1  r   r   sigs          r$   r   r     s    eT"" 	CUUD  #c((## 	 	3$;; 	HHSMMM

4:s88uE Jr&   event_facts_overridec                R   t          |           }|sdg dS t          |d          }|r|d         n|}t          |          dk    r|d         nd}t          ||          }t	          |d          pt          |d          }	|rt	          |d	          nd}
t          |	          rt          |||          }	t          |
          rt          |p|||          }
|
rt          |
|	          d
k    rd}
t          |d          }t          |d          }t          |pi           }|dk    r:t          |          }|                                }|                    |           |}t          |||||	p|||          }|dk    rt!          |          ni }t#          |||||	p||||||
  
        }t          t%          |                    d          p|                    d          pd                    }t)          |                    d          d          }|s$t)          |                    d          d          }|
r5d|
 t+          fd|D                       s|                               t)          |d          }|                    d          pd| }|st          | d| d          d d         }n[t          t/          |                    dk     r;|r9d                    |d d                   }t          | d|           d d         }||d d         dS ) Nr   )r   r      r'   r   r   r   r   P   gffffff?r   ro   r@  rs   rA  r   r   r   r   r   u   補充脈絡：c              3  X   K   | ]$}t                    t          |          k    V  %d S N)r0   )rL   rf   rK  s     r$   	<genexpr>z$build_detail_copy.<locals>.<genexpr>  s6      VV#:k**joo=VVVVVVr&   r   r   u    這篇內容主軸是「u-   」，建議搭配原文查看完整脈絡。r   $   r   r   u    重點補充：)r   rD  r3   r   r   ry   rx   r   rG  r5   rE  r[   r   copyupdater   rF  r   r   rW   r   anyr2   rv   r6   )r   ri   r   r[  rD   rc   rJ  secondr   r   rM  r?   r   r   inferredmergedr   r   rS  r   r   r   r   rK  s                          @r$   build_detail_copyri    s    F :"$b999fA...E(588&DUaU1XXRFtY//E%dB777R=r;R;RJ?EM';;;;2L
## C(EBB
%% O*6+;VYNN (zBBcII%fA666H#F!444G'(<(BCCKG$V,,k"""&  E 4=3H3H'///bM('%#  E  EII.>$?$?$]599YCWCW$][] ^ ^__N)%))N*C*C1MMML M-eii	.B.B!LLL -666VVVVVVVVV 	-,,,),a@@@L
))E


+m'mmC T#s$y$yU$y$y$yzz{|{  A	!.11	2	2R	7	7L	7jjbqb)**#~$L$Ls$L$LMMdsdS($RaR(  r&   card	StoryCardNonec                   t          | j        p| j        p| j                  }|sd S t	          || j        | j        t          | j                            }t          t          |
                    d          pd                    }t          |
                    d          d          }t          t          | j        pd                    }t          | j        d          }t          d |D                       }t          t                               |                    p|dk    }| pnt%          t'          |                    d	k     pNt)          |t          | j        pd                    d
k    p&t          t                               |                    }	t%          |          dk     p#|t+          dt%          |          dz
            k    }
| j        dv r|rd}	d}
| j        dv rt-          d |D                       }|rd}	d}
| j        dk    r"|p	|d d         | _        |d d         | _        d S |	r
|r|| _        n|r|d d         | _        n	|r|| _        |
r|r	|| _        d S |d d         | _        d S )Nr[  r   r   r   r   r'   c              3  h   K   | ]-}t                               t          |                    )d V  .dS r   NGENERIC_DETAIL_REr   r   rK   s     r$   ra  z%enrich_detail_view.<locals>.<genexpr>  s@      aa!9J9Q9QR\]^R_R_9`9`aAaaaaaar&   r   rb  q=
ףp?r*   r   >   ro   rr   rt   rq   T>   rr   rq   c              3  |   K   | ]7}t                               d t          |          t           j                  V  8dS )u8   (活動主軸|時間與地點|獎勵重點|參與方式)N)r   r   r   r   rK   s     r$   ra  z%enrich_detail_view.<locals>.<genexpr>  sU       !
 !
 IIQS]^_S`S`bdbfgg!
 !
 !
 !
 !
 !
r&   rp   r   )r   raw_textr   rC  ri  ri   r   r[   r   r   rW   r   r   r   sumrA   rr  r   r3   rv   rG  r   re  )rj  	base_textbuiltbuilt_summarybuilt_linesexisting_summaryexisting_linesgeneric_line_hitshas_generic_detailweak_summary
weak_linesleaked_event_frames               r$   enrich_detail_viewr    s   4=FDLFDJGGI 243CDD	  E s599-=#>#>#D"EEFFM(>)B)B!LLLK!#d&9&?R"@"@AA+D,=QGGGNaa~aaaaa/667GHHIIbM^abMb 	<#$45566;	<,j9K.L.LMMQUU	< !(()9::;;	  ^$$q(`,=QNH[H[^_H_A`A`,`J~HHHM_H
~444  !
 !
#!
 !
 !
 
 
  	LJ~!!+E/?/E'O , ,+	 ,.tt4	 ,+ /k /'*2A2.r&   c                6   | j         p| j        }t          |d          }t          |d          }t	          | j        p|| j                  }| j        dk    r| j        pt          |          }|                    d          r-|                    d          rd| d|d          d|d          d	S |                    d          rd| d|d          d
S |r-|                    d          rd| d|d          d|d          d	S |rd| d|d          d
S d| dS | j        dk    rt          |          }d |                    dg           D             }t          |                    d          pd                                          }|r4d                    |d d                   }	|rd| d|	 d| d	S d| d|	 dS |rd| d|d          dS d| dS | j        dk    rd| dS | j        dk    r7t          ||          }
|
rd | d	|
d          S |rd | d!|d          d"S d#| d$S d% | j        pg D             }|D ]D}t                              d&d|                                          }|rt#          |d'          c S E|rd(| d)|d          d	S d(| d	S )*Nr   r'   ro   r?   rT   u   活動 u
   ，時間 u   ，重點獎勵 r   u   ，建議提前安排參與。r   u'   ，建議追蹤報名與地點資訊。rr   c                n    g | ]2}t          |                                          #t          |          3S rI   r   rK   s     r$   rN   z%build_glance_line.<locals>.<listcomp>0  s1    NNNAs1vv||~~NQNNNr&   r   r   r   r)   r*   u   功能更新 u
   ，門檻 u
   ，快照 u   ，需留意快照時間。u   功能進度 u   ，時間節點 u   ，留意開放條件。u!   ，留意下一則官方公告。rq   u   官方公告 u$   ，請以原文作為最終版本。rp   r   u   。貼文提到 u   ，請搭配原文判讀。u   這則在談 u9   ，可作為市場熱度與價格走勢的觀測參考。c                    g | ]?}t          |                                          #t          t          |                    @S rI   r   r    r   rK   s     r$   rN   z%build_glance_line.<locals>.<listcomp>C  s9    RRRa3q66<<>>Rz#a&&!!RRRr&   u?   ^(核心重點|提及數字|補充內容|追蹤方向)[:：]\s*r?  u   社群焦點 u   ，提及數字 )ru  rC  r5   rE  r   ri   r   r   rW   r@   r   r    r6   r   r   r   rZ   ry   )rj  r   r?   r   r   rE   r\   r   r   r]   r   r   r   strippeds                 r$   build_glance_liner    s   
-
%4:C%c333H#Cq111Gtz0S$.AAE~   :$5c$:$:99Z   	fUYYx%8%8 	feUeeeJ.?eeQVW_Q`eeee99Z   	`_U__eJ.?____ 	`		(++ 	`_U__hqk__5QY?____ 	ZYUYYhqkYYYYGGGGG~""/44	NNw!;!;NNNy}}Z006B77==?? 	[

5!9--I [ZuZZ	ZZXZZZZZ5ZZIZZZZ 	`_5__(1+____GuGGGG~''JuJJJJ~!!*388 	=<U<<x{<<< 	dcUccGAJcccc_u____RRDL,>BRRRG / /66\^`bcddjjll 	/ 2.....	/ FEuEEgajEEEE%5%%%%r&   c                  	 t          d                    t          | j        pd          t          | j        pd          d                    d t          | j                                                  D                       g                    }g 	d"	fd}t          | j        pd          	                                
                                                    d	          }|                    d
          r |d           t          t                              |                    }t          t                               |                    }| j        dk    p$t%          |t          | j        pd                    }t          | j                  }| j        dk    rA|                    d          s*|                    d          s|                    d          rd}|r'|s%t%          |t          | j        pd                    }|r |d           d#d} ||| j        |          r |d           t*                              d|t*          j                  r |d           | j        dv s&t*                              d|t*          j                  r |d           | j        dk    s/t.                              |          r |                    d
          s |d            	s |d!           	S )$Nrk   r   c              3  4   K   | ]}t          |          V  d S r`  r   rK   s     r$   ra  z%infer_topic_labels.<locals>.<genexpr>S  (      XXSVVXXXXXXr&   r}   r   r   rl  c                T    | vr | t           v r                    |            d S d S d S r`  )ALLOWED_TOPIC_LABELSr2   )r}   labelss    r$   r1   zinfer_topic_labels.<locals>.addX  s?    5,@#@#@MM%      #@#@r&   r   r   officialro   timeline_isor?   rU   r   Teventsr   ri   rg   r   rA   c                   t          |           }|sdS t          d                    d |                                D                                 }t                              d|t          j                  rdS |r(t                              d|t          j                  rdS t                              d|t          j                  rdS t                              d|t          j                  rdS |d	v rPt                              d
|t          j                  rdS t                              d|t          j                  rdS dS )NFrk   c              3  4   K   | ]}t          |          V  d S r`  r  rL   vs     r$   ra  z@infer_topic_labels.<locals>._has_sbt_evidence.<locals>.<genexpr>p  s(      (L(LAQ(L(L(L(L(L(Lr&   rV   Tue   \bsbt\b|soulbound|積分|积分|points?|reward|獎勵|奖励|airdrop|snapshot|快照|threshold|門檻H   (threshold|snapshot|top\s*\d+%|快照|門檻).{0,28}(points?|積分|分)H   (points?|積分|分).{0,28}(threshold|snapshot|top\s*\d+%|快照|門檻)>   ro   rr   rq   u\   (reward|rewards|獎勵|奖励|airdrop|merch|周邊|周边).{0,24}(sbt|積分|积分|points?)u\   (sbt|積分|积分|points?).{0,24}(reward|rewards|獎勵|奖励|airdrop|merch|周邊|周边))r   r6   valuesr   r   r   )r   ri   rg   r7   
reward_txts        r$   _has_sbt_evidencez-infer_topic_labels.<locals>._has_sbt_evidencel  sh    	5(L(L9I9I9K9K(L(L(L L LMM
99)355 	4 	"))  %M  OY  []  [_  `  ` 	499`begigkll 	499`begigkll 	4<<<yyxz}  @B  @D  E  E tyyxz}  @B  @D  E  E tur&   sbtur   pokemon|寶可夢|宝可梦|one\s*piece|tcg|卡牌|卡片|pack|luffy|psa|snkrdunk|pricecharting|collectr|op\d{1,2}pokemon>   rr   rq   u`   coming|upcoming|roadmap|launch|release|版本|上線|上线|開放|开放|即將|预告|progressalphars   toolsother)r}   r   r   rl  )r   r   ri   r   rg   r   r   rA   )r   r6   r   ru  rC  r[   r   r  r   r    r   r   r   rA   STRICT_EVENT_CALL_REr   SBT_THRESHOLD_NOTICE_REri   _has_event_evidencetimeline_daterW   r   r   GUIDE_SIGNAL_RE)
rj  rD   r1   r   strict_event_callhas_threshold_noticehas_event_signalrE   r  r  s
            @r$   infer_topic_labelsr  M  s    #$$
 b!!HHXX&;D<L&M&M&T&T&V&VXXXXX	
   F F! ! ! ! ! ! $,$"%%++--3355<<SAAG)$$ J188@@AA 7 > >v F FGG~0{4G]`aeasaywy]z]z4{4{4{!$"233E~  eii
&;&; uyy?Y?Y ]b]f]fgq]r]r  c$5 c.vCHZH`^`DaDabbb H   ( 77 E


	yy}
  
 	I~444		k
9 94
 	G~!!v&& "/6/A/A)/L/L " 	G GMr&   Tkeep_existingc                   t          | j                  t          |           }|rrfd|D             z   }n|r|n}t          d                    t          | j        pd          t          | j        pd          d                    d t          | j	                  
                                D                       g                    }t          | j        pd                                                                                              d          }d|v rt          t                               |                    }t          t$                              |                    }| j        dv r1t)          |t          | j        pd                    sd	 |D             }|r3|s1t)          |t          | j        pd                    sd
 |D             }d|v rV| j        dk    p<t          t,                              |                    o|                    d           }|sd |D             }d|v rt          | j	                  }	d}
t0                              d|t0          j                  rd}
nt0                              d|t0          j                  rd}
nt0                              d|t0          j                  rd}
nht          d                    d |	
                                D                                 }|r(t0                              d|t0          j                  rd}
|
sd |D             }|                    d          rd|vr|                    d           |r|ndg| _        d S )Nc                    g | ]}|v|	S rI   rI   )rL   rM   existings     r$   rN   z'assign_topic_labels.<locals>.<listcomp>  s#    FFF1AX4E4EQ4E4E4Er&   rk   r   c              3  4   K   | ]}t          |          V  d S r`  r  rK   s     r$   ra  z&assign_topic_labels.<locals>.<genexpr>  r  r&   r   r  >   rr   rq   r  c                    g | ]
}|d k    |S r  rI   rK   s     r$   rN   z'assign_topic_labels.<locals>.<listcomp>      999A1==a===r&   c                    g | ]
}|d k    |S r  rI   rK   s     r$   rN   z'assign_topic_labels.<locals>.<listcomp>  r  r&   r  rs   r   c                    g | ]
}|d k    |S )r  rI   rK   s     r$   rN   z'assign_topic_labels.<locals>.<listcomp>  s    888A1<<a<<<r&   r  FrV   Tr  r  c              3  4   K   | ]}t          |          V  d S r`  r  r  s     r$   ra  z&assign_topic_labels.<locals>.<genexpr>  s(      ,L,LSVV,L,L,L,L,L,Lr&   u2   \bsbt\b|soulbound|snapshot|快照|threshold|門檻c                    g | ]
}|d k    |S )r  rI   rK   s     r$   rN   z'assign_topic_labels.<locals>.<listcomp>  s    666A1::a:::r&   r  r  )normalize_topic_labelstopic_labelsr  r   r6   r   ru  rC  r[   r   r  r   r    r   r   rA   r  r   r  ri   r  r  r  r   r   r   r2   )rj  r  rg  rh  rD   r   r  r  allow_toolsrE   sbt_okr  r  s               @r$   assign_topic_labelsr    s   %d&788H!$''H 4 4FFFFFFFF%38#$$
 b!!HHXX&;D<L&M&M&T&T&V&VXXXXX	
   F $,$"%%++--3355<<SAAG6 !5!<!<V!D!DEE#$;$B$B6$J$JKK>888ATU[jmnr  oA  oG  EG  kH  kH  BI  BI  BI899999F 	:(9 	:BUV\knos  pB  pH  FH  lI  lI  CJ  CJ  CJ 	:99999F&n0  AT/:P:PQW:X:X5Y5Y5bibtbtu~bb^ 	988888F%d&67799)62488 		FFYYbdjlnlpqq 	FFYYbdjlnlpqq 	FF#CHH,L,LU\\^^,L,L,L$L$LMMJ bii(]_ikmkopp  	766666F)$$ "6)A)Aj!!!"(7wiDr&   c                   t          | j                  p#t                              t          j                  }t          | j        p| j        |          \  }}t          | j
                  | _        || _        | j
        dk    rt          | j        p| j                  ni | _        t          t!          |           d          | _        t%          | j
        | j        |          | _        t+          | d           d S )Nbase_dtro   r   Tr  )_parse_iso_safepublished_atdatetimenowtimezoneutcextract_timeline_dateru  rC  choose_template_idri   template_idr  r   r   ry   r  glancecompute_urgency
importanceurgencyr  )rj  r  r  _timeline_labels       r$   enrich_card_metadatar    s    d/00NHLL4N4NG$9$-:U4:_f$g$g$g!L/)$.99D%DIM[bIbIb()D$*EEEhjD 1$ 7 7==DK"4>4?LQQDLD111111r&   Fpreserve_typec                $   | j         p| j        p| j        }t          | j                  p#t
                              t          j                  }t          ||          \  }}t          |          \  }}}|r| j        t          vr|| _        n| j        dv r|| j        k    r|| _        t          | j        pd                                          r(t          | j                                                  dvr|| _        | j        r| j        dgk    r|d d          | _        |r|| _        n| j        sd| _        t'          | j                  | _        | j        dk    rTt+          |          }	t-          | j                  }
|	                                }|                    |
           || _        ni | _        t5          t7          |           d          | _        t;          | j        | j        | j                  | _        tA          | d	           d S )
Nr  >   ro   rt   r   >   databriefpostertimelineu   觀點ro   r   Tr  )!ru  r   rC  r  r  r  r  r  r  r  classify_storyri   ALLOWED_CARD_TYPESr   layoutr    r   tagsr  r  r  r   r[   r   rc  rd  ry   r  r  r  r  r  r  )rj  r  rD   r  r  _inferred_typeinferred_layoutinferred_tagsinferred_factsexisting_factsmerged_factss               r$   normalize_card_semanticsr    s   ]8dl8djFd/00NHLL4N4NG+FGDDDOL!4B64J4J1M?M 'DN2DDD&	/	/	/MT^4S4S&t{ b!!'')) &S-=-=-C-C-E-EMt-t-t%9 %	hZ//!!!!$	  )  )$.99D~  *622.t/?@@%**,,N+++' 1$ 7 7==DK"4>4?DDVWWDLD111111r&   cardslist[StoryCard]c                2    | D ]}t          ||           d S )N)r  )r  )r  r  rj  s      r$   normalize_cards_semanticsr    s5     D D ]CCCCCD Dr&   u%  ^這則內容(?:屬於|偏向)|^重點摘要[:：]|主題脈絡[:：]|內容屬社群互動貼文|可作為討論基礎|適合當作趨勢參考|建議關注後續公告|需與其他來源交叉驗證|核心事件[:：]|關鍵數字[:：]|判讀建議[:：]|市場訊號[:：]|貼文提到的數據包含|這類資訊通常會直接影響市場預期與討論熱度|可先視為社群風向參考|官方更新方向已釋出，細節待後續公告|重點在(?:提升|同步|擴大|釋出|補充|反映)|若後續出現規則、獎勵或價格條件u   ^(分析主題|文中數據|使用方式|活動主軸|行動建議|觀點定位|追蹤方式|訊號定位|判讀建議|核心訊號|關鍵數字|決策建議|核心事件|提及數字|可見數字)[:：]u}   (可持續追蹤後續官方或社群回應|作為社群趨勢參考|持續追蹤|可作為研究線索，不直接當結論)uE   \$\s*\d[\d,]*(?:\.\d+)?[kmb]?\s*（(?:版本|序號|張卡|年份)）ut  (分享了社群現場觀察|可當風向參考|風向參考|若涉及規則、獎勵或價格|有機會延伸成後續活動或功能公告|現場重點[:：]|補充觀察[:：]|可能影響[:：]|下一步[:：]留意官方是否補充具體規則|先記錄生效時間，並追蹤下一則官方公告確認規則|重點在(?:提升|同步|擴大|釋出|補充|反映))c                .   t          |           }|sdS t                              |          rdS t                              |          rdS t	          t          |                    dk     rdS t          ||          dk    rdS t          |          sdS dS )NT   g
ףp=
?F)r   BAD_MONEY_UNIT_REr   GENERIC_SUMMARY_REr3   rv   rG  r   )r   rD   ss      r$   _summary_needs_rewriter    s    7A t"" t  ## t
""##b((t6""d**t t5r&   c                   | sdS d}d}d}d}| D ]}t          |          }|s|dz  }t                              |          r|dz  }t                              |          r|dz  }t                              |          r|dz  }t          ||          dk    r|dz  }|dk    rdS |t          dt          |           dz
            k    rdS |dk    rdS |t          dt          |           dz
            k    rdS dS )NTr   r   g?F)r   r  r   GENERIC_BULLET_RELOW_VALUE_BULLET_RErG  r   r3   )r   rD   generic	low_valuecopiedbad_money_unitr   r   s           r$   _bullets_need_rewriter  $  s;    tGIFN  sOO 	qLG##A&& 	 aN##A&& 	qLG%%a(( 	NIAv&&#--aKFt#aW)****tA~~tQGq())))t5r&   c                   | j         p| j        p| j        }|sd S t          || j        | j                  }t          |                    d          pd                                          }t          |                    d          t                    r|                    d          ng }| j        dk    rt          | j        pd          }d | j        pg D             }t          ||          pt          ||          pt          ||          }|r-|r|d d         | _        |rd |D             d d         | _        n|d d         | _        |d d         | _        d S t          | j        pd          }t          ||          r|r|d d         | _        d	 | j        pg D             }t          ||          rd
 |D             d d         | _        d S | j        dk    r,d |D             d d         | _        |r|d d         | _        d S d S d S )Nr   r   r   rp   c                    g | ]G}t          |                                          #t          t          |                    d d         HS r   r  rK   s     r$   rN   z*denoise_editorial_text.<locals>.<listcomp>M  C    \\\SQRVV\\^^\:c!ff%%dsd+\\\r&   r   c                    g | ]G}t          |                                          #t          t          |                    d d         HS r   r  rK   s     r$   rN   z*denoise_editorial_text.<locals>.<listcomp>W  sJ    cccQTWXYTZTZT`T`TbTbc
3q66 2 24C4 8cccr&   r*   c                    g | ]G}t          |                                          #t          t          |                    d d         HS r   r  rK   s     r$   rN   z*denoise_editorial_text.<locals>.<listcomp>a  sB    XXXAQXz#a&&!!$3$'XXXr&   c                    g | ]G}t          |                                          #t          t          |                    d d         HS r   r  rK   s     r$   rN   z*denoise_editorial_text.<locals>.<listcomp>c  C    [[[QCPQFFLLNN[
3q66**4C40[[[r&   rs   c                    g | ]G}t          |                                          #t          t          |                    d d         HS r   r  rK   s     r$   rN   z*denoise_editorial_text.<locals>.<listcomp>f  r  r&   )ru  r   rC  rV  ri   r   r   rW   r    r   rH  r   r   r  r  r;  )rj  rD   shapedshaped_summaryshaped_bulletsr   r   needs_rewrites           r$   denoise_editorial_textr  C  sa   ]8dl8djF !&$.$,GGFI..4"55;;==N.8I9N9NPT.U.U]VZZ	***[]N~!!T\/R00\\dl6Hb\\\"7F33 8$Wf558%gw77 	
  	' 4-dsd3 hcc.cccdfefdfg"4C4=DL"2A2;DL+,,Ggv.. ,> ,%dsd+XX$,2D"XXXGWf-- 0[[.[[[\^]^\^_	8	#	#[[.[[[\^]^\^_ 	0)$3$/DLLL	 
$	#	0 	0r&   c                   | D ]K}|j         p|j        p|j        }|st          ||j        |j                  }t          |                    d          pd                                          }t          |                    d          pd                                          }t          |                    d          t                    r|                    d          ng }|r|d d         |_        |r|d d         |_        |rd |D             d d         |_        t          |           t          |           t          |           Md S )	NrC  r   r   r   r   r   c                    g | ]G}t          |                                          #t          t          |                    d d         HS r   r  rK   s     r$   rN   z,apply_editorial_fallback.<locals>.<listcomp>z  sC    \\\SQRVV\\^^\Js1vv..tt4\\\r&   r*   )ru  r   rC  rV  ri   r   r   rW   r    r   rH  r   r  r  r  )r  rj  r   r  	new_titlenew_summarynew_bulletss          r$   apply_editorial_fallbackr  k  s]    ! !}::
 	%dDNDLII

7++1r2288::	&**Y//5266<<>>/9&**Y:O:OQU/V/V^fjj+++\^ 	)"4C4DJ 	-&tt,DL 	a\\k\\\]_^_]_`DLT""" &&&4    #! !r&   c                b   t          | j        p| j        p| j                  t          | j        pd          }t          | j        d          }|r t          t          |                    dk     rdS t          |t          | j        pd                    dk    rdS t                              |          rdS |rt          |          dk     rdS t          d |D                       }|t          d	t          |          d	z
            k    rdS rt          fd
|D                       rdS dS )Nr   r   r'   rb  Trs  r*   c              3  h   K   | ]-}t                               t          |                    )d V  .dS rp  rq  rK   s     r$   ra  z(_detail_needs_rewrite.<locals>.<genexpr>  s<      SSQ+<+C+CJqMM+R+RSqSSSSSSr&   r   c              3  Z   K   | ]%}t          t          |                    d k    V  &dS )gGz?N)rG  r   r   s     r$   ra  z(_detail_needs_rewrite.<locals>.<genexpr>  s9      UU!&z!}}f==EUUUUUUr&   F)r   ru  r   rC  r   r   r   r3   rv   rG  rr  r   rv  r   all)rj  r   rc   generic_hitsrD   s       @r$   _detail_needs_rewriter    sG   CCDDF,233G"4#4A>>>E c.w77882==tDL,>B!?!?@@DHHt(( t CJJNNtSS%SSSSSLs1c%jj1n----t #UUUUuUUUUU t5r&   c                Z   t          | j        p| j        p| j                  }t                              d|t          j                  sdS t          |          }d |                    dg           D             }t          |                    d          pd          
                                }|sdS t          d                    t          | j        pd          d                    d | j        pg D                       t          | j        pd          d                    d	 | j        pg D                       g                    t          fd
|d d         D                       }| p6|v p2t!          t                              dt          j                            }|o| S )Nr   Fc                n    g | ]2}t          |                                          #t          |          3S rI   r   rK   s     r$   rN   z3_threshold_update_needs_rewrite.<locals>.<listcomp>  s1    FFFs1vv||~~FSVVFFFr&   r   r   r   rk   c              3  4   K   | ]}t          |          V  d S r`  r  rK   s     r$   ra  z2_threshold_update_needs_rewrite.<locals>.<genexpr>  s(      ::SVV::::::r&   c              3  4   K   | ]}t          |          V  d S r`  r  rK   s     r$   ra  z2_threshold_update_needs_rewrite.<locals>.<genexpr>  s(      ??SVV??????r&   c              3      K   | ]}|v V  	d S r`  rI   )rL   tiermerged_texts     r$   ra  z2_threshold_update_needs_rewrite.<locals>.<genexpr>  s(      ==44;&======r&   r   u   (snapshot|快照))r   ru  r   rC  r   r   r   r@   rW   r   r    r6   r   r   r   re  rA   )rj  rD   rE   r   r   tier_hitsnapshot_hitr  s          @r$   _threshold_update_needs_rewriter    s   CCDDF99\^dfhfjkk u'//EFFUYYw33FFFE599Z((.B//5577H uSXX"##HH::dl&8b:::::#)r**HH??d&7&=2?????		
   K ====5!9=====H Lzh+&=z$ryyQegrtvtxGyGyBzBzL)\**r&   c                   t          | j                  }t          | j        p| j        p| j                  }d|vrt          |          sdS t          d                    t          | j        pd          d                    d | j	        pg D                       t          | j
        pd          d                    d | j        pg D                       g                    }t                              d|t          j                  rdS dS )	Nr  Frk   r   c              3  4   K   | ]}t          |          V  d S r`  r  rK   s     r$   ra  z+_sbt_acquisition_missing.<locals>.<genexpr>  s(      >>AQ>>>>>>r&   c              3  4   K   | ]}t          |          V  d S r`  r  rK   s     r$   ra  z+_sbt_acquisition_missing.<locals>.<genexpr>  s(      CCAQCCCCCCr&   u   SBT\s*取得方式T)r  r  r   ru  r   rC  rC   r6   r   r   r   r   r   r   r   )rj  r  rD   rh  s       r$   _sbt_acquisition_missingr    s   #D$566FCCDDFF>&#9#9uDL&B''>>$,*<">>>>>D'-2..CC$*;*ArCCCCC		
 	
	 	F 
yy&55 u4r&   c                	   t          | j        p| j        p| j                  }|sd S t	          || j        | j                  }t          t          |                    d          pd                    }d |                    d          pg D             d d         }t          | j        pd          }d | j	        pg D             }| j        dk    rct          ||          st          ||          r|r|d d         | _        t          ||          st          ||          r|r|d d         | _	        nxt          ||          r|r|d d         | _        t          ||          r|r|d d         | _	        | j        d	k    r+|r)t          | j	        pg           dk     r|d d         | _	        t          |           rt          || j        | j        t!          | j                  
          }t          t          |                    d          pd                    }t%          |                    d          d          }	|r|d d         | _        |	r|	d d         | _        t+          |           r5t	          || j        | j                  }t          t          |                    d          pd                    }d |                    d          pg D             d d         }
|r|d d         | _        |
r|
| _	        t          || j        | j        t!          | j                  
          }t          t          |                    d          pd                    }t%          |                    d          d          }|r|d d         | _        |r|d d         | _        t-          |           r7t	          || j        | j                  }t          t          |                    d          pd                    }d |                    d          pg D             d d         }
|r|d d         | _        |
r|
| _	        t          || j        | j        t!          | j                  
          }t          t          |                    d          pd                    }t%          |                    d          d          }|r|d d         | _        |r|d d         | _        d S d S d S )Nr   r   c                    g | ]G}t          |                                          #t          t          |                    d d         HS r   r  rK   s     r$   rN   z'apply_quality_guard.<locals>.<listcomp>  sJ    jjjQ[^_`[a[a[g[g[i[ij
3q66**4C40jjjr&   r   r*   c                    g | ]G}t          |                                          #t          t          |                    d d         HS r   r  rK   s     r$   rN   z'apply_quality_guard.<locals>.<listcomp>  r  r&   rp   r   rs   rn  r   r   r   r'   r   c                    g | ]G}t          |                                          #t          t          |                    d d         HS r   r  rK   s     r$   rN   z'apply_quality_guard.<locals>.<listcomp>  J    nnn_bcd_e_e_k_k_m_mn:c!ff--dsd3nnnr&   c                    g | ]G}t          |                                          #t          t          |                    d d         HS r   r  rK   s     r$   rN   z'apply_quality_guard.<locals>.<listcomp>  r  r&   )r   ru  r   rC  rV  ri   r   r   rW   r   r  r;  r  r3   r  ri  r[   r   r   r   r   r  r  )rj  rD   r  fallback_summaryfallback_bulletssummary_nowbullets_nowrebuiltrebuilt_summaryrebuilt_linesrebuilt_bulletsrebuilt_detail
rd_summaryrd_liness                 r$   apply_quality_guardr+    sT   CCDDF !&$.$,GGF!#fjj&;&;&Ar"B"BCCjj6::i;P;P;VTVjjjkmlmkmnT\/R00K\\dl6Hb\\\K~!!!+v66 	6:PQ\^i:j:j 	6 6/5 f55 	49OP[]h9i9i 	4 4/3!+v66 	6 6/5 f55 	4 4/3>X%%*:%4<%2&&**/3T"" 2#NL!6t7G!H!H	
 
 
 %S5E)F)F)L"%M%MNN.w{{>/J/JRSTTT 	8"1$3$"7D 	2 -bqb 1D&t,, -&vt~t|LL$SY)?)?)E2%F%FGGnngkk)>T>T>ZXZnnnoqpqoqr 	1*4C40DL 	+*DL*NL!6t7G!H!H	
 
 
  N$6$67G$H$H$NB O OPP
).*<*<^*L*LTUVVV 	3",TcT"2D 	- (!D%% -&vt~t|LL$SY)?)?)E2%F%FGGnngkk)>T>T>ZXZnnnoqpqoqr 	1*4C40DL 	+*DL*NL!6t7G!H!H	
 
 
  N$6$67G$H$H$NB O OPP
).*<*<^*L*LTUVVV 	3",TcT"2D 	- (!D'- -$	- 	-r&   )r   r   r   r	   )r   r   r   rA   r`  )rD   r   rE   rF   r   r   )r   r   ri   r   r   r   )r   )r   r   r   r   r   r   )r   r   r   r   )rD   r   ri   r   r   r   )rD   r   ri   r   r   r   r   r   r   r   r   r   r?   r   r   r   )NN)rD   r   ri   r   r   r   r   r   r   r   r   r   r?   r   r   r   r   rF   r   r   r   r	   )r   r   ri   r   r   r   r   r   )rD   r   r   r   r   r   r+   )r   r   r  r   r   r   )r   r   r  r   r   r   )rD   r   r   r   r   r   )rD   r   r   r   )r   r   r   r   r   rA   )r   r   ri   r   r   r   r   r	   )r   )rc   rW  r(   r   r   r   )
r   r   ri   r   r   r   r[  rF   r   r	   )rj  rk  r   rl  )rj  rk  r   r   )rj  rk  r   r   )T)rj  rk  r  rA   r   rl  )F)rj  rk  r  rA   r   rl  )r  r  r  rA   r   rl  )r   r   rD   r   r   rA   )r   r   rD   r   r   rA   )r  r  r   rl  )rj  rk  r   rA   )5
__future__r   r   r   
_bootstrapglobalsrd  varsr@   rC   rh   r   r   rx   r   r   r   r   r   r   r   r  r$  r   r   r   r;  rV  r   ri  r  r  r  r  r  r  r  r   rY   r   r  r  r  r  rr  r  r  r  r  r  r  r  r+  rI   r&   r$   <module>r0     sV   " " " " " " % % % % % % 		  j!! " " ".P .P .P .Pb
 
 
 
<Z <Z <Z <Z <Z~(  (  (  ( V@ @ @ @1 1 1 1#> #> #> #> #>L   S S S S2   V *.+/^C ^C ^C ^C ^CB	0 0 0 0B	; 	; 	; 	;1 1 1 1*6; 6; 6; 6;r& & & &R, , , ,^
\ 
\ 
\ 
\< < < < K K K K\    0 37	K K K K K\3/ 3/ 3/ 3/j,& ,& ,& ,&^K K K K\08 08 08 08 08f2 2 2 22 2 2 2 2DD D D D D
 ZZ mD   JJ SD   jj ED   JJgikimnn JJ |D     "   >%0 %0 %0 %0P! ! ! !*   (+ + + +,   (T- T- T- T- T- T-r&   