Ë
    0Rj«c  ã                   ó¦  — d Z ddlZddlZddlZddlZddlmZ ddlZddlm	Z	  ee
«      j                  j                  «       Zedz  Zedz  Zedz  Zdd	d
ddddddddœ
ZddddddddœZi dd“dd“dd“dd“dd“d d“d!d“d"d#“d$d“d%d“d&d“d'd	“d(d
“d)d“d*d“d+d“d,d“d-di¥Zi dd.d/d0d1d2d3d4d5œ“dd.d6d7d8d9d:d;d5œ“dd<d=d>d8d9d:d?d5œ“dd@dAdBdCdDd:dEdFœ“ddGdHdId:dJdKœ“d dLdMd8dNd:dOdPœ“d!dLdQd8dRdSdTdPœ“d"dUdVdWdXdYœ“d$dZd[d\d]d^d_d`œ“d%dadbdcd8d]d:dddeœ“d&dfdgdhdidjœ“d'dkdldmdndodpœ“d(dkdldqdrdsdpœ“d)dkdAdtdudYœ“d*dvdwdxdyœ“d+dzd6d{d|d}d~dd€œ“d,dzdbd�d‚dƒd„d…œ“d-d†d6d‡dˆdSd‰d…œi¥Zh dŠ£Zh d‹£ZdŒZd�ZdŽZd�Zd�Zd‘Zd’„ Zd“ed”ed•efd–„Zd“ed”ed•efd—„Z d“ed”ed•efd˜„Z!d™„ Z"d“edše#d›e$dœefd�„Z%dže$fdŸ„Z&d e#d•e#fd¡„Z'd¢e$d•e#fd£„Z(d¢e$d•e#fd¤„Z)d«d¥e*d¦e#d§e#d•e#fd¨„Z+d©„ Z,e-dªk(  r e,«        yy)¬u©  æ ¹æ�® comps.yaml ç”Ÿæˆ� rental-260705 çš„ä¸­é—´æ•°æ�®è¡¨ã€�é¡µé�¢å’Œåª’ä½“ç›®å½•ã€‚

- ä¿®å¤� ç§Ÿæˆ¿260705/ ä¸‹ä¹±ç �ç›®å½•å��
- å°†æ‹†åˆ†å­—æ®µä¿�å­˜ä¸º data.yamlï¼ˆä¸­é—´è¡¨æ ¼ï¼‰
- HTML ä¸­ç”¨æ‰‹å·¥ç»„ç»‡çš„è‡ªç„¶è¯­è¨€å±•ç¤ºï¼Œä¸�å†�ç»†ç¢Žåœ°åˆ—å‡ºæ‰€æœ‰å­�å­—æ®µ
- åª’ä½“é€šè¿‡ fetch('media.json') åŠ¨æ€�åŠ è½½ï¼Œä½¿ç”¨ BASE_PATH è§£æž�ç»�å¯¹è·¯å¾„
- ç”Ÿæˆ�åŽ‹ç¼©å›¾ã€�ç¼©ç•¥å›¾ã€�media.jsonã€�data.yaml å’Œ comps.html
é    N)ÚPath)ÚImageu   ç§Ÿæˆ¿260705u   ç§Ÿæˆ¿260630zrental-260705zchangwa-2-5zchangwa-1-102úchangwa-1-602úligong-fushu-nan14údaoxiang-4-1201zdaoxiang-6-1207zchedaogou-10zchedaogou-shequ-6-13z
changwa-17úhuixin-jiayuan)
u   åŽ‚æ´¼2å�·é™¢5å�·æ¥¼u   åŽ‚æ´¼ä¸€å±‚u   åŽ‚æ´¼å…­å±‚u   ç�†å·¥é™„ä¸­å®¶å±žæ¥¼å�—14u   ç¨»è¥¿4å�·æ¥¼8-1201u   ç¨»è¥¿6å�·æ¥¼1207õ   è½¦é�“æ²Ÿ10å�·é™¢õ   è½¦é�“æ²Ÿç¤¾åŒºu   åŽ‚æ´¼17õ   æ±‡æ–°å®¶å›­zwanquanzhuangbei-2-711zwanquanzhuangbei-4-310zxiaonanzhuang-24-762zlixinhong-5-1-6zsanyimiao-1cengzcaizhihuiguan-Gzcaizhihuiguan-3)u   ä¸‡åŒ—2-711u   ä¸‡åŒ—4-310u   å°�å�—åº„24u   çº¢5æ¥¼õ	   ä¸‰ä¹‰åº™u   è´¢æ™ºå…¬é¦†Gu   è´¢æ™ºå…¬é¦†3é   é   é   é   é   é   é   é   znengjia-gongyué	   é
   é   é   é   é   é   é   é   é   u   ä¸‡æ³‰åº„åŒ—ç¤¾åŒºu   2å�·æ¥¼Ú711u   ä¸¤å®¤ä¸€åŽ…u   60å¤šå¹³u	   ä¸œè¥¿å�‘uÏ   ä¸‡æ³‰åº„åŒ—ç¤¾åŒº2å�·æ¥¼711ï¼Œä¸¤å®¤ä¸€åŽ…çº¦60å¤šå¹³ï¼Œä¸œè¥¿å�‘ã€‚å…¨ç“·ç –ï¼›ä¸œå�§å��å°�ã€�å¢™é�¢æœ‰ç‚¹è„�ï¼Œé…�çš„æ˜¯å°�åºŠå¸¦é¡¶æŸœå’Œç¡¬åºŠåž«ï¼Œè¥¿å�§ä¸ŽåŽŸå…ˆæˆ¿å­�å·®ä¸�å¤šå¤§ï¼Œçª—å¤–å…¨æ˜¯æ ‘ã€‚)õ   å°�åŒºõ   æ¥¼å�·õ   æˆ¿å�·õ   æˆ·åž‹õ   é�¢ç§¯õ   æœ�å�‘õ   æ¦‚è¿°u   4å�·æ¥¼Ú310u   ä¸€å®¤ä¸€åŽ…u   40å¤šå¹³u   æœ�å�—ul   ä¸‡æ³‰åº„åŒ—ç¤¾åŒº4å�·æ¥¼310ï¼Œä¸€å®¤ä¸€åŽ…40å¤šå¹³ï¼Œæœ�å�—ï¼Œæœ‰é˜³å�°ï¼Œæœ¨åœ°æ�¿ï¼Œè£…ä¿®è´¨é‡�ä¸€èˆ¬ã€‚u	   å°�å�—åº„u   24å�·æ¥¼Ú762uq   å°�å�—åº„24å�·æ¥¼762ï¼Œä¸€å®¤ä¸€åŽ…40å¤šå¹³ï¼Œæœ�å�—ï¼Œæœ‰é˜³å�°ï¼Œæœ¨åœ°æ�¿ã€‚åº•ä»·5200ï¼Œå�¦åŠ 10%æœ�åŠ¡è´¹ã€‚u	   ç«‹æ–°çº¢u   5å�·æ¥¼u   1å�•å…ƒu   6å±‚u   20æ�¥å¹³u†   ç«‹æ–°çº¢5å�·æ¥¼1å�•å…ƒ6å±‚ï¼Œ20æ�¥å¹³å�•é—´ï¼Œæœ�å�—ï¼Œçª—å¤–æ˜¯ç´«é‡‘åº„å›­ï¼Œä¸¤æˆ·å�ˆç§Ÿã€‚æ¥¼é�“çŽ¯å¢ƒä¸€èˆ¬ï¼Œä¸€å±‚æ˜¯å•†æˆ·ã€‚)r    r!   õ   å�•å…ƒõ   æ¥¼å±‚r$   r%   r&   r   u   1å±‚u	   å��å‡ å¹³uO   ä¸‰ä¹‰åº™1å±‚ï¼Œå��å‡ å¹³ç‹­é•¿éš”æ–­æˆ¿ï¼Œæœ�å�—ï¼Œæœ¨åœ°æ�¿ï¼Œå››æˆ·å�ˆç§Ÿã€‚)r    r*   r$   r%   r&   u   è´¢æ™ºä¼šé¦†u   Gå±‚ï¼ˆäºŒå±‚ï¼‰u   45å¹³ur   è´¢æ™ºä¼šé¦†Gå±‚ï¼ˆäºŒå±‚ï¼‰ï¼Œä¸€å®¤ä¸€åŽ…45å¹³ï¼Œæœ�å�—ï¼Œç“·ç –ï¼Œå�ªæœ‰ä¸€å°�æ‰‡çª—èƒ½å¼€ï¼Œè£…ä¿®æ¯”è¾ƒæ–°ã€‚)r    r*   r#   r$   r%   r&   u   3å±‚ï¼ˆå››å±‚ï¼‰u   48å¹³u   æœ�ä¸œu]   è´¢æ™ºä¼šé¦†3å±‚ï¼ˆå››å±‚ï¼‰ï¼Œä¸€å®¤ä¸€åŽ…48å¹³ï¼Œæœ�ä¸œï¼Œæœ¨åœ°æ�¿ï¼ŒæŸœå­�æœ‰æœ¨å¤´å‘³ã€‚u   å±•è§ˆé¦†è·¯å°�åŒºu   èƒ½å˜‰å…¬å¯“u   ä¸€å®¤ä¸€åŽ…å…¬å¯“u}   å±•è§ˆé¦†è·¯å°�åŒºèƒ½å˜‰å…¬å¯“ï¼Œä¸€å®¤ä¸€åŽ…å…¬å¯“ï¼Œå•†ç”µ1.5å…ƒ/åº¦ï¼Œä¾›æš–è´¹400/æœˆï¼Œå…¶ä»–å…�è´¹ï¼Œä¸�å�¯å…»å® ç‰©ã€‚)r    r!   r#   r&   u   ç�†å·¥é™„ä¸­å®¶å±žæ¥¼u   å�—14u   å¹³æˆ¿ï¼ˆä¸€å®¤ä¸€åŽ…+é˜�æ¥¼ï¼‰u   40å¹³å·¦å�³u   é—¨æœ�åŒ—ï¼Œå�—è¾¹æœ‰å…­å±‚æ¥¼u¸   ç�†å·¥é™„ä¸­å®¶å±žæ¥¼å�—14ï¼Œå¹³æˆ¿å¸¦ä¸€å®¤ä¸€åŽ…å’Œé˜�æ¥¼ï¼Œå…±40å¹³å·¦å�³ï¼Œé—¨æœ�åŒ—ï¼Œé—¨å¤–æœ‰ç§�è�œï¼Œå¢™æ˜¯ç –å¢™å�šäº†ä¿�æ¸©ï¼Œå�—è¾¹æœ‰å…­å±‚æ¥¼ï¼Œå†¬å¤©é‡‡å…‰å�¯èƒ½å·®ç‚¹ã€‚)r    r"   r#   r$   r%   r&   r
   u   6å�·æ¥¼u   13å±‚u_   è½¦é�“æ²Ÿç¤¾åŒº6å�·æ¥¼13å±‚ï¼Œä¸€å®¤ä¸€åŽ…40å¹³å·¦å�³ï¼Œæœ�å�—ï¼Œè§†é‡Žå®½é˜”ï¼Œæˆ¿ä¸œç›´ç§Ÿã€‚)r    r!   r*   r#   r$   r%   r&   r	   u   å¤�å¼�u	   200å¤šå¹³u_   è½¦é�“æ²Ÿ10å�·é™¢ï¼Œ200å¤šå¹³å¤�å¼�ï¼Œä¸€å±‚ä½�ä¿©å¥³ç”Ÿï¼ŒäºŒå±‚ä½�ä¿©äººåŠ ä¸»å�§å’Œæˆ¿ä¸œã€‚)r    r#   r$   r&   u   åŽ‚æ´¼2å�·é™¢u   1å�·æ¥¼Ú102u   è·³å�°u/   åŽ‚æ´¼2å�·é™¢1å�·æ¥¼102ï¼Œè·³å�°ï¼Œæœ‰éœ‰ç‚¹ã€‚)r    r!   r"   r#   r&   Ú602u0   æ‰“éš”æ–­çš„ä¸¤å®¤ä¸€åŽ…ï¼ˆæŒ‰ä¸€å®¤ä¸€åŽ…ç§Ÿï¼‰u‰   åŽ‚æ´¼2å�·é™¢1å�·æ¥¼602ï¼Œæ‰“éš”æ–­çš„ä¸¤å®¤ä¸€åŽ…æŒ‰ä¸€å®¤ä¸€åŽ…å‡ºç§Ÿï¼Œå�¦ä¸€å®¶ä¸»å�§å¸¦ç‹¬å�«ä¸�å…±ç”¨åŽ¨å�«ï¼Œæ˜ŽåŽ¨æ˜Žå�«æœ�å�—ã€‚u   ä¸»å�§å¸¦ç‹¬å�«u6   åŽ‚æ´¼2å�·é™¢5å�·æ¥¼ï¼Œä¸»å�§å¸¦ç‹¬å�«ï¼Œ4å®¶å�ˆç§Ÿã€‚u   åŽ‚æ´¼å°�åŒºu   17å�·æ¥¼u3   åŽ‚æ´¼å°�åŒº17å�·æ¥¼ï¼Œ3500èƒ½è°ˆï¼Œè¿˜æ²¡åŽ»çœ‹ã€‚)r    r!   r&   u   ç¨»é¦™å›­è¥¿é‡Œu   8å�•å…ƒÚ1201u   ä¸€å®¤u	   æœ�è¥¿å�—uW   ç¨»é¦™å›­è¥¿é‡Œ4å�·æ¥¼8å�•å…ƒ1201ï¼Œä¸€å®¤æœ�è¥¿å�—ï¼Œä¸‰å®¶å�ˆç§Ÿï¼Œå‰�ç§Ÿæˆ·å…»çŒ«ã€‚)r    r!   r)   r"   r#   r%   r&   Ú1207u	   æœªè¯´æ˜Žu   æœ�åŒ—/æœ�è¥¿ub   ç¨»é¦™å›­è¥¿é‡Œ6å�·æ¥¼1207ï¼Œå¤§çª—æˆ·æœ�åŒ—ã€�å°�çª—æˆ·æœ�è¥¿ï¼Œå››å®¶å�ˆç§Ÿï¼Œå±‹é‡Œæœ‰è‚¡å‘³ã€‚)r    r!   r"   r#   r%   r&   r   Ú502u   å�ˆç§Ÿå�•é—´ï¼ˆå®¢åŽ…éš”æ–­ï¼‰u„   æ±‡æ–°å®¶å›­4å�·æ¥¼502ï¼Œæœ�ä¸œï¼Œä¸‰å®¶å�ˆç§Ÿï¼Œä¸¤ä¸ª30å¤šå²�ç”·çš„ï¼Œé‡‡å…‰ä¸€èˆ¬ï¼Œæˆ¿é—´æ˜¯å®¢åŽ…éš”å‡ºæ�¥çš„ï¼Œç©ºé—´è¿˜è¡Œã€‚>   ú.gifú.pngú.jpegú.webpú.jpg>   ú.mkvú.movú.webmú.mp4i@  éP   ià  éK   i   é   c                  óF  — t         j                  «       st        dt         › �«       g S g } t        t         j	                  «       «      D ]»  }|j                  «       sŒd}	 |j                  j                  d«      j                  d«      }|t        vrt        d|› �«       ŒXt        |   }t         |z  }|j                  «       rt        d|› �«       n"|j                  |«       t        d|› d|› �«       | j                  |«       Œ½ | S # t        $ r |j                  }Y Œ–w xY w)	u#   æŠŠä¹±ç �ç›®å½•é‡�å‘½å��ä¸º slugã€‚u   æº�ç›®å½•ä¸�å­˜åœ¨ï¼šNÚcp866úutf-8u   æœªåœ¨æ˜ å°„è¡¨ä¸­æ‰¾åˆ°ï¼šu   ç›®æ ‡å·²å­˜åœ¨ï¼Œè·³è¿‡ï¼šu   é‡�å‘½å��ï¼šz -> )ÚSRC_DIRÚexistsÚprintÚsortedÚiterdirÚis_dirÚnameÚencodeÚdecodeÚ	ExceptionÚ
DIR_RENAMEÚrenameÚappend)ÚrenamedÚdÚdecodedÚslugÚtargets        ú./html_logs/build_260705.pyÚfix_dir_namesrR   Þ   s  € ä�>‰>ÔÜÐ%¤g YÐ/Ô0Øˆ	Ø€GÜ”G—O‘OÓ%Ö&ˆØ�x‰xŒzØØˆð	Ø—f‘f—m‘m GÓ,×3Ñ3°GÓ<ˆGð œ*Ñ$ÜÐ/°¨yÐ9Ô:ØÜ˜'Ñ"ˆÜ˜4‘ˆØ�=‰=Œ?ÜÐ/°¨vÐ6Õ7à�H‰H�VÔÜ�L  	¨¨d¨VÐ4Ô5Ø�‰�tÕð% 'ð& €Nøô ò 	Ø—f‘fŠGð	ús   Á*DÄD ÄD ÚsrcÚdstÚreturnc                 ó¦  — 	 |j                   j                  dd¬«       t        j                  | «      5 }|j                  dv r|j                  d«      }|j                  t        t        ft        j                  «       |j                  |dt        d¬«       d d d «       y# 1 sw Y   yxY w# t        $ r}t        d| › d|› �«       Y d }~y	d }~ww xY w)
NT©ÚparentsÚexist_ok©ÚRGBAÚPÚRGBÚJPEG©ÚqualityÚoptimizeu     [å›¾ç‰‡åŽ‹ç¼©å¤±è´¥] ú: F)ÚparentÚmkdirr   ÚopenÚmodeÚconvertÚ	thumbnailÚFULL_MAX_SIZEÚLANCZOSÚsaveÚFULL_QUALITYrH   rA   ©rS   rT   ÚimÚes       rQ   Úcompress_imagerp   ú   s­   € ð
Ø�
‰
×Ñ °ÐÔ5Ü�Z‰Z˜Œ_ Ø�w‰w˜-Ñ'Ø—Z‘Z Ó&�Ø�L‰Lœ-¬Ð7¼¿¹ÔGØ�G‰G�C˜¬ÀˆGÔE÷	 ð
 ÷ ð
 ûÜò ÜÐ'¨ u¨B¨q¨cÐ2Ô3Üûðúó5   ‚2B, ´A#B ÂB, Â B)Â%B, Â)B, Â,	CÂ5CÃCc                 ó¦  — 	 |j                   j                  dd¬«       t        j                  | «      5 }|j                  dv r|j                  d«      }|j                  t        t        ft        j                  «       |j                  |dt        d¬«       d d d «       y# 1 sw Y   yxY w# t        $ r}t        d| › d|› �«       Y d }~y	d }~ww xY w)
NTrW   rZ   r]   r^   r_   u     [ç¼©ç•¥å›¾å¤±è´¥] rb   F)rc   rd   r   re   rf   rg   rh   ÚTHUMB_MAX_SIZErj   rk   ÚTHUMB_QUALITYrH   rA   rm   s       rQ   Úmake_thumbnailru     s­   € ð
Ø�
‰
×Ñ °ÐÔ5Ü�Z‰Z˜Œ_ Ø�w‰w˜-Ñ'Ø—Z‘Z Ó&�Ø�L‰Lœ.¬.Ð9¼5¿=¹=ÔIØ�G‰G�C˜¬ÀˆGÔF÷	 ð
 ÷ ð
 ûÜò ÜÐ$ S E¨¨A¨3Ð/Ô0Üûðúrq   c                 ó„  — |j                   j                  dd¬«       dddt        | «      dddt        t        «      d	d
ddt        › d�ddddddt        |«      g}	 t        j                  |dt
        j                  t
        j                  ¬«       y# t
        j                  $ r}t        d| › d|› �«       Y d }~yd }~ww xY w)NTrW   Úffmpegz-yz-iz-c:vÚlibx264z-crfz-presetÚmediumz-vfzscale='min(z,iw)':-2,format=yuv420pz-c:aÚaacz-b:aÚ128kz	-movflagsz
+faststart)ÚcheckÚstdoutÚstderru     [è§†é¢‘åŽ‹ç¼©å¤±è´¥] rb   F)
rc   rd   ÚstrÚ	VIDEO_CRFÚVIDEO_MAX_WIDTHÚ
subprocessÚrunÚDEVNULLÚCalledProcessErrorrA   )rS   rT   Úcmdro   s       rQ   Úcompress_videor‡     s·   € Ø‡J�J×Ñ˜T¨DÐÔ1à�$˜œc #›hØ�	˜6¤3¤y£>°9¸hØ�œ_Ð-Ð-DÐEØ��v˜v {°LÜˆC‹ð€CðÜ�‰�s $¬z×/AÑ/AÌ*×J\ÑJ\Õ]ØøÜ×(Ñ(ò ÜÐ'¨ u¨B¨q¨cÐ2Ô3Üûðús   Á5B ÂB?Â$B:Â:B?c                  óà  — t         j                  dd¬«       t         dz  } | j                  d¬«       i }t        t        j	                  «       «      D ]8  }t
        |z  }|j                  «       sŒt        d|› �«       t        |||| «       Œ: t        t        j	                  «       «      D ]c  }t        j                  «       D ��ci c]  \  }}||“Œ
 c}}|   }t        |z  }|j                  «       sŒHt        d|› �«       t        |||| «       Œe t        t         dz  dd	¬
«      5 }t        j                  ||dd¬«       ddd«       t        dt         dz  › �«       |S c c}}w # 1 sw Y   Œ&xY w)uW   å¤„ç�† ç§Ÿæˆ¿260705/ å’Œ ç§Ÿæˆ¿260630/ ä¸‹çš„åª’ä½“ï¼Œè¾“å‡ºåˆ° rental-260705/media/ã€‚TrW   Úmedia)rY   u   å¤„ç�†åª’ä½“ u   å¤„ç�†åª’ä½“ 260630/z
media.jsonÚwr>   ©ÚencodingFr   )Úensure_asciiÚindentNõ
   å·²ç”Ÿæˆ� )ÚOUT_DIRrd   rB   rI   Úvaluesr?   r@   rA   Ú_process_media_dirÚDIR_TO_SLUG_260630ÚitemsÚSRC_DIR_260630re   ÚjsonÚdump)Ú	media_dirÚdatarO   rS   ÚkÚvÚsrc_nameÚfps           rQ   Úbuild_mediarž   '  sI  € ä‡M�M˜$¨€MÔ.Ü˜'Ñ!€IØ‡O�O˜T€OÔ"Ø€Dä”z×(Ñ(Ó*Ö+ˆÜ˜‰nˆØ�z‰zŒ|ØÜ�˜d˜VÐ$Ô%Ü˜3  d¨IÕ6ð ,ô Ô)×0Ñ0Ó2Ö3ˆä%7×%=Ñ%=Ô%?Ô@Ñ%?™T˜Q �A�q‘DÐ%?Ò@ÀÑFˆÜ˜xÑ'ˆØ�z‰zŒ|ØÜÐ$ T FÐ+Ô,Ü˜3  d¨IÕ6ð 4ô 
Œg˜Ñ$ c°GÕ	<ÀÜ�	‰	�$˜¨°qÕ9÷ 
=ä	ˆJ”w Ñ-Ð.Ð
/Ô0Ø€Kùó A÷ 
=Ð	<ús   ÃEÄ%E$Å$E-rO   r™   r˜   c                 ó�  — g g g dœ||<   ||z  }|dz  }|j                  dd¬«       t        | j                  «       «      D �]  }|j                  «       r|j                  j
                  dk(  rŒ.|j                  j                  «       }|t        v rm|j                  dz   }||z  }	||z  }
t        ||	«      r||   d   j                  d|› d|› �«       t        ||
«      sŒŸ||   d	   j                  d|› d
|› �«       Œ½|t        v sŒÆ|j                  dz   }||z  }t        ||«      sŒç||   d   j                  d|› d|› �«       �Œ y )N©ÚimagesÚ
thumbnailsÚvideosÚthumbsTrW   r4   r¡   zmedia/Ú/r¢   z/thumbs/r8   r£   )rd   rB   rC   Úis_filerc   rE   ÚsuffixÚlowerÚ
IMAGE_EXTSÚstemrp   rK   ru   Ú
VIDEO_EXTSr‡   )rS   rO   r™   r˜   Údst_baseÚ	thumb_dirÚfÚextÚout_nameÚfull_dstÚ	thumb_dstÚ	video_dsts               rQ   r’   r’   D  sH  € Ø¨b¸BÑ?€Dˆ�JØ˜4Ñ€HØ˜8Ñ#€IØ‡O�O˜D¨4€OÔ0ä�C—K‘K“M×"ˆØ�y‰yŒ{˜aŸh™hŸm™m¨xÒ7ØØ�h‰h�n‰nÓˆØ”*ÑØ—v‘v ‘ˆHØ (Ñ*ˆHØ! HÑ,ˆIÜ˜a Ô*Ø�T‘
˜8Ñ$×+Ñ+¨f°T°F¸!¸H¸:Ð,FÔGÜ˜a Õ+Ø�T‘
˜<Ñ(×/Ñ/°&¸¸¸hÀxÀjÐ0QÕRØ”JÒØ—v‘v ‘ˆHØ  8Ñ+ˆIÜ˜a Õ+Ø�T‘
˜8Ñ$×+Ñ+¨f°T°F¸!¸H¸:Ð,FÖGñ! #ó    r‰   c                 ó0  — t        t        dz  d¬«      5 }t        j                  |«      }ddd«       g }t	        d¬«      D ]ì  \  }}i d|“dt
        |   “d	|j                  d	d
«      “dd
“dd
“dd
“dd
“dd
“dd
“dd
“dd
“d|j                  dd
«      “d|j                  d«      xs d
“d|j                  d«      xs d
“d|j                  d«      xs d
“dd
“dd
“}|j                  t        j                  |i «      «       | j                  |d   g g g dœ«      |d<   |j                  |«       Œî t        t        dz  dd¬«      5 }t        j                  ||dd¬«       ddd«       t        d t        dz  › �«       |S # 1 sw Y   �ŒVxY w# 1 sw Y   Œ-xY w)!u   ç”Ÿæˆ�ä¸­é—´è¡¨æ ¼ data.yamlã€‚z
comps.yamlr>   r‹   Nr   )ÚstartÚidrO   õ   ä½�ç½®Ú r    r!   r)   r*   r"   r#   r$   r%   õ   æƒ…å†µõ   åŽ¨å�«õ   è´¹ç”¨õ   å…¶ä»–õ   åˆ°å�•ä½�é€šå‹¤è·�ç¦»õ   åˆ°çŽ°åœ¨å±…ä½�åœ°é€šå‹¤è·�ç¦»r    r‰   z	data.yamlrŠ   TF)Úallow_unicodeÚ	sort_keysr�   )re   ÚBASE_DIRÚyamlÚ	safe_loadÚ	enumerateÚSLUGSÚgetÚupdateÚ	OVERRIDESrK   r�   r—   rA   )r‰   r®   ÚrawÚentriesÚiÚitemro   r�   s           rQ   Ú
build_datarÎ   ]  sò  € ä	Œh˜Ñ%°Õ	8¸AÜ�n‰n˜QÓˆ÷ 
9ð €GÜ˜S¨×*‰ˆˆ4ð
Ø�!ð
à”E˜!‘Hð
ð �d—h‘h˜x¨Ó,ð
ð �bð	
ð
 �bð
ð �bð
ð �bð
ð �bð
ð �bð
ð �bð
ð �bð
ð �d—h‘h˜x¨Ó,ð
ð �d—h‘h˜xÓ(Ò.¨Bð
ð �d—h‘h˜xÓ(Ò.¨Bð
ð �d—h‘h˜xÓ(Ò.¨Bð
ð  $ Rð!
ð" -¨bð#
ˆð& 	
�‰”—‘˜q "Ó%Ô&Ø—Y‘Y˜q ™y°RÀrÐUWÑ*XÓYˆˆ'‰
Ø�‰�qÕð- +ô0 
Œg˜Ñ# S°7Õ	;¸rÜ�	‰	�'˜2¨T¸UÕC÷ 
<ä	ˆJ”w Ñ,Ð-Ð
.Ô/Ø€N÷? 
9Ñ	8ú÷8 
<Ð	;ús   •E?ÅFÅ?F	ÆFÚfeec                 ó¾   — | syt        j                  d| «      }|r|j                  d«      S t        j                  d| «      }|rd|j                  d«      › �S d| v ryy)Nr¹   u   \+(\d+(?:\.\d+)?%)æœ�åŠ¡è´¹r   u   ä¸­ä»‹è´¹(\d+ä¸ªæœˆ)u   ä¸­ä»‹u   æ— å…¶ä»–è´¹ç”¨u   æ— )ÚreÚsearchÚgroup)rÏ   Úms     rQ   Úextract_service_feerÕ   �  sa   € ÙØÜ
�	‰	Ð0°#Ó6€AÙØ�w‰w�q‹zÐÜ
�	‰	Ð)¨3Ó/€AÙØ˜Ÿ™ ›
�|Ð$Ð$Ø˜CÑØØr´   ro   c                 ó²   — | j                  dd«      g}dD ](  }| j                  |d«      }|sŒ|j                  |«       Œ* dj                  d„ |D «       «      S )Nr    r¹   )r!   r)   r*   r"   Ú c              3   ó&   K  — | ]	  }|sŒ|–— Œ y ­w©N© ©Ú.0Úps     rQ   Ú	<genexpr>z#location_summary.<locals>.<genexpr>•  s   è ø€ Ð*™u˜!ª”A™uùó   ‚Š)rÇ   rK   Újoin)ro   Úpartsrš   r›   s       rQ   Úlocation_summaryrâ   �  sS   € Ø�U‰U�8˜RÓ Ð!€EÛ5ˆØ�E‰E�!�R‹LˆÚØ�L‰L˜�Oð 6ð �8‰8Ñ*™uÓ*Ó*Ð*r´   c                 ó¤   — | j                  dd«      | j                  dd«      | j                  dd«      g}dj                  d„ |D «       «      xs dS )Nr#   r¹   r$   r%   u   ï¼Œc              3   ó&   K  — | ]	  }|sŒ|–— Œ y ­wrÙ   rÚ   rÛ   s     rQ   rÞ   ztype_summary.<locals>.<genexpr>š  s   è ø€ Ð,¡˜Aª!”a¡ùrß   Ú-)rÇ   rà   )ro   rá   s     rQ   Útype_summaryræ   ˜  sI   € Ø�U‰U�8˜RÓ  !§%¡%¨°"Ó"5°q·u±u¸XÀrÓ7JÐK€EØ�:‰:Ñ,¡Ó,Ó,Ò3°Ð3r´   rË   ÚtitleÚsubtitlec                 óV  — g }| D ]€  }|j                  d|d   › dt        |«      › dt        |«      › d|j                  dd«      xs d› d	t	        |j                  dd«      «      xs d› d
|j                  dd«      xs d› d�«       Œ‚ dj                  |«      }g }| D ]Ú  }|j                  dd«      xs t        |«      }|j                  d|j                  dd«      «      }|j                  d|d   › d|› d|› d|j                  dd«      xs d› d|j                  dd«      xs d› d|j                  dd«      xs d› d|j                  dd«      xs d› d|j                  dd«      xs d› d|d   › d�«       ŒÜ dj                  |«      }d |› d!|xs d"t        | «      › d#�› d$|› d%|› d&�	S )'Nz        <tr data-href="#rO   u%   ">
          <td data-label="ä½�ç½®">u6   </td>
          <td data-label="æˆ·åž‹/é�¢ç§¯/æœ�å�‘">u(   </td>
          <td data-label="è´¹ç”¨">r¼   r¹   rå   u+   </td>
          <td data-label="æœ�åŠ¡è´¹">u(   </td>
          <td data-label="åŽ¨å�«">r»   z</td>
        </tr>Ú
r¸   r&   rº   z       <article class="card" id="z">
        <h2>z"</h2>
        <p class="overview">uG   </p>
        <div class="meta">
          <p><strong>åŽ¨å�«ï¼š</strong>u   â€”u,   </p>
          <p><strong>è´¹ç”¨ï¼š</strong>u5   </p>
          <p><strong>åˆ°å�•ä½�é€šå‹¤ï¼š</strong>r¾   u8   </p>
          <p><strong>åˆ°çŽ°å±…åœ°é€šå‹¤ï¼š</strong>r¿   u,   </p>
          <p><strong>å…¶ä»–ï¼š</strong>r½   u‡   </p>
        </div>
        <section class="media">
          <h3>ç…§ç‰‡ / è§†é¢‘</h3>
          <div class="media-gallery" data-slug="z,"></div>
        </section>
      </article>z

uö  <!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>çœ‹æˆ¿å¯¹æ¯”</title>
  <style>
    :root {
      --bg: #f5f5f7;
      --card: #ffffff;
      --text: #333333;
      --muted: #666666;
      --border: #e5e5ea;
      --accent: #007aff;
    }
    * { box-sizing: border-box; }
    body {
      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "PingFang SC", "Microsoft YaHei", sans-serif;
      line-height: 1.65;
      color: var(--text);
      background: var(--bg);
      margin: 0;
      padding: 1rem;
    }
    .container {
      max-width: 900px;
      margin: 0 auto;
    }
    h1 {
      text-align: center;
      margin-bottom: .25rem;
      font-size: 1.5rem;
    }
    .subtitle {
      text-align: center;
      color: var(--muted);
      margin-bottom: 1.25rem;
      font-size: .9rem;
    }

    /* æ¦‚è§ˆè¡¨ */
    table {
      width: 100%;
      border-collapse: collapse;
      background: var(--card);
      margin-bottom: 1.5rem;
      box-shadow: 0 1px 3px rgba(0,0,0,.06);
      border-radius: 10px;
      overflow: hidden;
      font-size: .9rem;
    }
    th, td {
      padding: .7rem .75rem;
      text-align: left;
      border-bottom: 1px solid var(--border);
      vertical-align: top;
    }
    th { background: #fafafc; font-weight: 600; color: #444; }
    tbody tr { transition: background .15s; }
    tbody tr[data-href] { cursor: pointer; }
    tbody tr[data-href]:hover { background: #f2f2f7; }
    tbody tr:last-child td { border-bottom: none; }
    @media (max-width: 640px) {
      table, thead, tbody, th, td, tr { display: block; }
      thead { display: none; }
      tr {
        margin-bottom: .75rem;
        border: 1px solid var(--border);
        border-radius: 10px;
        overflow: hidden;
      }
      td {
        display: flex;
        justify-content: space-between;
        padding: .5rem .75rem;
        border-bottom: 1px solid #f2f2f5;
      }
      td:last-child { border-bottom: none; }
      td::before {
        content: attr(data-label);
        font-weight: 600;
        color: var(--muted);
        margin-right: 1rem;
        flex-shrink: 0;
      }
    }

    /* å�¡ç‰‡ */
    .cards { display: grid; gap: 1rem; }
    .card {
      background: var(--card);
      border-radius: 14px;
      padding: 1.25rem;
      box-shadow: 0 2px 10px rgba(0,0,0,.05);
      scroll-margin-top: 1rem;
    }
    .card h2 {
      margin: 0 0 .5rem;
      font-size: 1.15rem;
      color: #111;
    }
    .card .overview {
      margin: 0 0 .75rem;
      color: var(--text);
      font-size: .98rem;
      line-height: 1.65;
    }
    .card .meta {
      background: #fafafc;
      border-radius: 10px;
      padding: .75rem 1rem;
      margin-bottom: 1rem;
      font-size: .92rem;
    }
    .card .meta p {
      margin: .35rem 0;
    }
    .card .meta strong {
      color: #555;
      margin-right: .3rem;
    }

    /* åª’ä½“åŒº */
    .media { margin-top: .25rem; }
    .media h3 {
      font-size: .85rem;
      color: var(--muted);
      margin: 0 0 .5rem;
      font-weight: 600;
    }
    .gallery {
      display: grid;
      grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
      gap: .5rem;
    }
    .gallery img, .gallery video {
      width: 100%;
      height: 130px;
      object-fit: cover;
      border-radius: 8px;
      background: #f2f2f6;
    }
    .gallery img { cursor: pointer; }
    .gallery-more { display: none; margin-top: .5rem; }
    .gallery-more.visible { display: grid; }
    .gallery-videos { margin-top: .5rem; }
    .gallery-toggle {
      display: block;
      margin: .6rem auto 0;
      padding: .35rem 1rem;
      background: #f2f2f6;
      border: none;
      border-radius: 999px;
      color: var(--accent);
      font-size: .85rem;
      cursor: pointer;
    }
    .placeholder {
      color: #999;
      font-size: .9rem;
      margin: .25rem 0 0;
    }

    /* ç�¯ç®± */
    .lightbox {
      display: none;
      position: fixed;
      inset: 0;
      background: rgba(0,0,0,.92);
      z-index: 100;
      align-items: center;
      justify-content: center;
    }
    .lightbox.active { display: flex; }
    .lightbox img {
      max-width: 92%;
      max-height: 90vh;
      border-radius: 6px;
    }
    .lightbox .close {
      position: absolute;
      top: .75rem;
      right: 1rem;
      color: #fff;
      font-size: 2rem;
      line-height: 1;
      cursor: pointer;
    }
  </style>
</head>
<body>
  <div class="container">
    <h1>z</h1>
    <p class="subtitle">u   å…± u+    å¥—æˆ¿æº�ï¼Œç‚¹å‡»è¡¨æ ¼å�¯è·³è½¬åˆ°è¯¦æƒ…uë   </p>

    <table>
      <thead>
        <tr>
          <th>ä½�ç½®</th>
          <th>æˆ·åž‹/é�¢ç§¯/æœ�å�‘</th>
          <th>è´¹ç”¨</th>
          <th>æœ�åŠ¡è´¹</th>
          <th>åŽ¨å�«</th>
        </tr>
      </thead>
      <tbody>
z7
      </tbody>
    </table>

    <div class="cards">

u  

    </div>
  </div>

  <div class="lightbox" id="lightbox" onclick="this.classList.remove('active')">
    <span class="close">&times;</span>
    <img id="lightbox-img" src="" alt="">
  </div>

  <script>
    const PREVIEW_COUNT = 6;
    const BASE_PATH = location.pathname.replace(/\/[^\/]*$/, '');
    const CACHE_BUST = '?v=3';
    function resolve(p) { return p.startsWith('/') ? p : (BASE_PATH + '/' + p); }

    function imgTag(thumb, full) {
      return `<img src="${resolve(thumb)}" loading="lazy" alt="" onclick="openLightbox('${resolve(full)}')">`;
    }

    function videoTag(src) {
      return `<video src="${resolve(src)}" controls preload="metadata"></video>`;
    }

    async function loadMedia() {
      let data = {};
      try {
        const res = await fetch(resolve('media.json') + CACHE_BUST);
        if (!res.ok) throw new Error('media.json ' + res.status);
        data = await res.json();
      } catch (e) {
        console.error('åŠ è½½ media.json å¤±è´¥', e);
      }

      document.querySelectorAll('.media-gallery').forEach(el => {
        const slug = el.dataset.slug;
        const media = data[slug] || {};
        const images = media.images || [];
        const thumbnails = media.thumbnails || images;
        const videos = media.videos || [];

        if (images.length === 0 && videos.length === 0) {
          el.innerHTML = '<p class="placeholder">æš‚æ— ç…§ç‰‡/è§†é¢‘</p>';
          return;
        }

        const pairs = images.map((src, i) => [thumbnails[i] || src, src]);
        let html = '';

        html += '<div class="gallery gallery-preview">';
        pairs.slice(0, PREVIEW_COUNT).forEach(([thumb, full]) => { html += imgTag(thumb, full); });
        html += '</div>';

        if (pairs.length > PREVIEW_COUNT) {
          html += '<div class="gallery gallery-more">';
          pairs.slice(PREVIEW_COUNT).forEach(([thumb, full]) => { html += imgTag(thumb, full); });
          html += '</div>';
          html += `<button class="gallery-toggle" onclick="toggleGallery(this)">æ˜¾ç¤ºå‰©ä½™ ${pairs.length - PREVIEW_COUNT} å¼ ç…§ç‰‡</button>`;
        }

        if (videos.length) {
          html += '<div class="gallery gallery-videos">';
          videos.forEach(src => { html += videoTag(src); });
          html += '</div>';
        }

        el.innerHTML = html;
      });
    }

    function toggleGallery(btn) {
      const more = btn.previousElementSibling;
      more.classList.toggle('visible');
      const remaining = more.querySelectorAll('img').length;
      btn.textContent = more.classList.contains('visible')
        ? 'æ”¶èµ·ç…§ç‰‡'
        : `æ˜¾ç¤ºå‰©ä½™ ${remaining} å¼ ç…§ç‰‡`;
    }

    function openLightbox(src) {
      const box = document.getElementById('lightbox');
      document.getElementById('lightbox-img').src = src;
      box.classList.add('active');
    }

    document.querySelectorAll('tbody tr[data-href]').forEach(row => {
      row.addEventListener('click', () => {
        location.hash = row.dataset.href;
      });
    });

    loadMedia();
  </script>
</body>
</html>
)rK   râ   ræ   rÇ   rÕ   rà   Úlen)	rË   rç   rè   Úrowsro   Ú	rows_htmlÚcardsÚoverviewÚ
cards_htmls	            rQ   Úrender_htmlrñ   �  sH  € Ø€DÛˆØ�‰Ø'¨¨&©	 {ð 33Ü3CÀAÓ3FÐ2Gð HAÜAMÈaÃÐ@Qð R3Ø34·5±5¸À2Ó3FÒ3MÈ#Ð2Nð O6Ü6IÈ!Ï%É%ÐPXÐY[ÓJ\Ó6]Ò6dÐadÐ5eð f3Ø34·5±5¸À2Ó3FÒ3MÈ#Ð2Nð Oðõ	
ð ð —	‘	˜$“€Ià€EÛˆØ—‘�h Ó#Ò:Ô'7¸Ó':ˆØ—5‘5˜ 1§5¡5¨°2Ó#6Ó7ˆØ�‰Ø1°!°F±)°ð =Ø ˜'ð "-Ø-5¨Jð 76à67·e±e¸HÀbÓ6IÒ6RÈUÐ5Sð T6Ø67·e±e¸HÀbÓ6IÒ6RÈUÐ5Sð T?Ø?@¿u¹uÐE\Ð^`Ó?aÒ?jÐejÐ>kð lBØBCÇ%Á%ÐHhÐjlÓBmÒBvÐqvÐAwð x6Ø67·e±e¸HÀbÓ6IÒ6RÈUÐ5Sð TBð CDÀFÁ)Àð Mð õ	
ð ð( —‘˜UÓ#€Jð@	ð@ 
ˆð Ø#Òg¨¬c°'«l¨^Ð;fÐ'gÐhð ið €ð ð €ð _ðisð sr´   c                  ó   — t        d«       t        «        t        d«       t        «       } t        d«       t        | «      }t        d«       t	        |«      }t        t        dz  dd¬«      5 }|j                  |«       d d d «       t        d	t        dz  › �«       g d
¢}|D �cg c]  }|d   |v sŒ|‘Œ }}t	        |dd¬«      }t        t        dz  dd¬«      5 }|j                  |«       d d d «       t        d	t        dz  › �«       t        dt        dz  › �«       t        dt        dz  › �«       y # 1 sw Y   Œ¶xY wc c}w # 1 sw Y   ŒZxY w)Nu   === ä¿®å¤�ç›®å½•å�� ===u   
=== å¤„ç�†åª’ä½“ ===u   
=== ç”Ÿæˆ�ä¸­é—´è¡¨æ ¼ ===u   
=== ç”Ÿæˆ�é¡µé�¢ ===z
comps.htmlrŠ   r>   r‹   r�   )r   r   r   r   rO   u	   å†³èµ›åœˆu!    shortlisted 4 å¥—ï¼Œé‡�ç‚¹å¯¹æ¯”)rç   rè   z
final.htmlu   
æœ¬åœ°é¢„è§ˆ: file://u   å†³èµ›åœˆé¢„è§ˆ: file://)rA   rR   rž   rÎ   rñ   re   r�   Úwrite)r‰   rË   Úhtmlr®   Úfinal_slugsro   Úfinal_entriesÚ
final_htmls           rQ   Úmainrø   ø  s3  € Ü	Ð
#Ô$Ü„OÜ	Ð
"Ô#Ü‹M€EÜ	Ð
(Ô)Ü˜Ó€GÜ	Ð
"Ô#Ü�wÓ€DÜ	Œg˜Ñ$ c°GÕ	<ÀØ	�‰�Œ÷ 
=ä	ˆJ”w Ñ-Ð.Ð
/Ô0â^€KÙ 'ÓD¡˜1¨1¨V©9¸Ò+C’Q €MÐDÜØØØ4ô€Jô
 
Œg˜Ñ$ c°GÕ	<ÀØ	�‰�
Ô÷ 
=ä	ˆJ”w Ñ-Ð.Ð
/Ô0ä	Ð#¤G¨lÑ$:Ð#;Ð
<Ô=Ü	Ð$¤W¨|Ñ%;Ð$<Ð
=Õ>÷! 
=Ð	<üò
 E÷ 
=Ð	<ús$   Á,D3Â#D?Â0D?ÃEÄ3D<ÅEÚ__main__)u   çœ‹æˆ¿å¯¹æ¯”r¹   ).Ú__doc__r–   rÑ   Úshutilr‚   Úpathlibr   rÃ   ÚPILr   Ú__file__rc   ÚresolverÂ   r?   r•   r�   rI   r“   rÆ   rÉ   r©   r«   ri   rl   rs   rt   r�   r€   rR   Úboolrp   ru   r‡   rž   r   Údictr’   rÎ   rÕ   râ   ræ   Úlistrñ   rø   Ú__name__rÚ   r´   rQ   Ú<module>r     sD  ðñó Û 	Û Û Ý ã Ý á�‹>× Ñ ×(Ñ(Ó*€Ø
�^Ñ
#€Ø˜NÑ*€Ø
�_Ñ
$€ð *Ø#Ø#Ø"6Ø,Ø*Ø'Ø-ØØ$ñ€
ð ,Ø+Ø)Ø Ø"Ø&Ø&ñÐ ð	ØÐð	àÐð	ð Ðð	ð Ðð		ð
 Ðð	ð Ðð	ð Ðð	ð Ðð	ð Ðð	ð Ðð	ð ˆð	ð ˆð	ð ˆð	ð ˆð	ð ˆð	ð  Ðð!	ð" Ðð#	ð$ Ðñ%	€ð,KØØ&ØØØ ØØð dñðKð Ø&ØØØ ØØð AñðKð& ØØØØ ØØð Fñð'Kð8 ØØØØØØð [ñð9KðJ ØØØØØcñðKKðX Ø Ø$Ø ØØð GñðYKðh Ø Ø$Ø ØØØqñðiKðx Ø&Ø Ø&ð Rñ	ðyKðD Ø)ØØ3ØØ2ð MñðEKðT Ø#ØØØ ØØØsñ	ðUKðf Ø%ØØØsñ		ðgKðr Ø!ØØØØCñ	ðsKð@ Ø!ØØØDð ^ñ	ðAKðN Ø!ØØ#ØJñ		ðOKðZ Ø ØØGñ	ð[Kðd Ø#ØØØØØØkñ	ðeKðv Ø#ØØØØ!Øvñ	ðwKðF Ø ØØØ2Øð Yñ	ñGK€	òZ 8€
Ú.€
Ø€Ø€Ø€Ø€Ø€Ø€	òð8˜ð  4ð ¨Dó ð˜ð  4ð ¨Dó ð˜ð  4ð ¨Dó ò"ð:H˜Dð H¨ð H°4ð HÀDó Hð2!�dó !ðH˜Sð  Só ð+˜ð + ó +ð4�Dð 4˜Só 4ñ
X˜ð X cð XÀcð XÐSVó Xòv
?ð8 ˆzÒÙ…Fð r´   